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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.12.2014, 07:44   #1  
MaxHammer is offline
MaxHammer
Участник
 
60 / 11 (1) +
Регистрация: 03.10.2012
Что возвращает метод runbase()?
Здравствуйте.
Какое прдназначение метода runbase? например в следующем коде:
tutorial_RunbaseForm = element.args().caller().runbase();
Старый 29.12.2014, 11:46   #2  
lvan is offline
lvan
Участник
Аватар для lvan
Лучший по профессии 2014
 
856 / 82 (4) ++++
Регистрация: 15.04.2011
Записей в блоге: 1
1. подозреваю, что метод возвращает ссылку на экземпляр класса Runbase
2. это говнокод
Старый 29.12.2014, 15:56   #3  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,656 / 1158 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Это организация взаимных ссылок между формой и классом, который ее обслуживает. Просто разработчики исходили из предположения, что класс, из которого вызвана форма не обязательно будет тем классом, который используется при работе формы. Хотя, по-умолчанию, метод RunBase вернет ссылку на класс caller(). В данном случае на класс tutorial_RunbaseForm.

Это можно сравнить с методом RunBaseReport.queryRun(). Тот запрос, который используется в диалоге вовсе не обязательно будет тем же запросом, который используется при исполнении в отчете. Это можно организовать, если подсунуть в этот метод свою переменную.

На практике, метод runBase() используется в цепочке диалогов, когда из основной формы диалога вызываются вспомогательные диалоги настройки запросов и надо по ссылкам добраться до "корневого" класса цепочки. Конкретно RunBase нужен для того, чтобы быть уверенным, что будут существовать некие методы, созданные в классе RunBase.
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: Logger (3), S.Kuskov (5), MaxHammer (1).
Старый 29.12.2014, 16:55   #4  
MaxHammer is offline
MaxHammer
Участник
 
60 / 11 (1) +
Регистрация: 03.10.2012
Спасибо.

Цитата:
Сообщение от lvan Посмотреть сообщение
2. это говнокод
Почему?
Старый 29.12.2014, 18:32   #5  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от MaxHammer Посмотреть сообщение
Какое прдназначение метода runbase? например в следующем коде: tutorial_RunbaseForm = element.args().caller().runbase();
Помнится, в подобных ситуациях caller - это DialogRunbase, от него самого форме проку мало, он возвращает ссылку на собственно класс, который может реализовывать ту или иную презентационную логику.
Цитата:
Сообщение от MaxHammer Посмотреть сообщение
Почему?
Слишком много неявных предположений, которые не проверяются ни компилятором, ни самим кодом во время выполнения.
Старый 29.12.2014, 18:46   #6  
MaxHammer is offline
MaxHammer
Участник
 
60 / 11 (1) +
Регистрация: 03.10.2012
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Помнится, в подобных ситуациях caller - это DialogRunbase, от него самого форме проку мало, он возвращает ссылку на собственно класс, который может реализовывать ту или иную презентационную логику.Слишком много неявных предположений, которые не проверяются ни компилятором, ни самим кодом во время выполнения.
хм... как то совсем не понятно
Старый 30.12.2014, 00:19   #7  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
А чего непонятного? В tutorial-примере показывается, как использовать RunBase вместе с "настоящей" формой, но при этом
  1. все так же добавлять поля в runtime, используя инфраструктуру Dialog;
  2. взаимодействовать из формы с классом, реализующим бизнес- и презентационную логику, отчасти повторяя функционал штатной формы Dialog.
Таким классом в данном случае является никто иной, как наш наследник RunBase, при этом в его методе dialog() в примере мы видим такой код:
X++:
DialogRunbase dialog = Dialog::newFormnameRunbase(formstr(tutorial_RunbaseForm), this);
Инфраструктура RunBase заточена на работу презентационной логики через инфраструктуру Dialog, и предполагается, что RunBase-у в общем случае без разницы, какая именно там форма создается, лишь бы можно было вывести на нее поля ввода и получить с нее введенные значения. Инфраструктура Dialog как раз и абстрагирует для RunBase заморочки взаимодействия с формой в части отображения исходных и получения измененных пользователем значений параметров запуска RunBase. Чтобы не нарушать эту абстракцию, в рассматриваемом примере форма создается не напрямую, а через Dialog::newFormnameRunbase().
Но раз мы затеяли собирать форму не полностью в runtime, значит, она предполагает какую-то затейливую презентационную логику и/или дизайн - "представление", одним словом (в терминах MVC). Логику мы как нормальные программисты пишем в классах, а не на формах, следовательно, форме надо иметь доступ к своему классу-"контроллеру". Таковым в случае инфраструктуры RunBase выступает все тот же наш класс-наследник, который выполняет и бизнес-логику. Но поскольку для унификации вывода и получения значений параметров он использует в качестве "прослойки" инфраструктруру Dialog, то с точки зрения формы непосредственно вызывающим ее объектом оказывается экземпляр класса DialogRunbase, а вовсе не наш наследник RunBase. Так вот, чтобы форма через класс-прослойку могла достучаться до контроллера, в этом классе-прослойке и реализован метод, возвращающий ссылку на RunBase.
За это сообщение автора поблагодарили: S.Kuskov (5), MaxHammer (1).
Старый 30.12.2014, 08:25   #8  
MaxHammer is offline
MaxHammer
Участник
 
60 / 11 (1) +
Регистрация: 03.10.2012
спасибо
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Почему метод "control::control_name" возвращает null? Eldar9x DAX: Программирование 8 24.02.2013 18:14
Inside Dynamics AX 4.0: RunBase Framework Extension Part IV Blog bot DAX Blogs 0 02.10.2007 04:49
Inside Dynamics AX 4.0: RunBase Framework Extension Part I Blog bot DAX Blogs 0 30.09.2007 09:20
Какой метод возвращает последний день месяца? vasiliy DAX: Программирование 4 27.02.2006 13:43
Класс RunBase SergS DAX: База знаний и проекты 0 19.06.2002 18:07

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 08:06.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.