未从仓库移动应用程序 ax 调用覆盖方法

问题描述

我一直在研究 AX 中高级仓库移动应用程序的一些要求。要求是在扫描项目时做一些事情。因此,为了执行此操作,我在构建项目文本框时使用了 registeroverridemethod of leave。构建方法如下:

//This method is updated in WhsWorkExecuteForm
protected void createTextBox(
container _textBox,boolean   _password = false)
{
FormBuildStringControl      stringControl;

stringControl = controlGroup.addControl(FormControlType::String,this.elementName(_textBox));

if (this.elementHasError(_textBox))
{
    stringControl.colorScheme(FormColorScheme::RGB);
    stringControl.backgroundColor(WHSWorkExecuteForm::errorBackgroundColor());
}

stringControl.text(this.elementData(_textBox));
stringControl.label(this.elementLabel(_textBox));
stringControl.passwordStyle(_password);
stringControl.enabled(this.elementEnabled(_textBox));

//Below code is added to register override method
if(this.elementName(_textBox) == #ItemId)
{
stringControl.registerOverrideMethod(methodStr(FormStringControl,Leave),methodStr(WHSWorkExecuteForm,DynamicButtonControl_modified),this);
}
}

当我从 AX AOT 运行仓库应用程序时会调用方法,即操作菜单项 -> WHSWorkExecute,但它在浏览器中不起作用。我也运行了增量 CIL,但没有变化。 任何的想法?我还需要在 displayIEOS.aspx 中进行更改吗?

解决方法

仓库移动设备门户的 Web 浏览器部分由在 AOS 和 IIS 网站之间交换的 xml 文件驱动。您可以在 Warehouse Mobile Device Portal Architecture

中阅读更多相关信息

Dynamics AX 桌面客户端的 AOT 中的 WHSWorkExecute 表单基本上是 Web 客户端的一个快速而肮脏的“模拟器”。它使您能够测试驱动移动设备功能的 WHSWorkExecute 框架逻辑中的更改,而无需设置启用 Web 客户端的组件。但是,在运行时使用 FormBuild 类更改此表单(例如在您的代码中)不会影响 Web 客户端,因为这不会影响发送到网站的 xml 数据。

相反,您应该使用 WHSWorkExecute 框架提供的方法来添加控件。请参阅 Creating Custom Solutions with the Warehouse Mobile Device Portal,它有一节介绍框架的 buildControl 方法。

如何处理控件的修改事件取决于您想要做什么。第二个链接简要描述了如何实现一些仅限客户端的逻辑。 如果您需要在 AOS 上执行逻辑,则必须修改专门的 build 方法之一或创建自己的方法。第二个链接对此也有一些指导。为 FormControl 对象注册覆盖方法将不起作用,因为这同样不会更改发送到 Web 客户端的 xml 数据。