我目前正在使用Microsoft Dynamics AX中的表单。 表单由一个网格组成,网格包含来自4个不同表格的大约10个字段。 由于表格现在它返回太多的值所以我需要包含某种过滤器,它不需要是动态的,只是一个静态过滤器,只表示在Y列中显示值为X的行。
这里有没有人有这方面的经验?我从哪里开始?
我必须说我根本没有使用过Microsof AX的经验,我已经使用了大约一个月了。
我试图遵循本指南:How to: Add Filter Controls to a Simple List Form [AX 2012] 但是我被困在第二部分(将控件添加到自定义过滤器组)第2步:我不知道选择哪种类型的控件,我选择让我说一个ComboBox我不能让第3步工作,因为我不看他们提到的'覆盖方法'。
答案 0 :(得分:1)
嗯,我通常这样做:
在ClassDeclaration中,创建尽可能多的QueryBuildRanges变量作为要过滤的字段。让我们将它们命名为Criteria1,Criteria2等(请将它们正确命名,请在此处注明)
QueryBuildRange criteria1, criteria2;
在每个数据源中,您需要过滤,覆盖方法Init,添加类似于此的代码:
super();
criteria1 = this.query().datasource(tablenum(tableofdatasource)).addQueryRange(fieldNum(fieldtofilter))
//criteria1.status(RangeStatus::locked); //optional - this way you can hide filter field to user, have it readonly for users, etc
在表单中创建StringEdit或ListBox类型的控件以用作过滤器。将其AutoDeclaration属性更改为是。覆盖modified()方法。在其中,我使用类似的东西:
super();
element.changeFilters();
在表单中,添加方法changeFilters();
range rangeFromStringControl = StringEditControlName.text(); //Put in rangeFromStringControl the string to be used as filter, as a user would write it
range rangeFromListBoxControl;
criteria1.value(rangeFromStringControl);
switch (listBoxControl.Selection())
{
case NoYesAll::All:
rangeFromListBoxControl = ''; //Empty filter string - No filter at all
break;
case NoYesAll::No:
rangeFromListBoxControl = QueryValue(NoYes::No); //Or whatever string filter value you want
break;
//Etc
}
//We have all filter strs done; let's filter for each main DataSource required with new filters
DataSource1.executeQuery();
//If there is other datasources joined to this one, it's usually no necessary to call their executeQuery;
//If there are others with filters and not joined to it, call their executeQuery()
如果您需要在窗体打开时应用此过滤器,请将适当的初始值设置为控件,然后在窗体的run()方法中设置:
run();
element.changeFilters();