AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.05.2015, 07:04   #1  
Pandasama is offline
Pandasama
Участник
 
457 / 134 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
проблема с перекрытием 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;
}
метод AgreementHeader::lookupReferenceAgreementClassification, соответственно следующий
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();
}
в другом месте, на статичной форме, этот lookupreference работает нормально
запустив же класс и в его диалоге попробовав сделать лукап - получаю ошибку
Код:
Ошибка времени выполнения: FormReferenceGroupControl (Объект), метод lookupReference вызван с недопустимыми параметрами.

Трассировка стека

(C)\Classes\FormReferenceGroupControl\lookupReference
(C)\Classes\FormReferenceGroupControl\Lookup
(C)\Classes\FormStringControl\Lookup
пошерстив АОТ на предмет классов с методом диалог и registerOverrideMethod нашел ряд стандартных примеров, и кардинальных отличий от своего кода не увидел

что я делаю не так?
Старый 26.05.2015, 07:47   #2  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Так в сигнатуре метода lookupReference() никаких параметров нет

Да и вообще, странно как-то.
Вы регистрируете метод, как принадлежащий классу, но на самом деле он находится в таблице
Или у вас в классе дублируется метод lookupReferenceAgreementClassification?
__________________
Axapta v.3.0 sp5 kr2

Последний раз редактировалось AndyD; 26.05.2015 в 07:50.
Старый 26.05.2015, 08:00   #3  
Pandasama is offline
Pandasama
Участник
 
457 / 134 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
А что, registerOverrideMethod можно делать только на метод класса?
Нет, метод lookupReferenceAgreementClassification только в таблице, поэтому, соответственно, там и tableMethodStr использую
Старый 26.05.2015, 08:13   #4  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Цитата:
Сообщение от Pandasama Посмотреть сообщение
А что, registerOverrideMethod можно делать только на метод класса?
X++:
dlgAgreementClassification.registerOverrideMethod(identifierStr(lookupReference), tableMethodStr(AgreementHeader, lookupReferenceAgreementClassification), this);
Переопределяем что, чем и и где живет это "чем".

На this (экземпляр вашего класса) нет метода lookupReferenceAgreementClassification.
Если уж так важно вызывать его именно с таблицы соглашений - переставьте переопределение метода lookupReference на метод класса и из этого метода уже и вызывайте лукапный метод, живущий на таблице.
__________________
Мы летаем, кружимся, нагоняем ужасы ...
За это сообщение автора поблагодарили: Pandasama (1).
Старый 26.05.2015, 08:02   #5  
Pandasama is offline
Pandasama
Участник
 
457 / 134 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
Что касается отсутствия параметров в 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:18   #6  
Pandasama is offline
Pandasama
Участник
 
457 / 134 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
Спасибо, помогло, тему можно закрывать.
Теги
ax2012, dialog, lookupreference, registeroverridemethod

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axtadka: Adding a field on dialog by addfield() method, when the type of EDT is known at run time, in Dynamics AX 2009 Blog bot DAX Blogs 0 17.11.2012 11:12
Malaysia: Creating a dialog Blog bot DAX Blogs 0 07.11.2012 17:11
ax-erp: How to use default dimensions as Dialog fields in dialogs [Dynamics AX 2012] Blog bot DAX Blogs 0 19.09.2012 20:11
ax-erp: How to Enable/Disable fields in a dialog Blog bot DAX Blogs 0 19.09.2012 20:11
ax-erp: How to override the event methods on dialog controls? Blog bot DAX Blogs 0 18.09.2012 18:11

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 13:04.