代码之家  ›  专栏  ›  技术社区  ›  Cathome

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

  •  0
  • Cathome  · 技术社区  · 8 年前

    MS Dynamics AX 4.0

    我有一个类,其中包含一个扩展RunBase的对话框、一个范围类型的dialogField和一个自定义查找。它按计划进行,但有一件事让我不安。 普通查找在Alt+Down组合键上打开,但在我的对话框中不起作用。我认为这是因为“范围”EDT与任何表字段都不相关。 但我有自己的查找,我可以强制它以某种方式在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 回复  |  直到 7 年前
        1
  •  1
  •   Cathome    8 年前

    我发现我不必为dialogField使用范围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;
       }
    
        2
  •  0
  •   Jan B. Kjeldsen    8 年前

    创建新的扩展数据类型 ItemIdRange ,扩展自 Range 。 确保在要关联的新类型上设置关系 InventTable.ItemId 获取自动查找。

    表单控件还必须具有属性 ReplaceOnLookup set to no ,以允许用户添加更多条件。对于 DialogRunbase 字段这可以通过以下方式完成:

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

    那么就不需要问题中发布的代码了。