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 | |
{ | |
} |
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(); | |
} | |
} |
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; | |
} |
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(); | |
} |
And this is what it looks like:
Just hit F5 and run your class.
The custom lookup provides us the class id. If I recall it right, the standard AX would provide the EDT Type.