In this post we'll see how easily we can create a custom lookup.
Suppose I have two fields
1. Country/Region
2. StateId
Now I want to create a lookup so that If I will select any country then state lookup must show states which belongs to my selected country
for example If I have selected India in country field then it must show only indian state in state field
Lets see how can we achieve it.
Step 1: Create a table and then create two fields
1. CountryRegionId
2. StateId
Step 2: Create a form
Step 3: For custom lookup we will use State master table i.e. LogisticsAddressState
here we can see there is a method lookupStateId
public client static void lookupStateId(
FormStringControl _ctrl,
LogisticsAddressCountryRegionId _countryRegionId)
{
SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNum(LogisticsAddressState), _ctrl);
Query query = new Query();
QueryBuildDataSource queryBuildDataSource;
sysTableLookup.addLookupfield(fieldNum(LogisticsAddressState, StateId));
// <GEERU>
if (isCountryRegionRU(_countryRegionId))
{
sysTableLookup.addLookupMethod(tableMethodStr(LogisticsAddressState, fullName_RU));
sysTableLookup.addLookupMethod(tableMethodStr(LogisticsAddressState, propertiesZipCode_RU));
sysTableLookup.addLookupMethod(tableMethodStr(LogisticsAddressState, propertiesGniCode_RU));
}
else
{
// </GEERU>
sysTableLookup.addLookupfield(fieldNum(LogisticsAddressState, CountryRegionId));
sysTableLookup.addLookupfield(fieldNum(LogisticsAddressState, Name));
// <GEERU>
}
// </GEERU>
queryBuildDataSource = query.addDataSource(tableNum(LogisticsAddressState));
queryBuildDataSource.addRange(fieldNum(LogisticsAddressState, CountryRegionId)).value(queryValue(_countryRegionId));
sysTableLookup.parmQuery(query);
sysTableLookup.performFormLookup();
}
Step 4 : Go to Design and select CountryRegionId control then go to properties and set AutoDeclaration property "YES"
Step 5:
Now override lookup method on Form > Datasource > Fields >StateId > methods > lookup
and customize lookup method
public void lookup(FormControl _formControl, str _filterStr)
{
LogisticsAddressState::lookupStateId(_formControl, S3_countryStateLookup_CountryRegionId.valueStr());
}
Step 5: Now select India in country field and then you can see lookup it will show only Indian state
Your information was very clear. Thank you for sharing.
ReplyDeleteD365 AX Technical Online Training