从AOT打开查询SalesTableListPage
时,您可以在字段中选择字段MatchingAgreement
(显示为"协议标题记录ID(记录ID)")抬头。对于查询SalesUpdate
,字段MatchingAgreement
和其他几个(它们似乎与使用RecId构建关系的关系字段相关)不能在查找中显示。
经过一些研究后,我发现原因似乎是加入的FetchMode
数据源上的SalesLine
属性。如果它是1:n,则字段不会显示在查找中。如果是1:1,则字段显示在查找中。
我没有用其他表测试过这个,但我怀疑是同样的行为。我也只使用AX 2012 R2和R3对此进行了测试,但我怀疑其他2012版本中的行为相同。
为什么联接数据源的FetchMode
会从查询对话框中的父数据源中删除某些字段?
答案 0 :(得分:1)
TL; DR 查询对话框中的字段查找并不总是适用于定义与AutoIdentification
字段组属性AutoPopulate
的表的关系的关系字段设置为No
。其中一个不起作用的情况是数据源与FetchMode
1:n。
虽然Alex K的答案有一些有趣的建议,但在我的案例中,罪魁祸首是AutoPopulate
表AutoIdentification
字段组的AgreementHeader
属性。在sys层中,此属性设置为No
,如果查询中的关系为1:1,则该组包含查询对话框字段查找中显示的字段。如果此属性已切换为Yes
,则查找将显示字段Agreement header record ID (Record-ID)
(并且仅显示此字段,无论如何定义查询关系的FetchMode
。)
基本上,AX将使用AutoIdentification
字段组中的信息来确定代理键引用/关系中gui中显示的信息。如果字段组的AutoPopulate
属性为Yes
,则AX将使用表的备用键来确定要使用的字段。如果不存在备用密钥(表AgreementHeader
的情况),则AX使用关系字段。如果AutoPopulate
为No
,则使用该组中定义的字段。但是如上所述,如果查询中的关系不是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,因此标准查询功能可能不是必需的)