Tuesday, June 14, 2011

Adding a custom lookup to a form control

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(&quot;&quot;&quot;&quot;); 
  
     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(); 
  
 }
 

No comments:

Post a Comment