Axapta AX2009:在用户输入进入表单之前处理用户输入

Axapta AX2009:在用户输入进入表单之前处理用户输入,axapta,microsoft-dynamics,dynamics-ax-2009,ax,Axapta,Microsoft Dynamics,Dynamics Ax 2009,Ax,我希望能够在AX中处理发送到表单的输入。有没有办法做到这一点 这必须用于表单的所有键盘输入 例如,有一种SysSetupFormRun.task方法,您可以在其中检测有限数量的任务,但根据我所看到和尝试的,它确实可以处理所有键盘输入。据我所知,您有两个要求: 表单应该将任何输入从键盘重定向到特定字段,而不管当前哪个字段有焦点。 基于第1点中输入字段的显示信息可供用户使用,也可不供用户使用,例如,复制字段值或向提供的信息中添加其他数据。 这种重定向应该只在一定数量的表单上发生,而不是在系统中的每个

我希望能够在AX中处理发送到表单的输入。有没有办法做到这一点

这必须用于表单的所有键盘输入


例如,有一种SysSetupFormRun.task方法,您可以在其中检测有限数量的任务,但根据我所看到和尝试的,它确实可以处理所有键盘输入。

据我所知,您有两个要求:

表单应该将任何输入从键盘重定向到特定字段,而不管当前哪个字段有焦点。 基于第1点中输入字段的显示信息可供用户使用,也可不供用户使用,例如,复制字段值或向提供的信息中添加其他数据。 这种重定向应该只在一定数量的表单上发生,而不是在系统中的每个表单上发生。 关于第3点,我只是简单地说一下:如果不影响系统中的每一个表单,就很难完成您想要做的事情。键盘输入可能在FormRun级别进行管理,这是所有表单或更高版本的基类,因此在特定表单实例中使用它将很困难,需要相当小心,以免影响系统中的所有其他表单。因此,您应该将重点放在更改特定表单上。此外,根据我的经验,表单上的几个全局可用功能不可供我们管理/覆盖/编辑,例如导出到Excel功能中的某些步骤,因此在任何情况下都不可能覆盖键盘交互

最大的问题来自于确定哪些输入应该被重定向,哪些输入不应该被重定向,例如Ctrl+C、Ctrl+X等。如果需求2不需要用户对数据执行任何操作,除了读取数据,然后,我会建议使用代码覆盖输入字段的lostFocus方法,该代码会自动将焦点返回到字段。它看起来像这样:

public void lostFocus()
{
    super();

    this.setFocus()
}
同样,主要的问题是,用户将无法在表单上选择任何其他内容。例如,如果信息只是像摘要屏幕一样读取,那么这不应该是一个问题

如果用户确实需要与显示的信息交互,例如,从字段复制描述,您可能会对这些字段应用类似的逻辑,以便在输入任何输入时,将焦点更改为输入字段。这可以通过textChange方法触发,但在转换过程中可能会丢失一些文本:

public void textChange()
{
    super();

    //Note: the control fieldName will need to have AutoDeclaration set to Yes
    fieldName.setFocus();
}

如果这不能正常工作,您可能需要搜索ActiveX控件,该控件应允许您指定所有输入都进入输入字段,并根据需要更新内容。它可能需要包罗万象。控件将包含用于输入和显示的控件,因此它的外观可能与AX的其余部分不同,但应该能够满足您的需要。

到目前为止,您尝试过哪些代码?我尝试过task方法和该类中的一些其他方法,以查看它们是否给出了任何结果,但是它们都不起作用。只是澄清一下,你想截取用户从键盘到表单的输入,而不是从表单到数据库的输入?由于新的/修改的记录只有在手动保存记录或切换记录选择之前才是本地更改,因此我很难思考为什么需要这样做。你能举个例子吗?特定表单或所有表单都需要此信息吗?是的,用户从键盘输入表单。您是否有使用此信息的示例?听起来你最好使用第三方键盘记录程序。