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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.12.2023, 14:24   #1  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Закрыть окно диалога из Validate
dax2012

Функционал на основе RunBase или SysOperation предполагает, что если Validate() вернет false, то происходит возврат в форму диалога

Есть ли штатная возможность не вернуться в диалог, а отменить дальнейшую работу? Симулировать нажатие кнопки "Отмена"

Т.е. при проверке в validate() обнаружили ошибку, которую невозможно исправить изменяя реквизиты на форме диалога. Нет смысла возвращаться в окно диалога. Надо отменить обработку.


PS: Для простоты, считаем, что программного вызова этой функции нет. Всегда только вызов вручную через диалог
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 08.12.2023, 14:29   #2  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,731 / 406 (17) +++++++
Регистрация: 23.03.2006
Не делайте проверки в validate, которые не относятся к вводимым параметрам. Проверки корректности других данных перенесите в метод check, который вызовите в run
Старый 08.12.2023, 14:51   #3  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Давайте будем считать, что все проверки зависят от вводимых реквизитов

Т.е. нельзя разделить проверки на безусловные и зависящие от введенных реквизитов. Ну, или по каким-то причинам желательно делать все проверки именно в validate()
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 08.12.2023, 15:28   #4  
Lihgt is offline
Lihgt
Участник
 
48 / 70 (3) ++++
Регистрация: 16.04.2002
Адрес: Москва
в validate есть параметр тот самый FormRun
За это сообщение автора поблагодарили: Владимир Максимов (5).
Старый 08.12.2023, 16:18   #5  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Lihgt Посмотреть сообщение
в validate есть параметр тот самый FormRun
Да, спасибо. Про параметр я забыл.

Но параметр - это для RunBase. А для SysOperation как?
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 08.12.2023, 17:37   #6  
Pandasama is offline
Pandasama
Участник
 
457 / 134 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
throw error?
Старый 08.12.2023, 20:50   #7  
ТРЕНЕР is offline
ТРЕНЕР
Участник
Аватар для ТРЕНЕР
 
599 / 50 (3) ++++
Регистрация: 11.06.2003
Адрес: Москва
SysOperationDialog.close() ?
Старый 08.12.2023, 22:22   #8  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от ТРЕНЕР Посмотреть сообщение
SysOperationDialog.close() ?
Из метода validate() контракта данных? Как?
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 08.12.2023, 22:27   #9  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Pandasama Посмотреть сообщение
throw error?
Не работает. Т.е. validate(), конечно, прерывается. Но окно диалога не закрывается
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 10.12.2023, 13:43   #10  
Player1 is offline
Player1
Участник
Самостоятельные клиенты AX
 
306 / 137 (5) +++++
Регистрация: 21.04.2008
Не знаю помогу ли как-то, но есть метод checkCloseDialog() быть может тут его использовать взамен validate
Старый 13.12.2023, 10:16   #11  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Player1 Посмотреть сообщение
Не знаю помогу ли как-то, но есть метод checkCloseDialog() быть может тут его использовать взамен validate
Не поможет. Собственно, изнутри него и происходит вызов validate(). Упрощенно и схематично, содержимое этого метода выглядит так

X++:
this.getFromDialog();
ret = this.validate();

return ret;

Пока сделал "костыль"

1. В самом контракте данных добавил метод parmIsBreak()
2. В методе validate() контракта данных

X++:
if (...)
{
    this.parmIsBreak(true);
}

При этом сам validate() возвращает true, чтобы закрыть окно диалога

3. В стартовом методе SysOperation

X++:
if (!this.validate || _contract.parmIsBreak())
{
     return;
}
Ну, есть еще ряд тонкостей, связанных с инициализацией, чтобы из кеша не бралось последнее использованное значение, но это уже детали...
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: Player1 (1).
Теги
runbase, sysoperation framework, validate

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
[CodeStyle] check* vs validate* методы. в чем разница в X++? какой будет выводить в инфолог? mazzy DAX: Программирование 10 10.08.2021 17:00
axaptapedia: Validate field values on form Blog bot DAX Blogs 0 17.12.2008 12:05
В классе создается окно диалога. Dim[0] показывает 3 аналитики Arahnid DAX: Программирование 3 13.10.2008 15:03
Использование формы в качестве диалога vs создание диалога программно Lucky13 DAX: Программирование 3 30.05.2008 13:09
Как закрыть окно проекта после getRunNode? belugin DAX: Программирование 5 28.12.2004 14:55
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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