Thursday, 26 November 2015

Filter by field in ax 2012:

To have filter by filed option in ax 2012, we need to override context method at the control level in the design as shown below.

public void context()
{
    int             selectedMenu;
    formrun         fr;
    Args            ag;
    Name            strtext;
    querybuilddataSource qb1, qb2, qb3;
    classFactory    cf;
    query       q;
    #define.SysFormSearch('SysFormSearch')
    #define.FindEdit('FindEdit')
    PopupMenu menu = new PopupMenu(element.hWnd());
    int a = menu.insertItem("@DES212");
    int c = menu.insertItem("@DES213");
    ;

    selectedMenu = menu.draw();
    switch (selectedMenu)
    {
    case -1: //Filter by field
            break;
    case a:
            ag = new args(#SysFormSearch);
            cf = new classFactory();
            fr = cf.formRunClass(ag);
            fr.run();
            fr.wait();
//Reading User entered value for filter process
            strtext = fr.design().controlName(#FindEdit).valueStr();
            if(strtext)
            {
//Creating a query for filter
                q   = custVendExternalItem_ds.query();
                qb1 = q.dataSourceTable(tablenum(custVendExternalItem));
                qb1 = qb1.addDataSource(TableNum(InventTable));
                qb1.addLink(FieldNum(custVendExternalItem,ItemId),FieldNum(InventTable,ItemId));
                qb2 = qb1.addDataSource(tableNum(EcoResProduct));
                qb2.relations(true);
                qb3 = qb2.addDataSource(tableNum(EcoResProductTranslation));
                qb3.relations(true);
                qb3.addRange(FieldNum(EcoResProductTranslation,Name)).value(strtext);
                custVendExternalItem_ds.query(Q);
                custVendExternalItem_ds.executeQuery();
            }
            break;

    case c :   // Remove Filter
            q = new Query();
            qb1 = q.addDataSource(tableNum(custVendExternalItem));
            qb1.addRange(fieldNum(custVendExternalItem, ModuleType)).value(strfmt("%1,%2",enum2str(ModuleInventPurchSalesVendCustGroup::Vend),
                enum2str(ModuleInventPurchSalesVendCustGroup::VendGroup)));
            custVendExternalItem_ds.query(Q);
            custVendExternalItem_ds.executeQuery();

            break;

    Default:
            break;
    }

}

No comments:

Post a Comment