In Dynamics AX one way you can add a custom lookup or drop down list to a form control by overriding the lookup method of the control. Below is some example code for doing this.
public void lookup()
{
//This lookup basis the list criteria on information in 2 tables
//All display fields come from Table1, Table2 is used for limiting criteria
//super();
//This Next Line initializes the the sysTableLookupClass
sysTableLookup sysTableLookup =
SysTableLookup::newParameters(tableNum(<TABLENAME1>), this);
Query query = New Query();
QueryBuildDataSource qbdsTbl1, qbdsTbl2;
QueryBuildRange qbr;
;
//Add Tables to the data source
qbdsTbl1 = query.addDataSource(tableNum(<TABLENAME1>));
qbdsTbl2 = qbdsTbl1.addDataSource(tableNum(TABLENAME2));
//Add Query Ranges to limit List records
qbr = qbdsTbl1.addRange(fieldNum(<TABLENAME1>,<RANGEFIELDNAME1>));
qbr.value(<CRITERIAVALUE>);
qbr = qbdsTbl1.addRange(fieldNum(<TABLENAME1>, <RANGEFIELDNAME2>));
qbr.value(<CRITERIAVALUE>);
qbr = qbdsTbl1.addRange(fieldNum(<TABLENAME1>, <RANGEFIELDNAME3>));
qbr.value(<CRITERIAVALUE>);
//Since we have multiple tables in the query turn on relations
qbdsTbl1.relations(true);
//Add Ranges to the Table2
qbr = qbdsTbl2.addRange(fieldNum(<TABLENAME2>, <RANGEFIELDNAME4>));
qbr.value(<CRITERIAVALUE>);
qbdsTbl2.relations(true);
//The next 2 lines actualy adds the fields that will be displayed in the lookup grid
sysTableLookup.addLookupfield(fieldNum(<TABLENAME1>, <DISPLAYFIELDNAME>));
sysTableLookup.addLookupfield(fieldNum(<TABLENAME1>, <DISPLAYFIELDNAME>));
//Hand the created query to the sysTableLookupClass
sysTableLookup.parmQuery(query);
//Display the drop down
sysTableLookup.performFormLookup();
}
Another example single table with field and table names instead of variable place holders
//Single table example with actual table and field names instead of place holders
public void lookup()
{
//This lookup basis the list criteria on information in 2 tables
//super();
sysTableLookup sysTableLookup =
SysTableLookup::newParameters(tableNum(salesBillOfLadingJournalTable), this);
Query query = New Query();
QueryBuildDataSource qbdsJT, qbdsBLR;
QueryBuildRange qbr;
;
qbdsJT = query.addDataSource(tableNum(salesBillOfLadingJournalTable));
qbdsBLR = qbdsJT.addDataSource(tableNum(salesBLReservation));
qbr = qbdsJT.addRange(fieldNum(salesBillOfLadingJournalTable,isMaster));
qbr.value(enum2str(noYes::No));
qbr = qbdsJT.addRange(fieldNum(salesBillOfLadingJournalTable, custAccount));
qbr.value((salesBillOfLadingJournalTableMaster.CustAccount));
qbr = qbdsJT.addRange(fieldNum(salesBillOfLadingJournalTable, masterBLID));
qbr.value("""");
qbdsJT.relations(true);
qbr = qbdsBLR.addRange(fieldNum(salesBLReservation, blOpen));
qbr.value(enum2str(noYes::Yes));
qbdsBLR.relations(true);
sysTableLookup.addLookupfield(fieldNum(salesBillOfLadingJournalTable, BillOfLadingID));
sysTableLookup.addLookupfield(fieldNum(salesBillOfLadingJournalTable, salesID));
sysTableLookup.parmQuery(query);
sysTableLookup.performFormLookup();
}