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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.02.2008, 16:31   #1  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Модификация DialogField
На классе наследованном от RunBase построен диалог на котором динамически создаются несколько контролов. Нужно при модификации одного из контролов делать еще какие-нибудь вещи. Вариант с dialogObj.allowUpdateOnSelectCtrl(true);
this.dialogSelectCtrl(); подходит, но работает немного коряво, то есть приходится для активации/деактивации контрола вначале перейти на него.
Слышал про еще один способ, в котором используется значение dlgfJournalNameId.Name(), в результате которого получаем строку dlg1_.... Потом на классе создается метод, не уверен в названии - dlg1_Modified потом ядро само выовет этот метод при изменении контрола. Может кто слышал?
Старый 08.02.2008, 16:47   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Посмотри вот здесь
http://kashperuk.blogspot.com/2007/0...xtensions.html

Там улучшения + примеры - в примерах делается требуемая тебе логика (правда там _lookup, а не _modified, но суть та же)
За это сообщение автора поблагодарили: Eldar9x (1).
Старый 08.02.2008, 16:48   #3  
Eugene Murka is offline
Eugene Murka
Участник
Аватар для Eugene Murka
 
36 / 17 (1) ++
Регистрация: 09.01.2008
Адрес: Киев
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
Потом на классе создается метод, не уверен в названии - dlg1_Modified потом ядро само выовет этот метод при изменении контрола. Может кто слышал?

Да,всё верно,создаёте метод dlg1_Modified,где dlg1 - имя контрола, при изменении значения контрола вызовется этот метод.Так вы можете прописать любые методы стандартного контрола.
Старый 08.02.2008, 16:55   #4  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
2 Eldar9x, Eugene Murka, kashperuk Я в таких случаях больше предпочитаю вместо динамического дилога вызывать форму.

см. \Classes\Tutorial_RunbaseForm

X++:
public Object dialog()
{
    dialogRunbase   dialog = dialog::newFormnameRunbase(formstr(tutorial_RunbaseForm),this);
;
    dialog = super(dialog);

    dlgTransDate = dialog.addField(typeid(transDate));
    dlgtransDate.value(transDate);

    return dialog;
}

Последний раз редактировалось konopello; 08.02.2008 в 16:58. Причина: Ошибки :(
Старый 08.02.2008, 17:02   #5  
petr is offline
petr
Участник
Соотечественники
 
561 / 201 (8) ++++++
Регистрация: 30.05.2005
Адрес: Швейцария
Цитата:
Сообщение от konopello Посмотреть сообщение
Я в таких случаях больше предпочитаю вместо динамического дилога вызывать форму.
Слава богу, разработчики аксапты тоже пока предпочитают вызывать статическую форму из АОТа в таких случаях.

Надеюсь, и в дальнейшем так будет.
Старый 08.02.2008, 17:32   #6  
Eugene Murka is offline
Eugene Murka
Участник
Аватар для Eugene Murka
 
36 / 17 (1) ++
Регистрация: 09.01.2008
Адрес: Киев
Цитата:
Сообщение от petr Посмотреть сообщение
Слава богу, разработчики аксапты тоже пока предпочитают вызывать статическую форму из АОТа в таких случаях.

Надеюсь, и в дальнейшем так будет.
Особенно это будет полезно,если от диалога нужно будет создать наследников!
Взяли вы форму наваяли там кучу контролов и функционала,а потом нужно её чуть-чуть изменить и использовать в другом месте...копируете вместе со всем кодом,что является грубым нарушением принципов ООП.

Хочу также напомнить,что формы используются в Аксапточке для отображения данных,сугубо для их ввода используют диалоги.

И самое главное,форма и все её методы будут выполнятся на клиенте,а это может быть неприемлемо,когда всё остальное работает на сервере.

Последний раз редактировалось Eugene Murka; 08.02.2008 в 17:35. Причина: опечатка
Старый 08.02.2008, 17:34   #7  
zZ_TOP_Zz is offline
zZ_TOP_Zz
int 20h
Аватар для zZ_TOP_Zz
 
143 / 24 (1) +++
Регистрация: 26.02.2007
Адрес: Санкт -Петербург
А все таки, не могли бы вы более подробно описать код для этих методов. Очень интересная штуковина.
__________________
It's just my Unhopelessnessabilityerism
Trying to debug my mind
Старый 08.02.2008, 17:40   #8  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
Цитата:
Особенно это будет полезно,если от диалога нужно будет создать наследников!
Взяли вы форму наваяли там кучу контролов и функционала,а потом нужно её чуть-чуть изменить и использовать в другом месте...копируете вместе со всем кодом,что является грубым нарушением принципов ООП.
полностью не согласен, посмотрите как организованы диалоги для классов SalesFormLetter и PurchFormLetter и их наследников.

Цитата:
И самое главное,форма и все её методы будут выполнятся на клиенте,а это может быть проблемой.
так что получается, по вашему форма должна выполнятся на сервере ..........(ужас)
Старый 08.02.2008, 17:41   #9  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Всем большое спасибо, особенно, Kashperuk . Хотелось бы добавить только, что вариант с вызовом готовой формы, более трудоемок, так как эту форму сначало надо сделать...
Старый 08.02.2008, 17:46   #10  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
класс SalesFormLetter всегда работает на сервере а диалог на клиенте.

X++:
salesEditLines = classFactory.formRunClass(FormLetter::newClientArgs(formStr(SalesEditLines), this));
ключевая фраза FormLetter::newClientArgs.

И я полностью придерживаюсь этого принципа, это конечно мое личное виденье, да помню были времена и когда то я страдал писал ужасные динамические диалоги, перекрывал у них лукапы и т.д.Но зачем усложнять когда можно все сделать проще и понятней.
Старый 08.02.2008, 17:47   #11  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
Цитата:
Всем большое спасибо, особенно, Kashperuk . Хотелось бы добавить только, что вариант с вызовом готовой формы, более трудоемок, так как эту форму сначало надо сделать...
отчасти согласен, когда логика формы довольно простая.
Старый 08.02.2008, 17:47   #12  
Eugene Murka is offline
Eugene Murka
Участник
Аватар для Eugene Murka
 
36 / 17 (1) ++
Регистрация: 09.01.2008
Адрес: Киев
Цитата:
Сообщение от zZ_TOP_Zz Посмотреть сообщение
А все таки, не могли бы вы более подробно описать код для этих методов. Очень интересная штуковина.

А что описывать - создаёте наследника от Runbase, методе dialog() прописываете контрол,скажем myControlTxt, создаёте новый метод,называете его myControlTxt_Modified запускаете диалог и при изменении значений в myControlTxt будет срабатывать myControlTxt_Modified, всё аналогично статической форме.
Старый 08.02.2008, 17:52   #13  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Цитата:
когда логика формы довольно простая.
а когда сложная - тем более ))
Старый 08.02.2008, 17:52   #14  
Eugene Murka is offline
Eugene Murka
Участник
Аватар для Eugene Murka
 
36 / 17 (1) ++
Регистрация: 09.01.2008
Адрес: Киев
Цитата:
Сообщение от konopello Посмотреть сообщение
полностью не согласен, посмотрите как организованы диалоги для классов SalesFormLetter и PurchFormLetter и их наследников.

так что получается, по вашему форма должна выполнятся на сервере ..........(ужас)
Я говорю о том,что когда ваша форма выплывет среди серверных методов, то начнутся транспортировки ненужных данных на клиент и обратно,а если ещё и вы в ваш класс запихнёте работу с данными или какие-то выборки,что,в принципе,возможно,то получите совсем неэффективный путь решения своей задачи.

И если вы не в курсе,некоторые объекты выполняются на сервере,а некоторые на клиенте,формы - это интерфейс,выполняется на клиенте всегда,а вот классы можно вызывать где угодно.

Про сейлс форму я комментировать не буду,действительно вызывать статические формы можно,в этом случае это правильно,но не значит,что так будет всегда.Дискуссию на эту тему я прекращаю.

Последний раз редактировалось Eugene Murka; 08.02.2008 в 17:56. Причина: дополнение
Старый 08.02.2008, 18:06   #15  
petr is offline
petr
Участник
Соотечественники
 
561 / 201 (8) ++++++
Регистрация: 30.05.2005
Адрес: Швейцария
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
Всем большое спасибо, особенно, Kashperuk . Хотелось бы добавить только, что вариант с вызовом готовой формы, более трудоемок, так как эту форму сначало надо сделать...
Ну раз он для вас более трудоемок, то, конечно, пожалуйста, ваше право.

Я в свое время (в начале работы с Аксаптой) тоже был поклонник такого подхода. По-моему, даже на форум писал. Только вот прошло время, пришел опыт. Сейчас страшно вспоминать, что я иногда в Аксапте писал, включая и динамические формы в диалоге. Ужас!
Старый 08.02.2008, 18:09   #16  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от Eugene Murka Посмотреть сообщение
А что описывать - создаёте наследника от Runbase, методе dialog() прописываете контрол,скажем myControlTxt, создаёте новый метод,называете его myControlTxt_Modified запускаете диалог и при изменении значений в myControlTxt будет срабатывать myControlTxt_Modified, всё аналогично статической форме.
Ну, раз уж такое дело, то дело совсем не в этом.
Главным моментом является вызов 2 методов класса FormRun

controlMethodOverload(true)
controlMethodOverloadObject(this)

Это значит, что класс (this) будет управлять методами формы.

Такой подход используется, к примеру, при работе панелей (listpanels), как на форме Users/User Groups, т.д
Старый 11.02.2008, 11:30   #17  
zZ_TOP_Zz is offline
zZ_TOP_Zz
int 20h
Аватар для zZ_TOP_Zz
 
143 / 24 (1) +++
Регистрация: 26.02.2007
Адрес: Санкт -Петербург
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Ну, раз уж такое дело, то дело совсем не в этом.
Главным моментом является вызов 2 методов класса FormRun

controlMethodOverload(true)
controlMethodOverloadObject(this)

Это значит, что класс (this) будет управлять методами формы.

Такой подход используется, к примеру, при работе панелей (listpanels), как на форме Users/User Groups, т.д
Да именно так и сделал
в классе создал метод

X++:
boolean controlMethodOverload()
{
   return true;
}
получил значение контрола, изменения которого надо отслеживать, создал метод
fld4_1_modified(), где fld4_1 именно значение контрола (формируется Аксой) в нем описал обработку и все заработало.

Вроде как все.
__________________
It's just my Unhopelessnessabilityerism
Trying to debug my mind
Теги
программно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ruslan Goncharov: Mandatory property for DialogField Blog bot DAX Blogs 1 29.12.2007 20:48
DialogField+Modified lemchey_white DAX: Программирование 16 09.08.2007 12:57
Модификация выделенных строк Migel_84 DAX: Программирование 3 06.12.2005 11:38
изменение значения DialogField Natasha DAX: Программирование 8 23.04.2004 11:02
Сравнение DialogField с null listener DAX: Программирование 6 15.01.2004 10:22

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

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

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