有时,当我需要做比更改数据源中的一个值更复杂的事情时,我想要调用者的一些方法。例如,我有一个带有概述的表格 A。表格 A 有方法 setName() (我定义)。我打开一个相关的详细信息(表格 B)。我改变了一些东西,我想在调用者上调用 setName。
现在我正在按照以下方式进行操作
element.args().caller().setName();
但我正在寻找更惯用的方式。那么在 AX 2012 R3 中调用方法的正确方法是什么?
有时,当我需要做比更改数据源中的一个值更复杂的事情时,我想要调用者的一些方法。例如,我有一个带有概述的表格 A。表格 A 有方法 setName() (我定义)。我打开一个相关的详细信息(表格 B)。我改变了一些东西,我想在调用者上调用 setName。
现在我正在按照以下方式进行操作
element.args().caller().setName();
但我正在寻找更惯用的方式。那么在 AX 2012 R3 中调用方法的正确方法是什么?
如果您引用了这么多调用者形式的方法,听起来您需要更改开发方法。您通常会在调用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\SalesTable
and \Classes\SalesTableForm
or \Classes\SysCompare\startCompareOfContextProvider
and的init
方法
identifierStr
不折旧。这是一个正常的内在函数,但如果您使用该identifierStr
函数,您将收到最佳实践警告。这是因为没有对 进行存在性检查identifierStr
。如果可用,请尝试使用更具体的内在函数。请参阅http://msdn.microsoft.com/en-us/library/aa626893.aspx
您可以查看Calling methods on a caller form,但identifierStr
在 AX 2012 中已弃用。据我所知,无法在编译时检查表单方法。
但我建议避免使用表单上的方法。将它们放在表单处理程序类中,然后您可以使用该methodStr
函数来检查方法。