1.10 Sobrescribir los métodos de los campos del diálogo
La clase UIBuilder es una clase opcional, no es necesaria crearla a no ser que deseemos darle algún comportamiento especial al diálogo, cosa que si vamos a hacer nosotros, ya que queremos modificar el desplegable que nos muestra los clientes.
Lo primero será crearnos una clase que extienda de la SysOperationAutomaticUIBuilder.
class TestSysOperationUIBuilder extends SysOperationAutomaticUIBuilder
{
DialogField dlgCustAccount;
CustAccount custAccount;
}
Nos crearemos un método lookup para nuestro control.
public void custAccountLookup(FormStringControl _control)
{
SysTableLookup sysTableLookup = SysTableLookup::newParameters(tablenum(CustTable), _control);
Query q = new Query();
QueryBuildDataSource custTableQbds;
QueryBuildDataSource invoiceTableQbds;
//El true es para indicarle que éste es el valor a devolver, si no se le indica
//devuelve el primer campo de los agregados. En éste caso también sería el AccountNum
sysTableLookup.addLookupfield(fieldnum(CustTable, AccountNum),true);
sysTableLookup.addLookupMethod(tableMethodStr(CustTable, Name)); //Con addLookupMethod podemos añadir un método
custTableQbds = q.addDataSource(tablenum(CustTable));
invoiceTableQbds = custTableQbds.addDataSource(tableNum(CustInvoiceTable));
invoiceTableQbds.relations(false);
invoiceTableQbds.joinMode(JoinMode::ExistsJoin);
invoiceTableQbds.addLink(fieldNum(CustTable, AccountNum), fieldNum(CustInvoiceTable, OrderAccount));
sysTableLookup.parmQuery(q);
sysTableLookup.performFormLookup();
}
En el método build le indicaremos al campo del diálogo a que campo hace referencia de la clase contract.
public void postBuild()
{
super();
// get references to dialog controls after creation
dlgCustAccount = this.bindInfo().getDialogField(this.dataContractObject(), methodStr(TestSysOperationDataContract, parmCustAccount));
}
Y en el método postRun le indicaremos que sobrescriba el método lookup de este control, con el método lookup que nos hemos creado en la clase.
public void postRun()
{
super();
//Sobrescribimos el método lookup del control CustAccount
dlgCustAccount.registerOverrideMethod(methodstr(FormStringControl, lookup), methodstr(TestSysOperationUIBuilder, custAccountLookup), this);
}
Modificaremos la cabecera de nuestra clase contract para indicarle que existe una UIBuilder que modifica su comportamiento, así es como quedará.
[DataContractAttribute,
SysOperationContractProcessingAttribute(classStr(TestSysOperationUIBuilder))]
class TestSysOperationDataContract implements SysOperationInitializable, SysPackable
Este post es el equivalente al siguiente para la RunBaseBatch:
1.4. Sobrescribir los métodos de los campos del diálogo
Para descargar el fichero xpo sólo tenéis que presionar en el siguiente enlace:
Descargar fichero xpo
Lo primero será crearnos una clase que extienda de la SysOperationAutomaticUIBuilder.
class TestSysOperationUIBuilder extends SysOperationAutomaticUIBuilder
{
DialogField dlgCustAccount;
CustAccount custAccount;
}
Nos crearemos un método lookup para nuestro control.
public void custAccountLookup(FormStringControl _control)
{
SysTableLookup sysTableLookup = SysTableLookup::newParameters(tablenum(CustTable), _control);
Query q = new Query();
QueryBuildDataSource custTableQbds;
QueryBuildDataSource invoiceTableQbds;
//El true es para indicarle que éste es el valor a devolver, si no se le indica
//devuelve el primer campo de los agregados. En éste caso también sería el AccountNum
sysTableLookup.addLookupfield(fieldnum(CustTable, AccountNum),true);
sysTableLookup.addLookupMethod(tableMethodStr(CustTable, Name)); //Con addLookupMethod podemos añadir un método
custTableQbds = q.addDataSource(tablenum(CustTable));
invoiceTableQbds = custTableQbds.addDataSource(tableNum(CustInvoiceTable));
invoiceTableQbds.relations(false);
invoiceTableQbds.joinMode(JoinMode::ExistsJoin);
invoiceTableQbds.addLink(fieldNum(CustTable, AccountNum), fieldNum(CustInvoiceTable, OrderAccount));
sysTableLookup.parmQuery(q);
sysTableLookup.performFormLookup();
}
En el método build le indicaremos al campo del diálogo a que campo hace referencia de la clase contract.
public void postBuild()
{
super();
// get references to dialog controls after creation
dlgCustAccount = this.bindInfo().getDialogField(this.dataContractObject(), methodStr(TestSysOperationDataContract, parmCustAccount));
}
Y en el método postRun le indicaremos que sobrescriba el método lookup de este control, con el método lookup que nos hemos creado en la clase.
public void postRun()
{
super();
//Sobrescribimos el método lookup del control CustAccount
dlgCustAccount.registerOverrideMethod(methodstr(FormStringControl, lookup), methodstr(TestSysOperationUIBuilder, custAccountLookup), this);
}
Modificaremos la cabecera de nuestra clase contract para indicarle que existe una UIBuilder que modifica su comportamiento, así es como quedará.
[DataContractAttribute,
SysOperationContractProcessingAttribute(classStr(TestSysOperationUIBuilder))]
class TestSysOperationDataContract implements SysOperationInitializable, SysPackable
Este post es el equivalente al siguiente para la RunBaseBatch:
1.4. Sobrescribir los métodos de los campos del diálogo
Para descargar el fichero xpo sólo tenéis que presionar en el siguiente enlace:
Descargar fichero xpo
Comentarios
Publicar un comentario