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

时间:2014-05-21 10:30:07

标签: axapta microsoft-dynamics dynamics-ax-2009 ax

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

这必须是表格的所有键盘输入。

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

1 个答案:

答案 0 :(得分:0)

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

  1. 表单应将键盘上的任何输入重定向到特定字段,无论当前哪个字段具有焦点。
  2. 基于点#1中的输入字段提供的信息可能或可能不可供用户与之交互(例如,复制字段的值或将附加数据添加到所提供的信息中)。
  3. 此重定向应仅在一定数量的表单上进行,而不是在系统中的每个表单上进行。
  4. 关于第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的其余部分没有相同的外观和感觉,但应该能够做你需要的。