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



我希望能够处理在AX中发送到表单的输入。有什么办法可以做到吗?

这必须是一个表单的所有键盘输入

例如,有SysSetupFormRun.task()方法,您可以在其中检测有限数量的任务,但是,从我所看到和尝试的情况来看,它确实处理所有键盘输入。

根据我的理解,您有几个要求:

  1. 表单应该将任何来自键盘的输入重定向到特定的字段,而不管当前哪个字段有焦点。
  2. 基于第1点输入字段的呈现信息可能可用,也可能不可用于用户交互(例如,复制字段的值或向所提供的信息添加额外的数据)。
  3. 此重定向应该只在一定数量的表单上发生,而不是在系统中的每个表单上。

关于第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的其余部分具有相同的外观和感觉,但应该能够做您需要的事情。

最新更新