Wednesday, 15 March 2017

Simple Custom Lookup Ax 2012 R3

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 


1 comment: