26.05.2015, 07:04 | #1 |
Участник
|
проблема с перекрытием lookupreference в dialog
Товарищи, начинаю активно работать в 2012 и встречаюсь с некоторыми проблемами.
В данный момент проблема следующая: есть класс (наследник RunBase), в классе диалог, в диалоге следующее: X++: protected Object dialog() { Dialog dialog = super(); Object formCtrl; ; dlgAgreementClassification = dialog.addFieldValue(extendedTypeStr(agreementClassificationRecId), agreementClassificationRecId, "Выберите новую классификацию"); //formCtrl = dlgAgreementClassification.control(); //formCtrl.replacementFieldGroup(identifierStr(AutoIdentification)); //formCtrl.registerOverrideMethod(identifierStr(lookupReference), tableMethodStr(AgreementHeader, lookupReferenceAgreementClassification), this); dlgAgreementClassification.registerOverrideMethod(identifierStr(lookupReference), tableMethodStr(AgreementHeader, lookupReferenceAgreementClassification), this); return dialog; } X++: public Common lookupReferenceAgreementClassification(FormReferenceControl _formReferenceControl) { AgreementHeaderExt_RU agreementHeaderExt; Query query = new Query(); QueryBuildDataSource qbds; QueryBuildDataSource QbdsJoin; SysReferenceTableLookup sysTableLookup = SysReferenceTableLookup::newParameters(tableNum(AgreementClassification), _formReferenceControl) ; qbds = query.addDataSource(tableNum(AgreementClassification)); switch (agreementHeaderExt.AgreementType) { case AgreementType::Contract: qbds.addRange(fieldNum(AgreementClassification, MainAgreement)).value(queryValue(NoYes::Yes)); break; case AgreementType::AdditionalAgreement: qbds.addRange(fieldNum(AgreementClassification, MainAgreement)).value(queryValue(NoYes::Yes)); break; } qbds.addRange(fieldnum(AgreementClassification, AgreementRelationType)).value(queryValue(this.InstanceRelationType)); sysTableLookup.parmQuery(query); sysTableLookup.addLookupfield(fieldNum(AgreementClassification, Name)); sysTableLookup.addLookupfield(fieldNum(AgreementClassification, Description_PSN)); return sysTableLookup.performFormLookup(); } запустив же класс и в его диалоге попробовав сделать лукап - получаю ошибку Код: Ошибка времени выполнения: FormReferenceGroupControl (Объект), метод lookupReference вызван с недопустимыми параметрами. Трассировка стека (C)\Classes\FormReferenceGroupControl\lookupReference (C)\Classes\FormReferenceGroupControl\Lookup (C)\Classes\FormStringControl\Lookup что я делаю не так? |
|
26.05.2015, 07:47 | #2 |
Участник
|
Так в сигнатуре метода lookupReference() никаких параметров нет
Да и вообще, странно как-то. Вы регистрируете метод, как принадлежащий классу, но на самом деле он находится в таблице Или у вас в классе дублируется метод lookupReferenceAgreementClassification?
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 26.05.2015 в 07:50. |
|
26.05.2015, 08:00 | #3 |
Участник
|
А что, registerOverrideMethod можно делать только на метод класса?
Нет, метод lookupReferenceAgreementClassification только в таблице, поэтому, соответственно, там и tableMethodStr использую |
|
26.05.2015, 08:02 | #4 |
Участник
|
Что касается отсутствия параметров в lookupreference
В стандартных местах, например, так: X++: dialogFromAccount = dialog.addFieldValue(extendedtypestr(MainAccountRecId), fromAccountRecId, "@SYS135766"); dialogFromAccount.registerOverrideMethod(methodstr(FormReferenceControl, resolveReference), methodstr(LedgerExchAdj, mainAccountResolveReference), this); dialogFromAccount.registerOverrideMethod(methodstr(FormReferenceControl, lookupReference), methodstr(LedgerExchAdj, mainAccountLookupReference), this); X++: public Common mainAccountLookupReference(FormReferenceControl _formReferenceControl) { return MainAccount::lookupReference(_formReferenceControl); } |
|
26.05.2015, 08:13 | #5 |
Мрачный тип
|
X++: dlgAgreementClassification.registerOverrideMethod(identifierStr(lookupReference), tableMethodStr(AgreementHeader, lookupReferenceAgreementClassification), this); На this (экземпляр вашего класса) нет метода lookupReferenceAgreementClassification. Если уж так важно вызывать его именно с таблицы соглашений - переставьте переопределение метода lookupReference на метод класса и из этого метода уже и вызывайте лукапный метод, живущий на таблице.
__________________
Мы летаем, кружимся, нагоняем ужасы ... |
|
|
За это сообщение автора поблагодарили: Pandasama (1). |
26.05.2015, 08:18 | #6 |
Участник
|
Спасибо, помогло, тему можно закрывать.
|
|
Теги |
ax2012, dialog, lookupreference, registeroverridemethod |
|
|