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.
//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;
}
}