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

Comentarios