2012-07-12 51 views
6

TLDR:为什么在查找中使用查找的字段不为空时,为分组by子句禁用?自定义查找和分组按

我想对窗体中的字段执行自定义查找。表CTable看起来是这样的:

Val Spec 
------------ 
A alpha 
A beta 
A gamma 
B delta 
C epsilon 

的查找仅涉及其中使用EDT上有一个基本关系所规定的Val柱:Val == CTable.Val

查找显然给了我一个名单如下:

A 
A 
A 
B 
C 

让我们来一起摆脱所有重复的作为,我想! 东西沿着线:

QueryBuildDataSource.orderMode(OrderMode::GroupBy); 
QueryBuildDataSource.addGroupByField(fieldNum(CTable, Val)); 

现在到了奇怪的行为,我已经和我的问题的实际点。在一个空场,由该组正确执行,我得到这个:

A 
B 
C 

现在,让我们在查找中选择“A”,然后再次执行查找因为我想点击“B”代替。由于未知的原因,该组现在被禁用,并且获得与之前的第一次相同的查找结果。

这是为什么?我如何克服这一点?

回答

5

同样的问题,答案有用: http://dynamicsuser.net/forums/t/63438.aspx

您可以通过在SysTableLookup设置useLookupValues为false禁用此行为。不幸的是,我不知道AX为什么这么做。我怀疑它将OrderMode更改为OrderBy。

+3

请注意,[只有链接的答案](http://meta.stackoverflow.com/tags/link-only-answers/info)不鼓励,所以答案应该是搜索解决方案的终点(vs.而另一个引用的中途停留时间往往会随着时间推移而过时)。请考虑在此添加独立的摘要,并将链接保留为参考。 – kleopatra 2013-08-14 09:50:53

2

昨天我有同样的问题。

我猜这个代码是在“init”也许?

QueryBuildDataSource.orderMode(OrderMode::GroupBy); 
QueryBuildDataSource.addGroupByField(fieldNum(CTable, Val)); 

我不得不我“的GroupBy”代码(如上)加入executeQuery方法,监守以下行从我的查询除去groupBys(I检查此使用断点);

qbsSum.sortClear(); 

如果您使用断点,我希望您的GroupBy选项在查询再次执行之前被清除。

+0

不,它不在init中。它在表格级别的方法中执行查找。该方法采用一个表单stringControl作为参数,使用SysTableLookup对象来执行基于本地查询对象的查找。这个本地查询对象上有Group By Clause。没有可见的“executeQuery”方法,但在方法的末尾有一个“performLookup”。 – Max 2012-07-12 15:07:52

+0

如果一次运行直到查询再次运行 - 在查询运行之前(即,当您单击B时)再次通过代码将该组添加到QueryBuildDataSource,我会希望遇到同样的问题。 – AnthonyBlake 2012-07-12 15:11:02

1

我有同样的问题。这对我有帮助:
sysTableLookup.parmUseLookupValue(False);