Когда я щелкаю свое поле Sa_Type, которое является базовым перечислением с поставщиком и клиентом, я хочу, чтобы оно заполнило мое второе поле, называемое комбо, со всеми клиентами или всеми поставщиками, но таким образом я получаю сообщение об ошибке
Метод 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();
}
}
Я думаю, вам нужно отладить свой
modifyDialogFields()
. Как часто он используется и что он на самом деле делает (делает ли он то, что вы ожидаете, или что-то другое....)