【问题标题】:Create a lookup filter for a dialox in Dynamics AX 4.0在 Dynamics AX 4.0 中为 diox 创建查找筛选器
【发布时间】:2011-06-09 16:49:48
【问题描述】:

我正在尝试在 AX 的对话框中创建自定义查找过滤器。

我已按照本文x++ filter lookup in dialog 中的说明进行操作,但在运行代码时出现堆栈跟踪错误——FormRun 对象未初始化。

我要做的是根据 ItemId EDT 的选择过滤 ConfigId EDT 的 lookup()。我已经准备好自定义 lookup() 并正常工作,但我无法从我的对话框中调用它。

public Object dialog(DialogRunbase _dialog, boolean _forceOnClient)
{
    DialogRunBase   dialog;
    ;

    dialog = super(_dialog, true);

    dialog.caption('@RID2885');

    dfItem = dialog.addField(typeid(ItemId));
    dfInventLoc = dialog.addField(typeid(InventLocationId));
    dfReplaceCost = dialog.addField(typeid(PdsCost));
    dfItemConfig = dialog.addField(typeid(ConfigId));
    dfColorId = dialog.addField(typeid(InventColorId), '@RID101');

    return dialog;
}

这是对lookup()的调用:

void Fld_7_lookup()
{
    Formrun fr = this.dialogModify().parmDialog();
    Object control = fr.controlCallingMethod();    
    ;

    ConfigTable::lookupConfigIdSimple(control, dfItem.value());    
}

这就是它不断收到堆栈跟踪错误的地方:

public void dialogPostRun(DialogRunbase _dialog)
{
    ;
     super(_dialog);
    **_dialog.formRun().controlMethodOverload(true);** // Causes Stack Trace error
    _dialog.formRun().controlMethodOverloadObject(this);       
}

我已尝试使用该对话框进行多种配置。当代码到达那个点时,它仍然有从 dialog() 方法传入的信息,但是当它去获取 FormRun 时,该对象是空白的。

有人可以帮我理解为什么没有与传入的 DiaglogRunBase 关联的 FormRun 对象吗?

谢谢。

【问题讨论】:

  • 我的代码没有运行时错误。
  • 那么我一定是在其他地方做错了什么。我没有让 FormRun 有效。
  • 也许你是手动调用 dialogPostRun 还是做错了什么?您能否提供用于打开对话框的代码或任何其他可能与问题相关的代码?

标签: microsoft-dynamics x++ axapta


【解决方案1】:

也许你应该在dialogPostRun 方法中最后调用super(_dialog)

看看similar solutionone more

【讨论】:

  • 我也试过了,但我仍然得到错误。我什至尝试过不包括对 super() 的调用,但我仍然收到 Stack Trace 错误。我以前也看过这些链接,但它们没有帮助。
【解决方案2】:

您是否检查过您的课程是否设置为在“调用自”处运行?

这里是覆盖修改后方法的示例代码。也许查找有相同的要求:

public void dialogPostRun(DialogRunbase _dialog)
{
// Must be overriden to enable overriding modified method
;
    _dialog.dialogForm().formRun().controlMethodOverload(true);
    _dialog.dialogForm().formRun().controlMethodOverloadObject(this);
    _dialog.formRun().controlMethodOverload(true);
    _dialog.formRun().controlMethodOverloadObject(this);

    super(_dialog);
}

对于自定义方法:

boolean Fld2_1_modified()
{
    FormStringControl c = dialog.formrun().controlCallingMethod();
    boolean ret;
    ;

    ret = c.modified(); // Super() Call the FormControl ->modified

    dlgCustomField.value(MyClass::someMethod(dlgCustomField.value())); // example

    return ret;
}

【讨论】:

  • 不幸的是,我的课程已经设置为在“调用自”处运行。这里还有一些其他代码可以做同样的事情并且可以工作。我已经复制了该代码并替换为我的变量,但它仍然不起作用。为什么它有一个空的 FormRun 超出了我的范围。它不应该。当我进入 DialogPostRun 方法时,它甚至为空。对话框本身不是,但对话框的 FormRun 是。创建对话框时不应该设置吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多