1.4. Sobrescribir los métodos de los campos del diálogo

En este post explicaremos como podemos sobrescribir los métodos de los campos del diálogo. Con los métodos me refiero a ese grupo de métodos disponibles para los controles.

Por ejemplo, los que se ven en la imagen para un campo de tipo String. (lookup, modified, validate..)



Para mi ejemplo nos crearemos un método lookup para nuestro control de tipo CustAccount.
Simplemente realizaremos una query para que nos muestre sólo los clientes que tienen una factura de servicios.

Copiad este lookup en vuestra clase.
Como se ve recibe un control de tipo string que es nuestro campo dialogField.

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 este es el valor a devolver si no se le indica,
    //devuelve el primer campo de los agregados. En este 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();
}

Anularemos el método DialogPostRun y le indicaremos que sobrescribiremos el método lookup del control dlgCustAccount, y le diremos que método se debe llamar para el método lookup.
Creo que es fácil de entender el código ya que no tiene ninguna dificultad.
Fijaos que lo único que hacemos es decirle que vamos a sobrescribir el método lookup del control dlgCustAccount y luego le indicamos que método debe utilizarse para sobrescribir el lookup.

public void dialogPostRun(DialogRunbase _dialog)
{
    FormControl control;

    super(_dialog);

    //Sobrescribimos el método lookup del control CustAccount
    dlgCustAccount.registerOverrideMethod(methodstr(FormStringControl, lookup), methodstr(TestRunBaseBatch, custAccountLookup), this);
}

Si lo probáis ahora veréis que el lookup solo mostrará clientes con facturas de servicio.

Para descargar el fichero xpo sólo tenéis que presionar en el siguiente enlace:

Descargar fichero xpo

Comentarios