1

所以,我正在研究一个名为DMFWriteExportData并试图让它批量运行的类。我现在需要找出一种方法来摆脱 fieldControl,原因是它不允许我在服务器上运行该类并引发错误,因为它不应该在服务器上运行?(没有把握)

Error: "The method Dialog Control.control cannot be called from the server; use methods on the Dialog Field class instead."

-

public Object dialog()
{   
    DialogRunbase       dialog = new DialogRunbase("@DMF372", this);
    FormStringControl   control;
    dialogExecution = dialog.addFieldValue(extendedTypeStr(dMFExecutionId), executionId);
    control         = dialogExecution.fieldControl();
    control.mandatory(true);
    control.displayLength(24);
    control.registerOverrideMethod(methodstr(FormStringControl, lookup), methodstr(DMFWriteExecutionParameters, executionIdLookup), this);
    control.registerOverrideMethod(methodstr(FormStringControl, modified), methodstr(DMFWriteExecutionParameters, executionIdModified), this);
    dialogdescription=dialog.addFieldValue(extendedTypeStr(description),DMFExecution::find(executionId).Description);
    dialogdescription.enabled(false);

    return dialog;
}

我想知道:

  1. 如果在使用 control.registerOverrideMethod 时这个类不能设置为 server 是真的
  2. 如果是,那么克服这种情况的理想解决方案是什么,有什么方法可以创建自定义查找吗?我看到 DialogField 类中有一个名为 registerOverrideMethod 的方法。

任何帮助,将不胜感激。

谢谢,科斯拉

4

1 回答 1

1

您不能(并且应该)批量运行上述代码的原因是它使用了只存在于客户端的对话框控件。你永远不应该在服务器上运行这种代码。请检查runon您的班级的属性并将其设置为调用来源。

但是,我假设您使用的是 RunBaseBatch。如果您使用的是 AX 2012,则应该改用 SysOperation 框架。

使用 RunBaseBatch 时,所有代码都在同一个类上。这样,您将客户端代码(main方法、dialog方法等)与应该在服务器上运行的代码(run方法)混合。出于这个原因,您应该将类​​的“runon”属性设置为CalledFrom,而不是Server。您可以通过使用SysOperation将两者巧妙分离的模型视图控制器 (MVC) 模式来解决此问题。

有关 SysOperation 的介绍,请查看我的博客: AX2012:SysOperation 介绍

于 2014-07-17T10:11:24.133 回答