Dialog 对话框运行库自定义查找:Alt+Down组合键不起作用
MS Dynamics AX 4.0 我有一个类,其中包含一个扩展RunBase的对话框、一个范围类型的dialogField和一个自定义查找。它按计划工作,但有一件事让我不安。 普通查找在Alt+Down组合键上打开,但在我的对话框中不起作用。我认为这是因为范围EDT与任何表字段都不相关。 但是我有我自己的查找,我能强迫它以某种方式在Alt+down上下拉吗 以下是我的对话方法:Dialog 对话框运行库自定义查找:Alt+Down组合键不起作用,dialog,axapta,x++,Dialog,Axapta,X++,MS Dynamics AX 4.0 我有一个类,其中包含一个扩展RunBase的对话框、一个范围类型的dialogField和一个自定义查找。它按计划工作,但有一件事让我不安。 普通查找在Alt+Down组合键上打开,但在我的对话框中不起作用。我认为这是因为范围EDT与任何表字段都不相关。 但是我有我自己的查找,我能强迫它以某种方式在Alt+down上下拉吗 以下是我的对话方法: protected Object dialog(DialogRunBase dialog, boolean for
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);
}
和对话框PostRun:
public void dialogPostRun(DialogRunbase dialog)
{
;
dialog.formRun().controlMethodOverload(true);
dialog.formRun().controlMethodOverloadObject(this);
super(dialog);
}
这个问题不是很严重,但它困扰着我。如果有人能帮忙,我会非常感激的
备注:我可以使用ItemId typeId,但我需要附加许多项,ItemId只有20个字符长。创建一个新的扩展数据类型ItemId范围,从范围扩展。 确保将新类型上的关系设置为与InventTable.ItemId相关,以获得自动查找 表单控件还必须具有属性ReplaceOnLookup,以允许用户添加更多条件。对于DialogRunbase字段,可以通过以下方式完成:
FormStringControl fsc = dialogField.control();
fsc.replaceOnLookup(false);
然后问题中的代码就不需要了。我发现我不必为dialogField使用Range typeid。dialogField.limitTextint工作正常,它覆盖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;
}
您好,谢谢,这当然是一个有效的解决方案,但我希望进行最低限度的定制,并希望避免创建新的EDT。对不起,我没有提到我的AX版本,它是4.0。我假设registerOverrideMethod可以完成这项工作,如本文所述,但它仅从2012年开始实施,因此我无法检查。当然,在getFromDialog中获取dialogFld.value的变量应该足够大,可以容纳该值。是的,它必须至少具有dialogField长度。我将dialogFld.value传递给范围变量。