AX2012 Custom Lookup on a Dialog

Today I struggled with a custom lookup on a dialog in Microsoft Dynamics AX 2012. To prevent this from happening to me again, and maybe to help you out too, I will share the solution with you here.

The following code will utilize a class which extends the AX2012 RunBase class, with a simple dialog and a custom lookup on an added field.

DialogLookup class

classDeclaration

Here the class declaration, don’t forget to extend RunBase.

class DialogLookup extends RunBase
{
}
view raw DialogLookup hosted with ❤ by GitHub

Methods:

Main

Nothing special here either, just get a new instance from your class, to be able to run it later on.

static void main(Args _args)
{
DialogLookup dialogLookup = new DialogLookup();
if (dialogLookup.prompt())
{
dialogLookup.run();
}
}
view raw main hosted with ❤ by GitHub

Our dialog

This is where the fun starts. You simply want to get the control from your field, then you call the registerOverrideMethod(…) and as parameter you provide your class name (in this case, the class we are actually writing here) and the method name (this does not have to be lookup!).

protected Object dialog()
{
Dialog dialog;
FormStringControl control;
DialogField fieldLookup;
dialog = super();
// Dialog Title
dialog.caption("Aif Adapter");
// Field - EDT, Label
fieldLookup = dialog.addField(extendedTypeStr(AifAdapterName), "AifAdapterName:");
// Get control
control = fieldLookup.control();
// Override lookup method
control.registerOverrideMethod(methodStr(FormStringControl, lookup),
methodStr(DialogLookup /* Class name */,
lookup /* Method name*/), this);
return dialog;
}
view raw dialog hosted with ❤ by GitHub

The custom lookup

In the last step we will just set up a “normal” (don’t forget the FormStringControl!) lookup method.

public void lookup(FormStringControl _control)
{
Query query = new Query();
QueryBuildDataSource queryBuildDataSource;
SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNum(AifAdapter),
_control);
// Create lookup for AifAdapter's Name and AdapterClassId
sysTableLookup.addLookupField(fieldNum(AifAdapter, Name));
sysTableLookup.addLookupField(fieldNum(AifAdapter, AdapterClassId));
// Setup query
queryBuildDataSource = query.addDataSource(tableNum(AifAdapter));
sysTableLookup.parmQuery(query);
// Perform lookup
sysTableLookup.performFormLookup();
}
view raw lookup hosted with ❤ by GitHub

And this is what it looks like:

Just hit F5 and run your class.
AX2012 Dialog Custom Lookup Closed
The custom lookup provides us the class id. If I recall it right, the standard AX would provide the EDT Type.
AX2012 Dialog Custom Lookup Open

You may also like...