0

有时,当我需要做比更改数据源中的一个值更复杂的事情时,我想要调用者的一些方法。例如,我有一个带有概述的表格 A。表格 A 有方法 setName() (我定义)。我打开一个相关的详细信息(表格 B)。我改变了一些东西,我想在调用者上调用 setName。

现在我正在按照以下方式进行操作

element.args().caller().setName();

但我正在寻找更惯用的方式。那么在 AX 2012 R3 中调用方法的正确方法是什么?

4

2 回答 2

3

如果您引用了这么多调用者形式的方法,听起来您需要更改开发方法。您通常会在调用doRefresh或调用时这样做updateDesign,这两种方法通常都是在表单上创建的方法。除了更新设计和刷新之外,您还应该使用类表单处理程序。

如果您必须执行调用者回调,您可以通过执行以下操作进行验证:

if (formHasMethod(element.args().caller(), identifierstr(updateDesign)))
{
    element.args().caller().updateDesign();
}

你可以通过你的类作为调用者。这是一个简单的示例代码集:

\Forms\Form1\Designs\Design\[Group:Group]\Button:Button\Methods\clicked

void clicked()
{
    FormRun     formRun;
    Args        args = new Args(formstr(Form2));
    TestClass   testLocal = new TestClass();

    testLocal.parmTestVar('ZZZ');
    args.caller(testLocal);
    formRun                    = classfactory.formRunClass(args);
    formRun.init();
    formRun.run();
    formRun.wait(true);    
}

\Forms\Form2\Methods\init

public void init()
{
    TestClass testClass;

    super();

    testClass = element.args().caller() as testClass;
    info(strFmt("%1", testClass.parmTestVar()));
}

\Forms\SalesTableand \Classes\SalesTableFormor \Classes\SysCompare\startCompareOfContextProviderand的init方法

identifierStr不折旧。这是一个正常的内在函数,但如果您使用该identifierStr函数,您将收到最佳实践警告。这是因为没有对 进行存在性检查identifierStr。如果可用,请尝试使用更具体的内在函数。请参阅http://msdn.microsoft.com/en-us/library/aa626893.aspx

于 2014-09-05T17:02:18.160 回答
2

您可以查看Calling methods on a caller form,但identifierStr在 AX 2012 中已弃用。据我所知,无法在编译时检查表单方法。

但我建议避免使用表单上的方法。将它们放在表单处理程序类中,然后您可以使用该methodStr函数来检查方法。

于 2014-09-05T10:13:04.063 回答