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

时间:2017-01-03 13:36:51

标签: axapta dynamics-ax-2012 x++

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

在依赖我在第一个网格中选择哪一行时,第二个网格的内容将会改变。

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

enter image description here

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

这看起来像一个父子表单,其中上部网格是您的"标题"而下限是你的"行"。

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

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

然后,一旦从标题设置了CombinationID,您就需要确保这些行获得它。在表MDISSearchDimensions上,添加一个名为initFromMDISAccountSearchTerms(MDISAccountSearchTerms _MDISAccountSearchTerms)的方法,该方法设置CombinationID并在MDISSearchDimensions.initValue()内调用此方法。

答案 1 :(得分:0)

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

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

如果想要保留它,你还有另一种选择;在第二个数据源的validateWrite中手动设置它:

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

因此,由于设置了Mandatory,它将不再失败。

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