17.03.2011, 18:22 | #1 |
Участник
|
Перехвать событий поля диалога в репорте
Существует ли возможность перехватить событие (modified например) для поля диалога на репорте созданом с помощью фреймворка где нету класса, а методы (dialog, pack, unpack) идут на саммом репорте?
Т.е. я понимаю, что нужно использовать методы dlg.formRun().controlMethodOverload( true ); dlg.formRun().controlMethodOverloadObject( this ); Но их нужно вызвать на dialogPostRun диалога, а как в репорте добраться до него не вижу. |
|
17.03.2011, 18:32 | #2 |
MCP
|
Если правильно понял, вы пытаетесь сделать это?
|
|
17.03.2011, 18:40 | #3 |
Участник
|
Цитата:
Сообщение от kornix
Если правильно понял, вы пытаетесь сделать это?
Т.е. я не знаю куда втулить dlg.formRun().controlMethodOverload( true ); dlg.formRun().controlMethodOverloadObject( this ); что бы заработал перехват. |
|
18.03.2011, 12:40 | #4 |
Участник
|
Цитата:
|
|
18.03.2011, 13:31 | #5 |
Участник
|
Цитата:
нормальными средствами нормального АОТ создайте в в этой форме методы. подключите вашу форму в RunbaseReportStd. не занимайтесь динамическим программированием. юзайте статическое. |
|
18.03.2011, 13:32 | #6 |
Участник
|
Цитата:
- Ни в коем случае не модифицируйте класс. Сделайте нормальную форму и подключите ее к диалогу класса. Все необходимые методы для этого есть. примеры смотрите в аксапте (например, создание заказа) |
|
18.03.2011, 13:45 | #7 |
Участник
|
Но в примерах на SYS слое есть и обратные примеры, например класс BOMChangeItem.
PS: на самом деле, я сам всегда делаю отдельную форму, если нужна обработка событий. |
|
18.03.2011, 16:57 | #8 |
Участник
|
Цитата:
Вопрос в том, как это сделать на батчевом репорте со стандартным фрейворком RunbaseReportStd |
|
18.03.2011, 19:26 | #9 |
Участник
|
Кто столкнется с такой же проблемой, то сделал такой солюшен:
В класс RunBaseReportStd добавляем такой метод X++: public void dialogPostRun(DialogRunbase dialog) { ; super(dialog); reportRun._dialogPostRun(dialog); } X++: public void _dialogPostRun(DialogRunbase dialog) { ; if (this.reportHasMethod(methodstr(RunbaseReportStd, dialogPostRun))) { this.thisObject().dialogPostRun(dialog); } } Дальше идет по обычной схеме, хотя она немного изменена: Добавляем следующий метод в наш репорт: X++: public Object dialogPostRun(DialogRunbase _dialog) { ; _dialog.formRun().controlMethodOverload(true); _dialog.formRun().controlMethodOverloadObject(dialogEvents); return _dialog; } В классе dialogEvents у меня есть метод X++: boolean DateRange_modified() { ; info("111"); return true; } Солюшен может показаться с подвыпердоворотом, но он надежен и исполняет свою функцию. |
|
|
За это сообщение автора поблагодарили: Raven Melancholic (2), Arahnid (3). |
|
|