How to bind table Columns Name in Custom Lookup in Ax 2012


In this article we will see how to bind table all columns name in custom lookup. For that we have to create table for storing getting table fields and tableid. And in form create custom lookup for display value in dropdown. Create custom lookup in form controls and create method for storing values in table. 

publicvoid lookup()
{
//super();
//A_PurchaseOrder::lookupFields(this);
// A_PurchaseOrder PurchaseOrder1;
    Query                   query = new Query();
    QueryBuildDataSource    queryBuildDataSource,qbds1;
    QueryBuildRange         queryBuildRange,qbr1;
    SysTableLookup          sysTableLookup;
tableNametableName = 'A_PurchaseOrder';
    DictField           dictField;
SysModelElement     tables;
SysModelElement     fields;
A_FieldLookUpTableA_FieldLookUpTable;
    DictTable dictTable;
inttmpTableid =    tablename2id(tableName);
inti;
dictTable = new DictTable(tableName2id(tableName));
select A_PurchaseOrder whereA_PurchaseOrder.TableId == tmpTableid;
if(A_PurchaseOrder.TableId == tmpTableid)
    {
whileselect tables
wheretables.ElementType            == UtilElementType::Table       &&
tables.Name                   == tableName
join fields
wherefields.ElementType        == UtilElementType::TableField&&
fields.ParentModelElement == tables.RecId
        {
dictField = new DictField(tables.AxId, fields.AxId);
selectA_FieldLookUpTablewhereA_FieldLookUpTable.A_TableID == int2str(tmpTableid) &&
A_FieldLookUpTable.Label == dictField.label() &&A_FieldLookUpTable.Field==dictField.name();
if(!(A_FieldLookUpTable.A_TableID) && !(A_FieldLookUpTable.Field==dictField.name() && !(A_FieldLookUpTable.Label == dictField.label())))
            {
//Create table and Add fields Label(String),Field(String),A_TableID(int)
//insert into A_FieldLookUpTable table
A_FieldLookUpTable.Label = dictField.label();
A_FieldLookUpTable.Field  = dictField.name();
A_FieldLookUpTable.A_TableID = int2str(tmpTableid);
A_FieldLookUpTable.insert();
            }
        }
    }
//Create an instance of SysTableLookup with the form control passed in
    sysTableLookup = SysTableLookup::newParameters(tablenum(A_FieldLookUpTable), this);

//Add the fields to be shown in the lookup form
//sysTableLookup.addLookupfield(fieldnum(A_FieldLookUpTable, Label));
    sysTableLookup.addLookupfield(fieldnum(A_FieldLookUpTable,Field));

//create the query datasource
queryBuildDataSource = query.addDataSource(tablenum(A_FieldLookUpTable));
queryBuildDataSource.addSortField(fieldNum(A_FieldLookUpTable, Field), SortOrder::Ascending);
queryBuildRange = queryBuildDataSource.addRange(fieldnum(A_FieldLookUpTable, A_TableID));
queryBuildRange.value(A_FieldLookUpTable.A_TableID);

//add the query to the lookup form
sysTableLookup.parmQuery(query);

// Perform lookup
sysTableLookup.performFormLookup();
}

Making string field a custom lookup on user selection in Ax 2012

Making string field a custom lookup on user selection in Ax 2012

Sometimes we just compile our posts to keep the things at one place so we or someone can get it easily when we in need. This post belongs to the same concept :)

Requirement was to filter the records in grid according to the selection of base enum values from a lookup. Easy task :) but then I had to make a string field a custom lookup on selection of first value from base enum and to make it a read only on selection of second value of the base enum.

This is what I did;

Filter: modified
public boolean modified()
{
    boolean ret;
    ret = super();
    if(str2enum(enum_variable,this.valueStr()) == enum::firstvalue)
    {
        stringField.allowEdit(true);
        stringField .text(' ');
    }
    else
    {
         stringField .allowEdit(False);
         stringField .text(curuserid());
    }
    return ret;
} 

StringEdit: StringField
// This lookup is populating users 
Public void lookup()
{
    Query                   query = new Query();
    QueryBuildDataSource    queryBuildDataSource;
    QueryBuildRange         queryBuildRange;
    SysTableLookup          sysTableLookup;
    ;
    //Create an instance of SysTableLookup with the form control passed in
    sysTableLookup = SysTableLookup::newParameters(tablenum(UserInfo), this);

    //Add the fields to be shown in the lookup form
    sysTableLookup.addLookupfield(fieldnum(UserInfo, id), true);
    sysTableLookup.addLookupfield(fieldnum(UserInfo, name), false); 

    //create the query datasource
    queryBuildDataSource = query.addDataSource(tablenum(UserInfo));
    queryBuildRange = queryBuildDataSource.addRange(fieldnum(UserInfo, Id));
    queryBuildRange.value(element.getusers()); 

    //add the query to the lookup form
    sysTableLookup.parmQuery(query); 

    // Perform lookup
    sysTableLookup.performFormLookup();
} 

// Method to get users
str 100 getusers()
{    
    str 100                     Users;
    ;
    While Select UsersTable where  UsersTable .UserId == Curuserid()
    {
        Select Firstonly SysCompanyUserInfo where SysCompanyUserInfo.EmplId ==  UsersTable.Emplid ;
        Users+= SysCompanyUserInfo.UserId +',';
    }
    if(!Users)
        Return '\"\"' ;
    Return Users ;
}