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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.10.2008, 16:17   #1  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Вот я сижу и думаю, а почему вы вообще используете wait(), а не detach()?

Ведь смысл Wait() состоит в том, чтобы долждаться закрытия дочерней формы перед продолжением исполнения кода родительской.

Проверил с detach() - у меня обвалов системы не наблюдается
Старый 22.10.2008, 16:30   #2  
CDR is offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Регистрация: 27.11.2003
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Вот я сижу и думаю, а почему вы вообще используете wait(), а не detach()?

Ведь смысл Wait() состоит в том, чтобы долждаться закрытия дочерней формы перед продолжением исполнения кода родительской.

Проверил с detach() - у меня обвалов системы не наблюдается
Смысл, если в кратце, в следующем...
Есть родительская форма, с нее по кнопке открывается дочерняя... При этом в родительской форме необходимо иметь возможность контролировать дочернюю форму. Пока открыта дочерняя форма, родительская форма не должна закрываться (поведение, как у диалогов на RunBaseBatch). При повторном нажатии на кнопку форму необходимо переоткрыть.... Это нужно для обновления данных в дочерней форме. Вроде ничего криминального .

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

Непонятно, почему в трешке работает, в новых версиях - крэш. Это с чем-то жизненным связано или просто так сделали?
__________________
Dynamics AX Experience
Старый 22.10.2008, 16:45   #3  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от CDR Посмотреть сообщение
Есть родительская форма, с нее по кнопке открывается дочерняя... При этом в родительской форме необходимо иметь возможность контролировать дочернюю форму.
Контролировать каким образом? Заметьте, что пользователь может закрыть дочернюю форму, и, если она в методе close() как-то не информирует об этом форму родительскую, то та об этом и не узнает - объект FormRun дочерней формы будет все также спокойно жить в контексте формы родительской. Организуйте как-либо взаимодействие этих форм, например, как это сделано в журналах и строках журналов.
Цитата:
Сообщение от CDR Посмотреть сообщение
Пока открыта дочерняя форма, родительская форма не должна закрываться (поведение, как у диалогов на RunBaseBatch).
Подумайте об организации псевдомодальности.
Цитата:
Сообщение от CDR Посмотреть сообщение
При повторном нажатии на кнопку форму необходимо переоткрыть... Это нужно для обновления данных в дочерней форме. Понятно, что это можно обойти и решить по другому, например сделать обновление формы без ее закрытия...
Конечно, можно - через dynalink'и и обработку linkActive() на DS дочерней формы или напрямую через вызов ее методов из родительской формы...
Старый 22.10.2008, 17:11   #4  
CDR is offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Регистрация: 27.11.2003
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Контролировать каким образом? Заметьте, что пользователь может закрыть дочернюю форму, и, если она в методе close() как-то не информирует об этом форму родительскую, то та об этом и не узнает - объект FormRun дочерней формы будет все также спокойно жить в контексте формы родительской.
Неправильно. Родительская форма без проблем может узнать не только, закрыта ли дочерняя форма, но и как именно закрыта, используя методы closed(), closedOK(), closedCancel().

Цитата:
Сообщение от gl00mie Посмотреть сообщение
Организуйте как-либо взаимодействие этих форм, например, как это сделано в журналах и строках журналов.Подумайте об организации псевдомодальности.Конечно, можно - через dynalink'и и обработку linkActive() на DS дочерней формы или напрямую через вызов ее методов из родительской формы...
Датасоурсов на формах нет и формы не являются модальными.
В родительской форме вводятся некоторые параметры... Нажимается кнопка, производится навернутый расчет, в дочернюю форму выводится результат. Если все устраивает, выполняется транзакция в БД. Если не устраивает - в родительской форме редактируются параметры и кнопка нажимается заново. При этом дочерняя форма может и не закрываться пользователем самостоятельно...

Вообщем, повторюсь, вопрос состоял не столько в том, "как сделать по другому?"... Сколько в том "Почему перестало работать?".
__________________
Dynamics AX Experience
Старый 22.10.2008, 16:35   #5  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Вот я сижу и думаю, а почему вы вообще используете wait(), а не detach()?
Если использовать detach(), то вообще смысл заморочек с formRun теряется - разве что оставлять ссылку на форму, чтобы закрыть ее при следующем нажатии кнопки... если не ждать завершения работы формы, то проще использовать конструкцию вида
X++:
new MenuFunction(menuitemdisplaystr(InventTable), MenuItemType::Display).run( args );
Заодно проверка прав доступа на пункте меню отработает... К слову, интересное дело: если самостоятельно закрыть форму InventTable, то в вызывающей форме соотв. formRun продолжает жить и здравствовать, и на нем можно снова вызвать close(). Не возникнет ли каких побочных эффектов при этом?..
Старый 22.10.2008, 16:47   #6  
CDR is offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Регистрация: 27.11.2003
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Если использовать detach(), то вообще смысл заморочек с formRun теряется - разве что оставлять ссылку на форму, чтобы закрыть ее при следующем нажатии кнопки... если не ждать завершения работы формы, то проще использовать конструкцию вида... Заодно проверка прав доступа на пункте меню отработает...
Ну еще, например, detach() полезен в случае программного построения дизайна формы перед ее запуском...

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

Цитата:
Сообщение от gl00mie Посмотреть сообщение
К слову, интересное дело: если самостоятельно закрыть форму InventTable, то в вызывающей форме соотв. formRun продолжает жить и здравствовать, и на нем можно снова вызвать close(). Не возникнет ли каких побочных эффектов при этом?..
Нет, ничего не происходит, хотя formRun действительно продолжает жить...
__________________
Dynamics AX Experience
Теги
ax2009, ax3.0, ax4.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Microsoft DAX Dev Center Headlines: Microsoft Dynamics AX 2009 Service Pack 1 Has Been Released Blog bot DAX Blogs 0 23.11.2008 12:05
msdynamicsax: DAX 2009 and MS SQL 2008 Blog bot DAX Blogs 0 09.08.2008 14:05
dax-lessons: Generate XML Documentation Files for a project - DAX 2009 Blog bot DAX Blogs 0 08.08.2008 19:06
axStart: Microsoft Dynamics AX 2009 Hot Topics Web Seminar Series Blog bot DAX Blogs 0 06.08.2008 12:05
msdynamicsax: Enterprise Portal development in DAX 2009 Blog bot DAX Blogs 0 18.04.2008 07:06

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

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

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