|
08.02.2008, 16:31 | #1 |
MCTS
|
Модификация DialogField
На классе наследованном от RunBase построен диалог на котором динамически создаются несколько контролов. Нужно при модификации одного из контролов делать еще какие-нибудь вещи. Вариант с dialogObj.allowUpdateOnSelectCtrl(true);
this.dialogSelectCtrl(); подходит, но работает немного коряво, то есть приходится для активации/деактивации контрола вначале перейти на него. Слышал про еще один способ, в котором используется значение dlgfJournalNameId.Name(), в результате которого получаем строку dlg1_.... Потом на классе создается метод, не уверен в названии - dlg1_Modified потом ядро само выовет этот метод при изменении контрола. Может кто слышал? |
|
08.02.2008, 16:47 | #2 |
Участник
|
Посмотри вот здесь
http://kashperuk.blogspot.com/2007/0...xtensions.html Там улучшения + примеры - в примерах делается требуемая тебе логика (правда там _lookup, а не _modified, но суть та же) |
|
|
За это сообщение автора поблагодарили: Eldar9x (1). |
08.02.2008, 16:48 | #3 |
Участник
|
Цитата:
Да,всё верно,создаёте метод dlg1_Modified,где dlg1 - имя контрола, при изменении значения контрола вызовется этот метод.Так вы можете прописать любые методы стандартного контрола. |
|
08.02.2008, 16:55 | #4 |
SAP
|
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 |
Участник
|
|
|
08.02.2008, 17:32 | #6 |
Участник
|
Цитата:
Взяли вы форму наваяли там кучу контролов и функционала,а потом нужно её чуть-чуть изменить и использовать в другом месте...копируете вместе со всем кодом,что является грубым нарушением принципов ООП. Хочу также напомнить,что формы используются в Аксапточке для отображения данных,сугубо для их ввода используют диалоги. И самое главное,форма и все её методы будут выполнятся на клиенте,а это может быть неприемлемо,когда всё остальное работает на сервере. Последний раз редактировалось Eugene Murka; 08.02.2008 в 17:35. Причина: опечатка |
|
08.02.2008, 17:34 | #7 |
int 20h
|
А все таки, не могли бы вы более подробно описать код для этих методов. Очень интересная штуковина.
__________________
It's just my Unhopelessnessabilityerism Trying to debug my mind |
|
08.02.2008, 17:47 | #8 |
Участник
|
Цитата:
А что описывать - создаёте наследника от Runbase, методе dialog() прописываете контрол,скажем myControlTxt, создаёте новый метод,называете его myControlTxt_Modified запускаете диалог и при изменении значений в myControlTxt будет срабатывать myControlTxt_Modified, всё аналогично статической форме. |
|
08.02.2008, 18:09 | #9 |
Участник
|
Цитата:
Сообщение от 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 | #10 |
int 20h
|
Цитата:
Сообщение от 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 |
|
08.02.2008, 17:40 | #11 |
SAP
|
Цитата:
Особенно это будет полезно,если от диалога нужно будет создать наследников!
Взяли вы форму наваяли там кучу контролов и функционала,а потом нужно её чуть-чуть изменить и использовать в другом месте...копируете вместе со всем кодом,что является грубым нарушением принципов ООП. Цитата:
И самое главное,форма и все её методы будут выполнятся на клиенте,а это может быть проблемой.
|
|
08.02.2008, 17:52 | #12 |
Участник
|
Цитата:
И если вы не в курсе,некоторые объекты выполняются на сервере,а некоторые на клиенте,формы - это интерфейс,выполняется на клиенте всегда,а вот классы можно вызывать где угодно. Про сейлс форму я комментировать не буду,действительно вызывать статические формы можно,в этом случае это правильно,но не значит,что так будет всегда.Дискуссию на эту тему я прекращаю. Последний раз редактировалось Eugene Murka; 08.02.2008 в 17:56. Причина: дополнение |
|
08.02.2008, 17:41 | #13 |
MCTS
|
Всем большое спасибо, особенно, Kashperuk . Хотелось бы добавить только, что вариант с вызовом готовой формы, более трудоемок, так как эту форму сначало надо сделать...
|
|
08.02.2008, 18:06 | #14 |
Участник
|
Цитата:
Я в свое время (в начале работы с Аксаптой) тоже был поклонник такого подхода. По-моему, даже на форум писал. Только вот прошло время, пришел опыт. Сейчас страшно вспоминать, что я иногда в Аксапте писал, включая и динамические формы в диалоге. Ужас! |
|
08.02.2008, 17:46 | #15 |
SAP
|
класс SalesFormLetter всегда работает на сервере а диалог на клиенте.
X++: salesEditLines = classFactory.formRunClass(FormLetter::newClientArgs(formStr(SalesEditLines), this)); И я полностью придерживаюсь этого принципа, это конечно мое личное виденье, да помню были времена и когда то я страдал писал ужасные динамические диалоги, перекрывал у них лукапы и т.д.Но зачем усложнять когда можно все сделать проще и понятней. |
|
08.02.2008, 17:47 | #16 |
SAP
|
Цитата:
Всем большое спасибо, особенно, Kashperuk . Хотелось бы добавить только, что вариант с вызовом готовой формы, более трудоемок, так как эту форму сначало надо сделать...
|
|
08.02.2008, 17:52 | #17 |
MCTS
|
Цитата:
когда логика формы довольно простая.
|
|
Теги |
программно |
|
Похожие темы | ||||
Тема | Ответов | |||
Ruslan Goncharov: Mandatory property for DialogField | 1 | |||
DialogField+Modified | 16 | |||
Модификация выделенных строк | 3 | |||
изменение значения DialogField | 8 | |||
Сравнение DialogField с null | 6 |
|