AX2012 - 通过创建获取新的主要 table 字段值

AX2012 - Get new primary table field value by creation

我有一个有两个网格的表格。每个网格都有自己的数据源。 欲了解更多信息,请查看所附图片。

根据第一格中的第i行select,第二格的内容会发生变化。

现在我的问题是: 如果我在第一个网格上创建一个新行,我无法在第二个网格中输入值,因为 ax 不给我一个新的 "combinationID" (Primary field, INT)

我该如何解决这个问题?

这看起来像一个 parent-child 表格,上面的网格是您的 "header",下面的网格是您的 "lines"。

如果 CombinationID 是您的主键,它可能应该通过数字序列或以某种方式唯一生成。

在表单上,​​DataSource MDISSearchDimensions 的 属性 JoinSource 应设置为 MDISAccountSearchTerms。它将使用 table 关系,但您需要指定它们已连接。

然后从 header 设置 CombinationID 后,您只需要确保行得到它。在 table MDISSearchDimensions 上,添加一个名为 initFromMDISAccountSearchTerms(MDISAccountSearchTerms _MDISAccountSearchTerms) 的方法,它设置 CombinationID 并在 MDISSearchDimensions.initValue().

中调用此方法

您应该禁用第二个数据源的 InsertIfEmpty 属性。

第二个数据源的 initValue 方法将 CombinationId 字段(提供适当的关系)初始化为主 CombinationId 数据源值,但现在它在主数据源字段之前这样做有一个值。

如果想继续使用,您还有其他选择;在第二个数据源的 validateWrite 中手动设置:

public boolean validateWrite()
{;
     MDISAccountDimension.CombinationId = MDISAccountSearchTerms.CombinationId;
     return super();
}

因此它不会再因设置 Mandatory 而失败。

您应该隐藏第二个网格中的 CombinationId 以避免用户错误。