为什么 `FetchMode` 查询 属性 从父数据源中删除字段?
Why does the `FetchMode` query property remove fields from the parent data source?
从 AOT 打开查询 SalesTableListPage
时,您可以在字段查找中选择字段 MatchingAgreement
(显示为 "Agreement Header record ID (Record-ID)")。查询 SalesUpdate
、字段 MatchingAgreement
和其他几个(似乎与使用 RecId 构建关系的关系字段相关)在查找中是不可能的。
经过一些研究,我发现原因似乎是加入的 SalesLine
数据源上的 FetchMode
属性。如果是 1:n,字段不会显示在查找中。如果是 1:1,字段显示在查找中。
我没有用其他表对此进行测试,但我怀疑有相同的行为。我也只使用 AX 2012 R2 和 R3 对此进行了测试,但我怀疑其他 2012 版本中的行为相同。
为什么连接数据源的 FetchMode
在查询对话框中从父数据源中删除了一些字段?
如果两个查询字段的 dynamic
属性 都设置为 yes
,那么我怀疑它与以下关系之一的属性有关:
\Data Dictionary\Tables\SalesTable\Relations\Agreement
\Data Dictionary\Tables\SalesLine\Relations\SalesTable
也许可以尝试调整它们、刷新缓存(获取 AOT 更改)、清除使用数据(打包查询可能会导致问题)和更新外部参照(高级查询使用外部参照,因此标准查询可能不需要功能)
TL;DR 查询对话框中的字段查找并不总是适用于定义与 table 关系的关系字段,其中 AutoIdentification
字段组的属性 AutoPopulate
设置为 No
。它们不起作用的一种情况是当数据源与 FetchMode
1:n.
连接时
虽然 Alex K 的回答有一些有趣的建议,但就我而言,罪魁祸首是 table [=17= 的 AutoIdentification
字段组上的 AutoPopulate
属性 ].在 sys 层中,此 属性 设置为 No
,如果查询中的关系为 1:1,则该组包含在查询对话框字段查找中显示的字段。如果此 属性 切换为 Yes
,查找将显示字段 Agreement header record ID (Record-ID)
(并且仅此字段,无论查询关系的 FetchMode
是如何定义的)。
基本上,AX 将使用来自 AutoIdentification
字段组的信息来确定在代理键 references/relations 的情况下显示在 gui 中的信息。如果字段组的AutoPopulate
属性为Yes
,AX会使用table的alternate key来决定要使用的字段。如果不存在备用键(table 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
属性 只是故事的一部分,因为在 table HcmWorker
上设置为 Yes
并没有解决问题。此 table(与 table AgreementHeader
不同)还具有 属性 ReplacementKey
集,AX 使用它来填充 AutoIdentification
字段组。仅在我删除 ReplacementKey
后,AutoIdentification
中不再出现任何字段,查找现在显示 "Sales taker (Record ID)"。所以底线是 AutoIdentification
字段组不能包含任何字段。
从 AOT 打开查询 SalesTableListPage
时,您可以在字段查找中选择字段 MatchingAgreement
(显示为 "Agreement Header record ID (Record-ID)")。查询 SalesUpdate
、字段 MatchingAgreement
和其他几个(似乎与使用 RecId 构建关系的关系字段相关)在查找中是不可能的。
经过一些研究,我发现原因似乎是加入的 SalesLine
数据源上的 FetchMode
属性。如果是 1:n,字段不会显示在查找中。如果是 1:1,字段显示在查找中。
我没有用其他表对此进行测试,但我怀疑有相同的行为。我也只使用 AX 2012 R2 和 R3 对此进行了测试,但我怀疑其他 2012 版本中的行为相同。
为什么连接数据源的 FetchMode
在查询对话框中从父数据源中删除了一些字段?
如果两个查询字段的 dynamic
属性 都设置为 yes
,那么我怀疑它与以下关系之一的属性有关:
\Data Dictionary\Tables\SalesTable\Relations\Agreement
\Data Dictionary\Tables\SalesLine\Relations\SalesTable
也许可以尝试调整它们、刷新缓存(获取 AOT 更改)、清除使用数据(打包查询可能会导致问题)和更新外部参照(高级查询使用外部参照,因此标准查询可能不需要功能)
TL;DR 查询对话框中的字段查找并不总是适用于定义与 table 关系的关系字段,其中 AutoIdentification
字段组的属性 AutoPopulate
设置为 No
。它们不起作用的一种情况是当数据源与 FetchMode
1:n.
虽然 Alex K 的回答有一些有趣的建议,但就我而言,罪魁祸首是 table [=17= 的 AutoIdentification
字段组上的 AutoPopulate
属性 ].在 sys 层中,此 属性 设置为 No
,如果查询中的关系为 1:1,则该组包含在查询对话框字段查找中显示的字段。如果此 属性 切换为 Yes
,查找将显示字段 Agreement header record ID (Record-ID)
(并且仅此字段,无论查询关系的 FetchMode
是如何定义的)。
基本上,AX 将使用来自 AutoIdentification
字段组的信息来确定在代理键 references/relations 的情况下显示在 gui 中的信息。如果字段组的AutoPopulate
属性为Yes
,AX会使用table的alternate key来决定要使用的字段。如果不存在备用键(table 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
属性 只是故事的一部分,因为在 table HcmWorker
上设置为 Yes
并没有解决问题。此 table(与 table AgreementHeader
不同)还具有 属性 ReplacementKey
集,AX 使用它来填充 AutoIdentification
字段组。仅在我删除 ReplacementKey
后,AutoIdentification
中不再出现任何字段,查找现在显示 "Sales taker (Record ID)"。所以底线是 AutoIdentification
字段组不能包含任何字段。