2

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

我已按照对话框中此帖子 x++ 过滤器查找中的说明进行操作,并且在运行代码时收到堆栈跟踪错误——FormRun 对象未初始化。

我要做的是根据从 ItemId EDT 中的选择过滤 ConfigId EDT 的 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 对象吗?

谢谢。

4

2 回答 2

0

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

看看一个类似的解决方案,还有一个

于 2011-06-10T06:49:01.577 回答
0

您是否检查过您的课程是否设置为在“Called From”运行?

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

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;
}
于 2011-06-15T21:05:04.800 回答