Axapta 手动添加筛选器时,如何保持窗体数据源上的范围?

Axapta 手动添加筛选器时,如何保持窗体数据源上的范围?,axapta,x++,ax,range,Axapta,X++,Ax,Range,我在表单上遇到了一个奇怪的问题:我在datasource executeQuery()方法中添加了一个范围来过滤记录,这在打开表单时可以正常工作,但如果我在网格头中手动设置过滤器,executeQuery()方法中设置的范围将不被应用。我的范围定义如下: this.query.dataSourceNo(1).AddRange(fieldnum(MyTable,MyField)).Value('MyRangeValue'); 我使用视图作为表单数据源,这可能是问题所在。 有什么办法可以始终应用范

我在表单上遇到了一个奇怪的问题:我在datasource executeQuery()方法中添加了一个范围来过滤记录,这在打开表单时可以正常工作,但如果我在网格头中手动设置过滤器,executeQuery()方法中设置的范围将不被应用。我的范围定义如下:

this.query.dataSourceNo(1).AddRange(fieldnum(MyTable,MyField)).Value('MyRangeValue');
我使用视图作为表单数据源,这可能是问题所在。 有什么办法可以始终应用范围,即使在网格上手动添加过滤器时也保持范围不变?
感谢您的帮助

您必须在
executeQuery()
中的
super()
之前应用筛选器

但我认为您的问题在于每次运行
executeQuery()
时都要添加过滤器,从而在生成的SQL表达式中生成OR

这是一种方法:

QueryBuildRange qr = SysQuery::findOrCreateRange(this.query.dataSourceNo(1), fieldnum(MyTable,MyField));
qr.value(queryValue('MyRangeValue'));
qr.status(RangeStatus::Locked); // Or ::Hidden

我尝试了你的建议,但不起作用,我的意思是,当我打开表单时,我的范围和数据源都是正常的,但是如果我在之后手动设置了一个过滤器,那么如果我使用info(strfmt(this.query().dataSourceNo(1.toString())),初始范围不会出现,也不会被使用;执行完全相同的查询:选择*FROM OBR_Fact_fourniseur WHERE((TaxGroup=N'FIC)),手动过滤器不会出现在其中,而是应用于我的数据源。