Wednesday, April 16, 2025

How to add filter on display method in ax 2012

I have implemented the filtering functionality for the ExportInvoiceNum field in the Invoice Journal screen. The field is exposed via a display method and now supports context menu filtering with the following options:

I added a display method to retrieve the ExportInvoiceNum value from the LEC_ExportInvoiceLine table.

In the StringEdit:ExportInvoiceNum control, I implemented a context() method to handle filtering actions via a custom context menu.

The control’s Auto-declaration property has been set to YES, allowing access to the control in code for dynamic filtering.

  • Filter By Field: Opens a search dialog where users can input a value to filter ExportInvoiceNum.

  • Filter By Selection: Applies a filter based on the currently selected field value.

  • Remove Filter: Clears all filters on the dataset.

Tables using in this CustInvoiceJour & LEC_ExportInvoiceLine





Display method added in CustinvoiceJour Table

//BP Deviation Documented

[SysClientCacheDataMethodAttribute(true)]

display GOD_CashCollectionsequence ExportInvoiceNum()

{

    GOD_CashCollectionsequence _exportInvoiceLine;

    _exportInvoiceLine = LEC_ExportInvoiceLine::find(this.InvoiceId).ExportInvoiceNum;

    return _exportInvoiceLine;

}

------------------------------------------------------------------------------------------------------------------

below method is added in CustinvoiceJour form 

public void context()

{

    int                  selectedMenu;

    formrun              fr;

    Args                 ag;

    Name                 strtext;

    querybuilddataSource qb1;

    queryrun             qr;

    query                q;

    PopupMenu            menu = new PopupMenu(element.hWnd());

    int                  a = menu.insertItem('Filter By Field');

    int                  b = menu.insertItem('Filter By Selection');

    int                  c = menu.insertItem('Remove Filter');

    ;

    selectedMenu = menu.draw();

    switch (selectedMenu)

        {

        case -1: //Filter by field

                break;

        case a:

                ag = new args('SysformSearch');

                fr = new formrun(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   = CustInvoiceJour_ds.query();

                qb1 = q.dataSourceTable(tablenum(CustInvoiceJour));

                qb1 = qb1.addDataSource(TableNum(LEC_ExportInvoiceLine));

                qb1.addLink(FieldNum(CustInvoiceJour,InvoiceId),FieldNum(LEC_ExportInvoiceLine,InvoiceId));

                qb1.addRange(FieldNum(LEC_ExportInvoiceLine,ExportInvoiceNum)).value(strtext);

                CustInvoiceJour_ds.query(Q);

                CustInvoiceJour_ds.executeQuery();

                }

                break;

        case b:    // Filter By Selection

                q   = CustInvoiceJour_ds.query();

                qb1 = q.dataSourceTable(tablenum(CustInvoiceJour));

                qb1 = qb1.addDataSource(TableNum(LEC_ExportInvoiceLine));

                qb1.addLink(FieldNum(CustInvoiceJour,InvoiceId),FieldNum(LEC_ExportInvoiceLine,InvoiceId));

                qb1.addRange(FieldNum(LEC_ExportInvoiceLine,ExportInvoiceNum)).value(ExportInvoiceNum.valueStr());

                CustInvoiceJour_ds.query(Q);

                CustInvoiceJour_ds.executeQuery();

                break;

        case c :    // Remove Filter

                q   = new Query();

                qb1 = q.addDataSource(tablenum(CustInvoiceJour));

                qb1.clearLinks();

                qb1.clearRanges();

                CustInvoiceJour_ds.query(Q);

                CustInvoiceJour_ds.removeFilter();

                break;

        Default:

                break;

    }

}