有时,当我需要做更复杂的事情而不是更改数据源中的一个值时,我想在调用者上使用一些方法。例如,我有一个概述的表格A.表单A有方法setName()(我定义)。我打开一个相关的细节(表格B)。我改变了一些东西,我想在调用者上调用setName。
现在我正按照以下方式做这件事
element.args().caller().setName();
但我正在寻找更惯用的方式。那么在AX 2012 R3中调用方法的正确方法是什么?
答案 0 :(得分:3)
如果引用那么多调用者形式的方法,听起来你需要改变你的开发方法。你通常会这样做来调用doRefresh
或调用updateDesign
,它们通常都是在表单上创建的方法。除了更新设计和refeshing之外,您还应该使用类表单处理程序。
如果您必须进行调用者回调,则可以执行以下操作进行验证:
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
和\Classes\SalesTableForm
或\Classes\SysCompare\startCompareOfContextProvider
以及init
方法
identifierStr
未折旧。这是一个正常的内在函数,但如果使用identifierStr
函数,您将获得最佳实践警告。这是因为没有对identifierStr
进行存在检查。如果有可用的话,尝试使用更具体的内在函数。见http://msdn.microsoft.com/en-us/library/aa626893.aspx
答案 1 :(得分:2)
您可以查看Calling methods on a caller form,但在AX 2012中已弃用identifierStr
。据我所知,在编译时无法检查表单方法。
但我建议在表格上避免使用方法。将它们放在表单处理程序类中,然后您可以使用methodStr
函数来检查方法。