Dialog RunBase 自定义查找:Alt + Down 组合键不起作用
Dialog RunBase custom lookup: Alt + Down key combination doesn't work
MS 动态 AX 4.0
我有一个 class,其中包含一个扩展 RunBase 的对话框、一个 Range 类型的 dialogField 和一个自定义查找。它按计划工作,但有一件事让我不高兴。
正常查找在 Alt + 向下键组合上打开,但在我的对话框中不起作用。我认为这是因为 "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);
}
和对话框后运行:
public void dialogPostRun(DialogRunbase dialog)
{
;
dialog.formRun().controlMethodOverload(true);
dialog.formRun().controlMethodOverloadObject(this);
super(dialog);
}
这个问题不是那么严重,但它困扰着我。如果有人能提供帮助,我将不胜感激。
P.S.: 我可以使用ItemId typeId,但我需要追加很多项目,而ItemId 只有20 个字符长..
创建新的扩展数据类型 ItemIdRange
,从 Range
扩展。
请务必将新类型的关系设置为与 InventTable.ItemId
相关以进行自动查找。
此外,表单控件必须具有 属性 ReplaceOnLookup
set to no,以允许用户添加更多条件。对于 DialogRunbase
字段,可以这样做:
FormStringControl fsc = dialogField.control();
fsc.replaceOnLookup(false);
然后就不需要问题中发布的代码了。
我发现我不必为 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;
}
MS 动态 AX 4.0
我有一个 class,其中包含一个扩展 RunBase 的对话框、一个 Range 类型的 dialogField 和一个自定义查找。它按计划工作,但有一件事让我不高兴。 正常查找在 Alt + 向下键组合上打开,但在我的对话框中不起作用。我认为这是因为 "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);
}
和对话框后运行:
public void dialogPostRun(DialogRunbase dialog)
{
;
dialog.formRun().controlMethodOverload(true);
dialog.formRun().controlMethodOverloadObject(this);
super(dialog);
}
这个问题不是那么严重,但它困扰着我。如果有人能提供帮助,我将不胜感激。
P.S.: 我可以使用ItemId typeId,但我需要追加很多项目,而ItemId 只有20 个字符长..
创建新的扩展数据类型 ItemIdRange
,从 Range
扩展。
请务必将新类型的关系设置为与 InventTable.ItemId
相关以进行自动查找。
此外,表单控件必须具有 属性 ReplaceOnLookup
set to no,以允许用户添加更多条件。对于 DialogRunbase
字段,可以这样做:
FormStringControl fsc = dialogField.control();
fsc.replaceOnLookup(false);
然后就不需要问题中发布的代码了。
我发现我不必为 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;
}