Override Lookup AX7 & D365FO
Here is a small example to override lookup.
copy the lookup event handler of the field and paste the event into any class
/// <summary>
///
/// </summary>
/// <param
name="sender">receiving value in parameter</param>
/// <param name="e">receiving
value in parameter</param>
[FormControlEventHandler(formControlStr(PayrollEmployerTaxRegion, Overview_StateId), FormControlEventType::Lookup)]
public static void Overview_StateId_OnLookup(FormControl sender, FormControlEventArgs e)
{
/// write your lookup code here
if the control or field already has a lookup to we need to cancel parent lookup execution otherwise we will get an exception.
below code you can use to cancel parent lookup ---
FormControlCancelableSuperEventArgs ce = e as FormControlCancelableSuperEventArgs;
//cancel super() to prevent error.
ce.CancelSuperCall();
}
Here is the complete code sample
/// <summary>
///
/// </summary>
/// <param
name="sender">receiving value in parameter</param>
/// <param name="e">receiving
value in parameter</param>
[FormControlEventHandler(formControlStr(PayrollEmployerTaxRegion, Overview_StateId), FormControlEventType::Lookup)]
public static void Overview_StateId_OnLookup(FormControl sender, FormControlEventArgs e)
{
SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNum(LogisticsAddressState), sender);
Query
query = new Query();
// Filter lookup to only show US states
query.addDataSource(tableNum(LogisticsAddressState)).addRange(fieldNum(LogisticsAddressState,
CountryRegionId)).value(LogisticsAddressCountryRegion::findByISOCode(SysCountryRegionCode::countryInfo(curext())).CountryRegionId);
// Sort the lookup by state Id
query.dataSourceTable(tableNum(LogisticsAddressState)).addOrderByField(fieldNum(LogisticsAddressState, StateId), SortOrder::Ascending);
// Add fields
sysTableLookup.addLookupfield(fieldNum(LogisticsAddressState, StateId));
sysTableLookup.addLookupfield(fieldNum(LogisticsAddressState, Name));
// Run lookup
sysTableLookup.parmQuery(query);
sysTableLookup.performFormLookup();
FormControlCancelableSuperEventArgs ce = e as FormControlCancelableSuperEventArgs;
//cancel super() to prevent error.
ce.CancelSuperCall();
}
I want to display all states but not only US. So what will be the change?
ReplyDelete