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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.04.2002, 16:35   #1  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Как открыть форму
Вот, сколько уже писали на X++, а проблема, тривиальная по сути, первый раз возникла. Предположим, что у нас есть форма. В форме кнопка. Хочется, чтобы когда мы на эту кнопку нажимаем, открывалась другая форма, а исходная форма закрывалась.

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

И напоследок некоторое усложнение задачи: а как сделать так, чтобы при нажатии на кнопку открывались две формы?
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 09.04.2002, 17:18   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
1. Связью между формами занимается не MenuItem. Поищи в хелпе слово AutoJoin
=====
The following properties form Axapta’s AutoJoin system ensure data synchronization when two forms are linked:

AutoNotify
AutoQuery
AutoSearch
DelayActive, and
LinkType
=====

2. Для того, чтобы открыть две формы надо перехватить метод clicked. Создать args и открыть форму. См. пример
X++:
formRun = new MenuFunction(menuItemDisplayStr(LedgerJournalTransCustPayment),MenuItemType::Display).create(args);
    if (formRun)
    {
        formRun.run();
        formRun.wait();
    }
3. Чтобы caller-форма закрывалась надо перехватить cliced и после супера сказать что-нибудь типа element.close. закрывающий метод надо выбирать в зависимости от ситуации и типа формы.
Старый 09.04.2002, 17:43   #3  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
1. Да, это настройки фильтрации, но сами данные-то как раз при вызове передаются.
Дело в том, что я вызываю стандартную форму из своей. Бог знает, откуда она еще вызывается, поэтому настройки сбивать не хотелось бы.

2. 3. Это все, конечно, хорошо, но как бы сделать так, чтобы одновременно происходило и открытие одной формы, и закрытие другой (то есть и close(), и без wait())?

На TechNet посоветовали использовать следующую вещь:
X++:
menuItem = new MenuFunction (menuItemDisplayStr (MenuItemFromAOT), MenuItemType::Display);
parameters.caller(this);
parameters.record(someRecordInForm)
menuItem.run(parameters);
Думаю, что если в качестве record передавать пустую запись, то "все у нас получится". Сейчас попробую.

В любом случае, спасибо за ответ.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 09.04.2002, 19:09   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
1.
ну, не всегда.
Дело в том, что в открываемой форме как правило проверяется args().Record(). Однако же может проверяться и args().caller(). caller проверяется редко.

2.
Не по аксаптовски это... не по аксаптовски...
Ты уверен, что делаешь согласно "духу аксапты"?
Может стоит почитать best practice?
Ты уверен, что это такое поведение не собъет пользователе
Старый 09.04.2002, 20:41   #5  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Цитата:
Изначально опубликовано mazzy
Однако же может проверяться и args().caller(). caller проверяется редко.
Да, уже попал на этом. Исправил. Теперь и caller(null) ставлю.


Цитата:
Изначально опубликовано mazzy
Не по аксаптовски это... не по аксаптовски...
Ты уверен, что делаешь согласно "духу аксапты"?
Может стоит почитать best practice?
Ты уверен, что это такое поведение не собъет пользователе
Тоже самое говорил потенциальным пользователям. Ну не хотят они так... В итоге решил, что лучше сделать так, чем спорить. ("Тяжела... жизнь программиста...").
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 09.04.2002, 21:11   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
тады ой.
раз пользователи хотят - надо делать
(сначала предупредить о последствиях, а потом все равно сделать )
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
как открыть форму в фоном режиме Didar DAX: Программирование 3 12.07.2007 10:02
Как обновить форму, если добавление через кнопку? Arahnid DAX: Программирование 5 21.05.2007 11:18
Можно ли редактировать форму, если на нее наложен addRange? Hans DAX: Программирование 10 22.05.2006 16:35
При попытке открыть форму TutorialGantt выдается ошибка? Hidden DAX: Прочие вопросы 3 25.11.2005 12:45
Как открыть форму с строками журнала Leha DAX: Программирование 2 27.08.2004 10:18

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

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

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