Dialog RunBase自定义查找:Alt + Down组合键不起作用

时间:2018-03-06 14:05:25

标签: dialog axapta x++

MS Dynamics AX 4.0

我有一个带有扩展RunBase的对话框的类,一个Range类型的dialogField和一个自定义查找。它按计划工作,但有一件事让我心烦意乱。 正常查找在Alt + Down组合键上打开,但它在我的对话框中不起作用。我认为这是因为" Range" EDT与任何TableField无关。 但我有自己的查询,我可以强制它以某种方式下载Alt + Down吗?

这是我的对话方法:

protected Object dialog(DialogRunBase dialog, boolean forceOnClient)
{
    Object                      ret;
    ;
    ret = super(dialog, forceOnClient);
    dialogFld = new DialogField(ret, typeid(Range), 100);
    dialogFld.init(ret);
    dialogFld.lookupButton(FormLookupButton::Always);
    dialogFld.fieldControl().replaceOnLookup(false);

    return ret;
}

这是我的查询,正如您所看到的,它基于ItemId EDT:

protected void Fld100_1_Lookup()
{
    TableLookup_RU          sysTableLookup = new TableLookup_RU();
    Query                   query          = new Query();
    FormRun                 lookupForm;
    QueryBuildDataSource    qbds           = query.addDataSource(tablenum(InventTable));
    ;
    sysTableLookup.parmTableId(tablenum(InventTable));
    sysTableLookup.parmCallingControl(dialogFld.fieldControl());

    sysTableLookup.addLookupfield(fieldnum(InventTable, ItemId));
    sysTableLookup.addLookupfield(fieldnum(InventTable, ItemName));

    findOrCreateRange_W(qbds, fieldnum(InventTable, ItemType), SysQuery::valueNot(ItemType::Service));

    sysTableLookup.parmQuery(query);
    lookupForm = sysTableLookup.formRun();
    dialogFld.fieldControl().performFormLookup(lookupForm);
}

和dialogPostRun:

public void dialogPostRun(DialogRunbase dialog)
{
    ;
    dialog.formRun().controlMethodOverload(true);
    dialog.formRun().controlMethodOverloadObject(this);
    super(dialog);
}

这个问题并不重要,但令我困扰。如果有人可以提供帮助,我真的很感激。

P.S。:我可以使用ItemId typeId,但是我需要附加很多项目,而ItemId只有20个字符长..

2 个答案:

答案 0 :(得分:1)

我发现我不必为dialogField使用Range typeid。 dialogField.limitText(int)工作得很好,它会覆盖EDT的长度。所以我改变了这样的对话方法:

protected Object dialog(DialogRunBase dialog, boolean forceOnClient)
   {
       Object                      ret;
       ;
       ret = super(dialog, forceOnClient);
       dialogFld = new DialogField(ret, typeid(ItemId), 100); //if typeId doesn't have relations Alt + Down doesn't work
       dialogFld.init(ret);
       dialogFld.label("@SYS72708");
       dialogFld.lookupButton(FormLookupButton::Always);
       dialogFld.limitText(200);
       dialogFld.fieldControl().replaceOnLookup(false);

       return ret;
   }

答案 1 :(得分:0)

创建新的扩展数据类型ItemIdRange,从Range扩展。 请务必将新类型的关系设置为与InventTable.ItemId相关,以便自动查找。

表单控件还必须具有属性ReplaceOnLookup set to no,以允许用户添加更多条件。对于DialogRunbase字段,可以这样做:

FormStringControl fsc = dialogField.control();
fsc.replaceOnLookup(false);

然后不需要在问题中发布的代码。