为什么`FetchMode`查询属性从父数据源中删除字段?

时间:2015-05-04 08:34:31

标签: axapta dynamics-ax-2012-r2

从AOT打开查询SalesTableListPage时,您可以在字段中选择字段MatchingAgreement(显示为"协议标题记录ID(记录ID)")抬头。对于查询SalesUpdate,字段MatchingAgreement和其他几个(它们似乎与使用RecId构建关系的关系字段相关)不能在查找中显示。

经过一些研究后,我发现原因似乎是加入的FetchMode数据源上的SalesLine属性。如果它是1:n,则字段不会显示在查找中。如果是1:1,则字段显示在查找中。

我没有用其他表测试过这个,但我怀疑是同样的行为。我也只使用AX 2012 R2和R3对此进行了测试,但我怀疑其他2012版本中的行为相同。

为什么联接数据源的FetchMode会从查询对话框中的父数据源中删除某些字段?

2 个答案:

答案 0 :(得分:1)

TL; DR 查询对话框中的字段查找并不总是适用于定义与AutoIdentification字段组属性AutoPopulate的表的关系的关系字段设置为No。其中一个不起作用的情况是数据源与FetchMode 1:n。

连接时

虽然Alex K的答案有一些有趣的建议,但在我的案例中,罪魁祸首是AutoPopulateAutoIdentification字段组的AgreementHeader属性。在sys层中,此属性设置为No,如果查询中的关系为1:1,则该组包含查询对话框字段查找中显示的字段。如果此属性已切换为Yes,则查找将显示字段Agreement header record ID (Record-ID)(并且仅显示此字段,无论如何定义查询关系的FetchMode。)

基本上,AX将使用AutoIdentification字段组中的信息来确定代理键引用/关系中gui中显示的信息。如果字段组的AutoPopulate属性为Yes,则AX将使用表的备用键来确定要使用的字段。如果不存在备用密钥(表AgreementHeader的情况),则AX使用关系字段。如果AutoPopulateNo,则使用该组中定义的字段。但是如上所述,如果查询中的关系不是1:1,则此选项不起作用(遗憾的是,似乎没有使用关系字段等回退选项)。

FetchMode    AutoPopulate     Lookup
1:1          Yes              AlternateKey (or Relation) fields
1:1          No               AutoIdentification fields
1:n          Yes              AlternateKey (or Relation) fields
1:n          No               Nothing

<强>更新 我再次遇到这个问题,但这次是SalesTaker字段。事实证明,AutoPopulate属性只是故事的一部分,因为在表Yes上设置为HcmWorker时,它无法解决问题。此表(与表AgreementHeader不同)也具有属性ReplacementKey集,AX用于填充AutoIdentification字段组。只有在我删除ReplacementKey之后,AutoIdentification中才会显示任何字段,现在查找显示&#34;销售接受者(记录ID)&#34;。因此,底线是AutoIdentification字段组不得包含任何字段。

答案 1 :(得分:0)

如果两个查询字段的dynamic属性都设置为yes,那么我怀疑它与其中一个关系的属性有关:

\Data Dictionary\Tables\SalesTable\Relations\Agreement

\Data Dictionary\Tables\SalesLine\Relations\SalesTable

也许尝试调整这些,刷新缓存(AOT更改被拾取),清除使用数据(打包查询可能导致问题),以及更新XRef(高级查询使用XRef,因此标准查询功能可能不是必需的)