super()在哪里调用?

时间:2012-02-06 15:58:48

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

在表单数据源(SalesLine)上,我有一个validateWrite方法,该方法又调用super()方法在SalesLine表上调用validateWrite方法,以及其他检查。

在SaleLine表中,我有自定义功能,用于记录,有时停止数据更改。

当我从新表单写入SalesLine时,我不希望触发此功能。因此,我想在SalesLine表的validateWrite方法中检查条件,以确定是否从我的新表单调用了validateWrite。如果从我的新表单调用SalesLine写入,这将允许我跳过数据更改记录/停止。

什么是正确的方法?

我可以创建一个布尔recordSaveChecks并在调用SalesLine.write()之前设置它,但是有更好的方法吗?

编辑:为了澄清,我没有要添加的特定于表单的自定义验证,我有一个系统范围的验证(因此位于SaleLine表中),当从1个特定表单调用时需要跳过该验证

3 个答案:

答案 0 :(得分:6)

最佳选择可能是将特定于表单的自定义移动到表单的数据源而不是表本身。但是如果你真的想要在表格中添加特定于表单的代码,你可以在 Tables \ Address.update()中看到一个例子,它会检查 this.dataSource()。formRun( ).name()以确定是否已从相关表单中调用它。

答案 1 :(得分:1)

您可以在SalesLine方法中将代码放在DataSource ValidateWrite()上,然后再进行超级调用之类的事情:

ret = YourCheckGoesHere;

if(ret)
{
   ret = super();
}
else
{
    info("Why validation failed goes here");
}
   return ret;

答案 2 :(得分:0)

然后,您已将验证逻辑实现到表中而不是表单中,因为您需要在系统范围内进行验证,但在插入/更新记录时需要阻止此验证。

我认为您可以通过覆盖Form DataSource的write()方法并使用SalesLine.doInsert();SalesLine.doUpdate();