31.03.2009, 11:13 | #1 |
Участник
|
Открытие форм с сервера с использованием MenuFunction
Не так давно потребовалось из класса, отрабатывающего на сервере, запускать форму, отображающую некоторые результаты его работы. Для формы есть пункт меню, запускающий ее на клиенте. Оказалось, что решение "в лоб" вовсе не обязательно приведет к желаемому эффекту:
X++: MenuFunction menuFunc = new MenuFunction( menuitemdisplaystr(SomeForm), MenuItemType::Display ); Args args = new Args(); // ... menuFunc.run( args ); X++: MenuFunction menuFunc = infolog.getNode( UtilElementType::DisplayTool, menuitemdisplaystr(SomeForm) ); Args args = classFactory::makeObjectOnClient( classnum(Args) ); // ... menuFunc.run( args ); На форуме уже встречалась похожая тема Проблема с программным открытием форм, но в моем случае вариант "запускать класс на клиенте" был неприемлем. PS. Axapta 3.0.1951.7669, также проверялось на AX 4.0.2501.116. |
|
|
За это сообщение автора поблагодарили: samolalex (3). |
31.03.2009, 11:29 | #2 |
Участник
|
На самом деле - видимо что-то неправильно задизайнили, раз такое приходится делать.
Концептуально это неверно. Хорошо конечно, что есть дыра, через которую получилось пролезть.. но ее могут и заткнуть. и что тогда? |
|
31.03.2009, 11:31 | #3 |
Участник
|
Цитата:
Сообщение от gl00mie
Не так давно потребовалось из класса, отрабатывающего на сервере, запускать форму, отображающую некоторые результаты его работы. Для формы есть пункт меню, запускающий ее на клиенте. Оказалось, что решение "в лоб" вовсе не обязательно приведет к желаемому эффекту:
X++: MenuFunction menuFunc = new MenuFunction( menuitemdisplaystr(SomeForm), MenuItemType::Display ); Args args = new Args(); // ... menuFunc.run( args ); X++: MenuFunction::runClient( menuitemdisplaystr(AddressTrans_RU), MenuItemType::Display ) ; |
|
31.03.2009, 11:38 | #4 |
Участник
|
|
|
31.03.2009, 12:30 | #5 |
Участник
|
Цитата:
Собственно, что такого неправильного в том, как у меня "задизайнено"? Есть форма, отображающая строчки из определенной таблицы, есть класс, который дергается из другой формы, крутится на сервере, создавая записи в этой таблице, и затем по результатам работы открывает форму для отображения созданных записей - или не открывает, если что-то пошло не так и записи не создались. Я исхожу из того, что:
|
|
31.03.2009, 12:35 | #6 |
Участник
|
Под "неправильным" дизайном я подразумевал вот что:
АОС - один (утрирую) на много клиентов. Код, выполняющийся на сервере, знает, конечно, в каком конкретно процессе он выполняется и т.д. и т.п., поэтому можно сделать вызов чего-то на клиенте. Но правильно ли это? Думаю, что лучше было бы, если бы клиент вытягивал результаты работы с сервера (pull method). Хотя, это мое личное мнение, возможно многие с ним не согласны. А про Args - я проверю. |
|
01.04.2009, 17:08 | #7 |
Участник
|
А почему бы не унаследовать класс от Runbase и в качестве диалога поставить указанную форму, а в ее методе init вычитать все нужные параметры.
Я не знаю конечно вашу задачу, но в этом случае все обычно корректно отрабатывает... |
|