In the example below, the lookup should be different based on the DRType field.
First create a function on the table where the field you want to have a lookup for, this case the table is called InventDR:
void orderIdLookup(FormControl _formControl) { // function that shows the look for the dr type // define lookup form, and query SysTableLookup lookupForm; Query query = new query(); QueryBuildDatasource qbds; ; // setup the lookup form and query switch(this.DRType) { // production case DRTypeBase::Production: // setup the form and query lookupForm = SysTableLookup::newParameters(tablenum(ProdTable), _formControl); qbds = query.addDataSource(tablenum(ProdTable)); // add the lookup fields lookupForm.addLookupfield(fieldnum(ProdTable, ProdId)); lookupForm.addLookupfield(fieldnum(ProdTable, Name)); break; // purchase order case DRTypeBase::PurchaseOrder: // setup the form and query lookupForm = SysTableLookup::newParameters(tablenum(PurchTable), _formControl); qbds = query.addDataSource(tablenum(PurchTable)); // add the lookup fields lookupForm.addLookupfield(fieldnum(PurchTable, PurchId)); lookupForm.addLookupfield(fieldnum(PurchTable, PurchName)); break; // anything else, quit default: return; } // set the query lookupForm.parmQuery(query); // perform the lookup lookupForm.performFormLookup(); }
Next, override the performFormLookup() function on the Form Datasource Field:
public void performFormLookup(FormRun _form, FormControl _formControl) {; // show the order lookup InventDR.orderIdLookup(_formControl); }