A number of steps required to achieve this.
1. Add the custom filter to the list page. Note the filterExpression, its a call to method we create in next step. Also you need an enum and an EDT based off the enum, EDT is selected in the properties as well.
2. SysQueryRangeUtil
Add a method to the SysQueryRangeUtil.
3. Interaction class
List pages use the interaction classes for logic. We need to customize 2 methods in the ReqTransPOListPageInteraction.
In method initializing, after super(), add this
customFilter = SysEPCustomFilter::construct(formStr(ReqTransPOListPage));
customFilter.load();
customFilter.setInitialFilterControlValue(formControlStr(ReqTransPOListPage, yourFilter), 0);
Note: customFilter.load() will reload the last saved selection in your filter. In case, you want a specific enum selection everytime, comment out this line.
In method initializeQuery, before super(), add this
Note the call to method in SysQueryRangeUtil
if (this.listPage().listPageArgs().parameters())
{
reqPOFilterEnum = customFilter.getFilterControlValue(formControlStr(ReqTransPOListPage, yourFilter));
SysQuery::findOrCreateRange(_query.dataSourceTable(tableNum(ReqPO)), fieldNum(ReqPO, ReqDateOrder)).value(SysQueryRangeUtil::xxxReqPOFilter(reqPOFilterEnum));
}
4. Your list page
That's it. Cheers