当我单击我的 Sa_Type 字段时,它是一个包含 Vendor 和 Customer 的基本枚举,我希望它用所有客户或所有供应商填充我的第二个名为 combo 的字段,但这样我收到错误
RegisterOverrideMethod 被方法的同一个对象调用了两次 '抬头'。每个实例只能覆盖一次方法 系统操作
我正在覆盖修改以便知道我何时单击供应商或客户。 任何解决方案?
public class AdjustmentUiBuilder extends SysOperationAutomaticUIBuilder
{
DialogField type;
DialogField combo;
public void build()
{
super();
type = this.bindInfo().getDialogField(this.dataContractObject(), methodStr(AdjustmentSysContract, parmType));
combo = this.bindInfo().getDialogField(this.dataContractObject(), methodStr(AdjustmentSysContract, parmCombo));
this.modifyDialogFields();
}
public void postRun()
{
type.registerOverrideMethod(methodStr(FormComboBoxControl, modified), methodStr(AdjustmentUiBuilder, moduleCustVend_modified), this);
}
private void lookupCustAccount(FormStringControl _formStringControl)
{
Query query = new Query();
QueryBuildDataSource qbds;
SysTableLookup sysTableLookup;
sysTableLookup = SysTableLookup::newParameters(tableNum(CustTable), _formStringControl);
qbds = query.addDataSource(tableNum(custTable));
sysTableLookup.addLookupfield(fieldNum(CustTable, AccountNum), true);
sysTableLookup.parmQuery(query);
sysTableLookup.performFormLookup();
}
private void lookupVendor(FormStringControl _formStringControl)
{
Query query = new Query();
QueryBuildDataSource qbds;
SysTableLookup sysTableLookup;
sysTableLookup = SysTableLookup::newParameters(tableNum(VendTable), _formStringControl);
qbds = query.addDataSource(tableNum(vendTable));
sysTableLookup.addLookupfield(fieldNum(VendTable, AccountNum), true);
sysTableLookup.parmQuery(query);
sysTableLookup.performFormLookup();
}
private boolean moduleCustVend_modified(FormComboBoxControl _control)
{
this.modifyDialogFields();
return _control.modified();
}
private void modifyDialogFields()
{
if(type.value() == Sa_Type::Customer)
{
combo.registerOverrideMethod(methodStr(FormStringControl, lookup), methodStr(AdjustmentUiBuilder, lookupCustAccount), this);
}
else
{
combo.registerOverrideMethod(methodStr(FormStringControl, lookup), methodStr(AdjustmentUiBuilder, lookupVendor), this);
}
}
我看到在 postRun() 中遗漏了 super() 方法的调用。
所以我认为这是错误的,并且使用旧代码我正在覆盖同一个对话框。这是我必须填写查找的解决方案。
public void postRun()
{
account.registerOverrideMethod(methodStr(FormStringControl, lookup), methodStr(AdjustmentUiBuilder, lookupAccount), this);
item.registerOverrideMethod(methodStr(FormStringControl, lookup), methodStr(AdjustmentUiBuilder, lookupAccountItem), this);
reason.registerOverrideMethod(methodStr(FormStringControl, lookup), methodStr(AdjustmentUiBuilder, lookupReason), this);
}
private void lookupAccount(FormStringControl _formStringControl)
{
if(type.value() == Sa_Type::Customer)
{
Query query = new Query();
QueryBuildDataSource qbds;
SysTableLookup sysTableLookup;
QueryBuildRange queryBuildRange;
sysTableLookup = SysTableLookup::newParameters(tableNum(CustTable), _formStringControl);
qbds = query.addDataSource(tableNum(custTable));
sysTableLookup.addLookupfield(fieldNum(CustTable, AccountNum), true);
sysTableLookup.parmQuery(query);
sysTableLookup.performFormLookup();
}
else
{
Query query = new Query();
QueryBuildDataSource qbds;
SysTableLookup sysTableLookup;
sysTableLookup = SysTableLookup::newParameters(tableNum(VendTable), _formStringControl);
qbds = query.addDataSource(tableNum(vendTable));
sysTableLookup.addLookupfield(fieldNum(VendTable, AccountNum), true);
sysTableLookup.parmQuery(query);
sysTableLookup.performFormLookup();
}
}