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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.11.2007, 15:18   #1  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
Как обратиться к вызванному объекту
Есть форма, она вызывает класс, тот другой абстрактный класс, а тот еще один класс.

В этом "еще одном классе" надо получить переменную из формы.

Если смотреть отладчиком, то переменная видна, как caller.FormRun.TransDate
Старый 13.11.2007, 15:35   #2  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Arahnid Посмотреть сообщение
Есть форма, она вызывает класс, тот другой абстрактный класс, а тот еще один класс. В этом "еще одном классе" надо получить переменную из формы. Если смотреть отладчиком, то переменная видна, как caller.FormRun.TransDate
Обычно для этого на форме делают метод типа parmTransDate() или getTransDate() и вызывают его из класса
X++:
Object formRun = _args.caller();
transDate = formRun.getTransDate();
ну и плюс надо как-то из "еще одного класса" получить ссылку на эту самую форму. только imho это как-то криво с точки зрения проверки типов, потому что компилятор не имеет ни малейшего представления о том, что это за метод такой, какие у него должны быть аргументы и что он должен вернуть. мне кажется, если у вас такая цепочка вызовов, то правильнее было бы в "еще одном классе" получать данные не с формы, о существовании которой он по идее и не должен знать, а из вызывающего класса, причем передавать данные должен сам вызывающий (абстрактный в вашем случае) класс через метод "еще одного класса". А так вот лазить "через голову" в какую-то там форму, которой может и не быть, или она может быть другой и нужного метода не содержать, - это очень как-то криво...
Старый 27.03.2013, 17:52   #3  
alicedr is offline
alicedr
Участник
 
175 / 43 (2) +++
Регистрация: 06.07.2012
Адрес: Канада
А если наоборот: есть класс, который вызывает форму.
X++:
static void main(args args)
{
    MasterCreateLinesInGKDefaultDataWizard wizard = new MasterCreateLinesInGKDefaultDataWizard();
    wizard.init();
    if (wizard.prompt()) //название формы указано в методе formName()
    {
        wizard.run();
    }
К элементам формы я успешно обращаюсь так:
X++:
AccountRange =  wizard.formRun().design().controlName('Accounts_StringEdit').valueStr();
А как мне передать значения переменных из формы назад в класс?
Старый 27.03.2013, 22:16   #4  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Post
Цитата:
Сообщение от alicedr Посмотреть сообщение
X++:
AccountRange =  wizard.formRun().design().controlName('Accounts_StringEdit').valueStr();
А как мне передать значения переменных из формы назад в класс?
Тут надо еще молитву придумать чтобы никто не изменил названия жлемента управления . (в Ax2012, кстати, есть formControlStr)

Сделайте класс с нужными параметрами и передавайте его через parmObject или свой метод формы.
Старый 27.03.2013, 22:19   #5  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Обычно у формы есть ссылка на вызывающий её объект - тот же класс, соотв., форма может ожидать, что вызывающий ее класс будет реализовывать некий интерфейс с теми же parm-методами (в простейшем случае - что это заранее известный класс), и при закрытии дергать эти методы, передавая значения своих полей. Также иногда бывает удобно выводить на форме не отдельные unbound-поля, а поля специально обученной времянки (одной записи) - их значения передать в класс можно через соотв. табличный буфер.
Старый 27.03.2013, 22:26   #6  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Ещё можно механизм интерфейсов задействовать Как обратиться к public-методу формы (Form)?

Последний раз редактировалось S.Kuskov; 27.03.2013 в 22:30.
Старый 28.03.2013, 01:40   #7  
axotnik88 is offline
axotnik88
Участник
 
82 / 18 (1) ++
Регистрация: 05.06.2012
Цитата:
Сообщение от alicedr Посмотреть сообщение
X++:
AccountRange =  wizard.formRun().design().controlName('Accounts_StringEdit').valueStr();
Это Вы зря так. Забудьте про такой способ. Мы ж не индусы. Используйте как Вам подсказали parm методы. Если в форма запущена из класса, значит у нее есть ссылка на объект класса.(caller). Вот с ним и работайте.
Старый 28.03.2013, 07:49   #8  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Цепочки сообщений появляются, когда клиент запрашивает у одного объекта другой, у которого клиент запрашивает еще один объект, у которого клиент запрашивает еще один объект и т.д. Это может выглядеть как длинный ряд методов getThis или последовательность временных переменных. Такие последовательности вызовов означают, что клиент связан с навигацией по структуре классов. Любые изменения промежуточных связей означают необходимость модификации клиента.
М.Фаулер. Рефакторинг: Улучшение существующего кода. (тема: Цепочки сообщений)
Рекомендуется использовать шаблон Hide Delegate.
__________________
// no comments

Последний раз редактировалось dech; 28.03.2013 в 08:02.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как обратиться к элементам формы, для чтения/записи их свойств demon46 DAX: Программирование 4 14.09.2006 10:40
Как обратиться к методам формы Розен DAX: Программирование 2 11.04.2006 15:06
Обратиться к управляющим элементам из класса ... NetBus DAX: Программирование 1 02.03.2006 12:47
как обратиться в классе к тек.записи? sev DAX: Программирование 20 02.08.2005 11:05
Как динамически обратиться к свойствам елементов BaseEnum? if_maks DAX: Программирование 2 26.08.2003 16:15

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

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

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