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