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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.03.2011, 18:22   #1  
zipo is offline
zipo
Участник
 
32 / 23 (1) +++
Регистрация: 16.05.2006
Перехвать событий поля диалога в репорте
Существует ли возможность перехватить событие (modified например) для поля диалога на репорте созданом с помощью фреймворка где нету класса, а методы (dialog, pack, unpack) идут на саммом репорте?

Т.е. я понимаю, что нужно использовать методы
dlg.formRun().controlMethodOverload( true );
dlg.formRun().controlMethodOverloadObject( this );

Но их нужно вызвать на dialogPostRun диалога, а как в репорте добраться до него не вижу.
Старый 17.03.2011, 18:32   #2  
kornix is offline
kornix
MCP
MCBMSS
Злыдни
Ex AND Project
 
414 / 146 (5) +++++
Регистрация: 24.02.2009
Адрес: Санкт-Петербург
Если правильно понял, вы пытаетесь сделать это?
Старый 17.03.2011, 18:40   #3  
zipo is offline
zipo
Участник
 
32 / 23 (1) +++
Регистрация: 16.05.2006
Цитата:
Сообщение от kornix Посмотреть сообщение
Если правильно понял, вы пытаетесь сделать это?
нет. Мне нужно проинициализировать перехват событий диалоговых полей в случае репотра который сидит на фреймвоке RunbaseReportStd

Т.е. я не знаю куда втулить
dlg.formRun().controlMethodOverload( true );
dlg.formRun().controlMethodOverloadObject( this );

что бы заработал перехват.
Старый 18.03.2011, 12:40   #4  
Волчара is offline
Волчара
Участник
 
210 / 29 (1) +++
Регистрация: 08.02.2003
Адрес: Москва
Цитата:
Сообщение от zipo Посмотреть сообщение
нет. Мне нужно проинициализировать перехват событий диалоговых полей в случае репотра который сидит на фреймвоке RunbaseReportStd

Т.е. я не знаю куда втулить
dlg.formRun().controlMethodOverload( true );
dlg.formRun().controlMethodOverloadObject( this );

что бы заработал перехват.
Стандарты работы с классом Dialog не подразумеваю перехват событий. Так что надо модифицировать класс....
__________________
Благодарю за поддержку ИЦ Кариатиду и Koder Logic
Старый 18.03.2011, 13:31   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от zipo Посмотреть сообщение
Мне нужно проинициализировать перехват событий диалоговых полей в случае репотра который сидит на фреймвоке RunbaseReportStd

Т.е. я не знаю куда втулить
dlg.formRun().controlMethodOverload( true );
dlg.formRun().controlMethodOverloadObject( this );

что бы заработал перехват.
Нарисуйте в АОТ специальную форму диалога.
нормальными средствами нормального АОТ создайте в в этой форме методы.
подключите вашу форму в RunbaseReportStd.

не занимайтесь динамическим программированием. юзайте статическое.
__________________
полезное на axForum, github, vk, coub.
Старый 18.03.2011, 13:32   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Волчара Посмотреть сообщение
Стандарты работы с классом Dialog не подразумеваю перехват событий. Так что надо модифицировать класс....
+ Не подразумевают
- Ни в коем случае не модифицируйте класс. Сделайте нормальную форму и подключите ее к диалогу класса. Все необходимые методы для этого есть. примеры смотрите в аксапте (например, создание заказа)
__________________
полезное на axForum, github, vk, coub.
Старый 18.03.2011, 13:45   #7  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Но в примерах на SYS слое есть и обратные примеры, например класс BOMChangeItem.
PS: на самом деле, я сам всегда делаю отдельную форму, если нужна обработка событий.
Старый 18.03.2011, 16:57   #8  
zipo is offline
zipo
Участник
 
32 / 23 (1) +++
Регистрация: 16.05.2006
Цитата:
Сообщение от mazzy Посмотреть сообщение
Нарисуйте в АОТ специальную форму диалога.
нормальными средствами нормального АОТ создайте в в этой форме методы.
подключите вашу форму в RunbaseReportStd.

не занимайтесь динамическим программированием. юзайте статическое.
Это у меня репорт с возможностью батча, батчевый фреймворк уж точно не предполагает нормальных способов через АОТ (зачем мне нужно рисовать еще форму под батч возможности и иметь "трудности" с подключением батчевого функционала). А диалог при наличии оверлоадинга имхо таки предполагает подключение к стандартным собитиям. Я этим не раз уже пользовался при создании батчевых джоб, там это делает элементарно.
Вопрос в том, как это сделать на батчевом репорте со стандартным фрейворком RunbaseReportStd
Старый 18.03.2011, 19:26   #9  
zipo is offline
zipo
Участник
 
32 / 23 (1) +++
Регистрация: 16.05.2006
Кто столкнется с такой же проблемой, то сделал такой солюшен:

В класс RunBaseReportStd добавляем такой метод
X++:
public void dialogPostRun(DialogRunbase dialog)
{
    ;
    super(dialog);
    reportRun._dialogPostRun(dialog);
}
В класс SysReportRun добавляем такой метод
X++:
public void _dialogPostRun(DialogRunbase dialog)
{
    ;
    if (this.reportHasMethod(methodstr(RunbaseReportStd, dialogPostRun)))
    {
        this.thisObject().dialogPostRun(dialog);
    }
}
Хоть это и изменение стандартных классов, ни к чему страшному это не приведет. Это просто добавление того функицонала который почему-то забыли сделать в стандартном RunBaseReportStd фрейм ворке, что бы включить функцию оверлоадинга

Дальше идет по обычной схеме, хотя она немного изменена:
Добавляем следующий метод в наш репорт:
X++:
public Object dialogPostRun(DialogRunbase _dialog)
{
    ;
    _dialog.formRun().controlMethodOverload(true);
    _dialog.formRun().controlMethodOverloadObject(dialogEvents);

    return _dialog;
}
dialogEvents - это экземпляр класса, который я инициализирую в репорте на init методе. Почему так каряво? Потому как обычный this или element не работает, скорее всего на оверлоадинг умеет проверять наличие метода только у класса. Поэтому нужен именно класс.

В классе dialogEvents у меня есть метод
X++:
boolean DateRange_modified()
{
    ;
    info("111");
    return true;
}
Где DateRange имя моего поля, метод прекрасно срабатывает на изменение этого поля, поэтому можно все обработать, т.к. легко сделать этому классу доступ к репорту.
Солюшен может показаться с подвыпердоворотом, но он надежен и исполняет свою функцию.
За это сообщение автора поблагодарили: Raven Melancholic (2), Arahnid (3).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Использование формы в качестве диалога vs создание диалога программно Lucky13 DAX: Программирование 3 30.05.2008 13:09
Denis Fedotenko: Новые поля в складских проводках Blog bot DAX: База знаний и проекты 10 24.05.2007 11:57
метод leave у поля диалога? braathe DAX: Программирование 5 26.01.2006 09:23
Получение из поля Map кода поля реальной таблицы, к ней привязанной (Mappings) vey DAX: Функционал 5 16.03.2005 11:16
Получить значение поля таблицы по номеру (Id) поля Anais DAX: Программирование 2 15.04.2004 13:00

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

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

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