Lookup method for reference field in Dynamics 365 for Operations

How to write look-up method for reference field in Dynamics 365 for Operations.

Problem statement

Created customized Enum field in employee master in HR module. Enums are Active employees, Inactive employees & Resigned employees.

Requirement is only active employee should filter in “Owner” field in Department master in HR module

Resolution

Microsoft Dynamics AX 2012 introduced a new form control type: the reference group.
And also, very often we’ll have to customize the contents of the lookup, or filter them. We can do this by using the SysReferenceTableLookup class.

So go to your form’s data source and find the reference field for which you want to perform the lookup. Override its lookupReference method.

The use of the SysReferenceTableLookup is very similar to the SysTableLookup: we construct a Query, add data sources and ranges to it, and then pass it to the SysReferenceTableLookup object, like the code below:

Detailed step by step resolution

  • Copy event handler from HCM worker form 
  • Create new class paste the event handler
  • Apply the below code
  • Compile 

Code snippet

public static void  activeEmployeesLookup(FormControl sender, FormControlEventArgs e)

{

     SysReferenceTableLookup sysReferenceTableLookup = SysReferenceTableLookup::newParameters(tableNum(HcmWorker),   sender);

     Query query = new Query();

     QueryBuildDataSource qbdsHcmWorker, qbdsHcmEmployment;

     qbdsHcmWorker = query.addDataSource(tableNum(HcmWorker));

     qbdsHcmEmployment = qbdsHcmWorker.addDataSource(tableNum(HcmEmployment));

     qbdsHcmEmployment.joinMode(JoinMode::InnerJoin);

     qbdsHcmEmployment.relations(true);

     qbdsHcmEmployment.addRange(fieldNum(HcmEmployment, ISLEmploymentStatus)).value(queryValue(ISLEmploymentStatus::Active));

     sysReferenceTableLookup.parmQuery(query);

     sysReferenceTableLookup.addLookupfield(fieldNum(HcmWorker,   PersonnelNumber));

     sysReferenceTableLookup.addLookupfield(fieldNum(HcmWorker,   Person));

     sysReferenceTableLookup.performFormLookup();

     FormControlCancelableSuperEventArgs cancelableSuperEventArgs = e as FormControlCancelableSuperEventArgs;

     cancelableSuperEventArgs.CancelSuperCall();

}

    
/* H1 style */ h1 { font-size: 24px; /* Adjust the size as needed */ font-weight: normal; /* You can use 'bold', 'lighter', 'bolder', or a number */ } /* H2 style */ h2 { font-size: 20px; /* Adjust the size as needed */ font-weight: normal; /* Adjust the weight as needed */ } /* H3 style */ h3 { font-size: 18px; /* Adjust the size as needed */ font-weight: normal; /* Adjust the weight as needed */ }