向列表页面添加自定义过滤器

时间:2015-07-01 23:59:09

标签: axapta x++ dynamics-ax-2012

我创建了一个包含所有必需部分的自定义全新列表页面。现在我在顶部添加了一个类似于ProjProjectsListPage的过滤器,实际上我有与该表单相同的Active / All(但是使用我自己的自定义EDT)。过滤器工作正常,但是当我输入表单时,Active显示为默认选择的选项,而所有记录都显示。当我选择All然后再返回Active时,它会按照我的预期过滤它。我打算默认只显示活动记录。

我注意到ProjProjectsListPage将其值默认为All,与我试图做的相反。但是在试图找出该示例的作用时,我会查看控件的Selected属性并注意它设置为默认值,我也没有看到交互类中的任何内容将其更改为All 。所以,我对这是如何运作有点困惑。

但最终,我尝试做类似的事情,但并不完全,我试图让Active成为默认值(它是),但也让查询在表单上识别此过滤器加载(不工作)。我尝试在super()之前在initializeQuery()中添加这几行:

NewActiveAllEDT activeAll;

customFilter = SysEPCustomFilter::construct(formStr(NewListPage));
customFilter.load();

customFilter.setInitialFilterControlValue(formControlStr(NewListPage, CtrlActiveAll), 0);

activeAll = customFilter.getFilterControlValue(formControlStr(NewListPage, CtrlActiveAll));
SysQuery::findOrCreateRange(_query.dataSourceTable(tableNum(NewTable)), fieldNum(NewTable, Status)).value(SysQueryRangeUtil::customMethodToFilterThisStatus(activeAll));

...这使得它在表单加载时正确过滤,但是,当我选择All时,Active / All过滤器不再起作用,它似乎什么都不做。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

不知道你是否已找到解决方案,但我遇到了同样的问题。我发现列表页面中的字段组中有一个名为“保存过滤器”的属性。将其从“否”更改为“是”,打开表单时过滤器将起作用。

的Wouter

答案 1 :(得分:0)

您需要添加if条件

if (this.listPage().listPageArgs().parameters())
{ 
     activeAll = customFilter.getFilterControlValue(formControlStr(NewListPage, CtrlActiveAll));
     SysQuery::findOrCreateRange(_query.dataSourceTable(tableNum(NewTable)), fieldNum(NewTable, Status)).value(SysQueryRangeUtil::customMethodToFilterThisStatus(activeAll));
}