Surcharger la méthode lookup d’un champ ou d’un contrôle n’a rien de compliqué lorsque que l’on se situe sur un formulaire classique AX. Cependant, lorsque l’on se trouve sur une dialogue créée par code (par exemple un lancement de batch), une petite astuce est nécessaire. Nous prendrons ci-dessous l’exemple d’une dialogue de sélection d’un compte à partir de la table du plan de comptes (LedgerTable). Nous ne filtrerons que les comptes qui ne sont pas bloqués dans les journaux.
- Dans la définition de la classe, on déclare simplement le contrôle sur lequel on fera un lookup :
class TestDialog extends RunBase
{
FormStringControl ledgerAccountCtrl;
}
- Dans la méthode dialog(), le nom du contrôle est important car il sera utilisé pour la définition de la méthode lookup :
protected Object dialog(DialogRunbase dialog, boolean forceOnClient)
{
DialogRunBase ret;
;
ret = super(dialog, forceOnClient);
ledgerAccountCtrl = ret.formBuildDesign().addControl(FormControlType::String, 'LedgerAccount');
ledgerAccountCtrl.extendedDataType(extendedTypeNum(LedgerAccount));
return ret;
}
- Dans la méthode dialogPostRun(), on déclare le controlMethodOverload pour que notre lookup soit appelé :
public void dialogPostRun(DialogRunbase dialog)
{
;
super(dialog);
dialog.dialogForm().formRun().controlMethodOverload(true);
dialog.dialogForm().formRun().controlMethodOverloadObject(this);
ledgerAccountCtrl = dialog.dialogForm().formRun().design().controlName('LedgerAccount');
}
- Et enfin on définit la méthode lookup, avec la règle de nommage « nom du contrôle » + _lookup :
void LedgerAccount_lookup()
{
SysTableLookup sysTableLookup;
Query query = new Query();
QueryBuildDataSource qbds;
;
sysTableLookup = SysTableLookup::newParameters(tablenum(LedgerTable), ledgerAccountCtrl);
qbds = query.addDataSource(tablenum(LedgerTable));
qbds.addRange(fieldnum(LedgerTable, BlockedInJournal)).value(strfmt("%1", NoYes::No));
// choix des colonnes à afficher dans le lookup
sysTableLookup.addLookupfield(fieldnum(LedgerTable, AccountNum));
sysTableLookup.addLookupfield(fieldnum(LedgerTable, AccountName));
sysTableLookup.parmQuery(query);
sysTableLookup.performFormLookup();
}


