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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.03.2011, 04:55   #1  
Ievgenii is offline
Ievgenii
Участник
Аватар для Ievgenii
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
 
111 / 113 (4) +++++
Регистрация: 21.09.2008
Адрес: Copenhagen, Denmark
Задача (может кому то будет интересно)
Есть форма с двумя контролами на ней. Например первый - string контрол (InventLocationId) из источника данных (InventLocation). Второй – неважно.
На первой контроле переопределен метод (validate) который выгдядит как:
X++:
public boolean validate()
{
 
InventLocation inventLocation;
boolean ret;
;
 
inventLocation = InventLocation::find(this.valueStr());
 
if (inventLocation)
{
    ret = true;
    info('validation is OK');
}
else
{
    ret = checkFailed('validation failed');
}
 
return ret;
 
}


Пользователь делает следущие шаги
  1. Открывает форму
  2. Устанавливает курсор на поле первого контрола и выбирает валидное значение из лукапа (GW). Дальше – не покидая контрол вводит какую нибудь чуш (GWsdsdsdsd)
  3. Покидает контрол - переходит на второй контрол
  4. Возращает курсор на поле первого контрола и вводит опять валидное значение (GW)
  5. Покидает контрол
Вопросы
  1. Какой будет порядок вывода сообщений?
  2. Почему?
  3. Если 1+2 не верно работает - какие выводы мы можем сделать.
__________________
Thx,
Ievgenii Korovin| Dynamics Ax SCM| Microsoft Corp| http://blogs.msdn.com/DynamicsAxSCM/
Старый 15.03.2011, 07:51   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Ievgenii Посмотреть сообщение
[/LIST]Вопросы
  1. Какой будет порядок вывода сообщений?
  2. Почему?
  3. Если 1+2 не верно работает - какие выводы мы можем сделать.
?! Как должно быть или как будет в конкретной версии?

вообще говоря, порядок вызовов задокументирован в хелпе (ключевое слово sequence - по нему много полезного)

про форму
http://msdn.microsoft.com/en-US/libr...(v=AX.10).aspx
в частности про контрол
http://msdn.microsoft.com/en-US/libr...(v=AX.10).aspx

*******************
кстати, хочу заметить что старые хелпы были более наглядны - с картинками
и более правильны
Миниатюры
Нажмите на изображение для увеличения
Название: 1.PNG
Просмотров: 253
Размер:	78.3 Кб
ID:	6669  
__________________
полезное на axForum, github, vk, coub.
Старый 15.03.2011, 08:32   #3  
kornix is offline
kornix
MCP
MCBMSS
Злыдни
Ex AND Project
 
414 / 146 (5) +++++
Регистрация: 24.02.2009
Адрес: Санкт-Петербург
Хм.. Прошу не топтать в случае ошибки, отвечаю честно, без примера. Вроде бы должно быть так:
1) Сработает перекрытый validate - выкинет ошибку
2) Сработает табличный validate, который тоже выкинет ошибку

Вывод - валидаторы нужно писать не на контроле формы, а на датасорсе, причем желательно на датасорсе вызывать класс *type.
Старый 15.03.2011, 08:55   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от kornix Посмотреть сообщение
Вывод - валидаторы нужно писать не на контроле формы, а на датасорсе,
ага. причем еще лучше на самой таблице

Цитата:
Сообщение от kornix Посмотреть сообщение
причем желательно на датасорсе вызывать класс *type.
А можно чуть подробнее?
__________________
полезное на axForum, github, vk, coub.
Старый 15.03.2011, 09:02   #5  
kornix is offline
kornix
MCP
MCBMSS
Злыдни
Ex AND Project
 
414 / 146 (5) +++++
Регистрация: 24.02.2009
Адрес: Санкт-Петербург
Цитата:
Сообщение от mazzy Посмотреть сообщение
А можно чуть подробнее?
Имел ввиду если проверка какая-то громоздкая, и таблица стандартная. Например если это salesLine, то из табличного validateField можно вызывать проверку в классе salesLineType.

Так удобно делать когда класс *type уже был написан в стандарте, его удобно инициализировать. Поправьте меня, если я ошибаюсь

ЗЫ: Насчет проверки на датасорсе - извиняюсь, утро, имел ввиду размещать проверки на таблицах.

Последний раз редактировалось kornix; 15.03.2011 в 09:15.
За это сообщение автора поблагодарили: mazzy (2).
Старый 15.03.2011, 09:52   #6  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Люди! Вы чего, думали, вас проверяют на знание порядка вызова методов или способность слабать тестовую формочку? Мне лично этот вопрос до боли напомнил тему метод active() - когда он должен вызываться?:
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Возьмем, к примеру, форму PurchTable. Когда, по вашему мнению, должен вызываться метод active() на источнике данных PurchTable?
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Тут мы что-то меняем, и че-то кто-то где-то поменял теперь порядок непредсказуемый. Я вот пытаюсь понять, стоит так оставить, или таки нужно искать, где что-то изменилось и чинить... Пока тоже согласен, что нужно чинить.
Сообщения были датированы декабрем 2008-го, т.е. уже после официального выхода 2009-й, и относились, следовательно, к ядру AX 2012.
Старый 15.03.2011, 10:32   #7  
kornix is offline
kornix
MCP
MCBMSS
Злыдни
Ex AND Project
 
414 / 146 (5) +++++
Регистрация: 24.02.2009
Адрес: Санкт-Петербург
Точно, наверно речь идет о различиях работы метода validate() в двух случаях:
Когда он привязан к датасорсу и когда он ни к чему не привязан?

2 Ievgenii:
Почему в вашем примере нет вызова super()? Так задумано?
Цитата:
Сообщения были датированы декабрем 2008-го, т.е. уже после официального выхода 2009-й, и относились, следовательно, к ядру AX 2012.
действительно, обсуждалось очень похожее. Похоже вопрос родился еще в 2007-ом, но почему-то он не отразился на 5-ку

Последний раз редактировалось kornix; 15.03.2011 в 10:59.
Старый 15.03.2011, 11:12   #8  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Люди! Вы чего, думали, вас проверяют
Ни в коей мере

Я, например, просто хотел обратить внимнаие на то, что в хелпе задокументировано.
Поэтому:
1. Если будут изменения, то надо менять хелп
2. Хелп уже не торт

добавил теги во все темы, связанные с этой
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 15.03.2011 в 11:14. Причина: добавил теги.
Старый 15.03.2011, 11:27   #9  
CDR is offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Регистрация: 27.11.2003
Помниться была в четверке фича: если значение в контроле измененяется с помощью выбора из лукапа, то метод validate на этом контроле почему-то не отрабатывает. Может задача как-то связана с этой фичей?
__________________
Dynamics AX Experience

Последний раз редактировалось CDR; 15.03.2011 в 11:30.
Старый 15.03.2011, 11:39   #10  
Ievgenii is offline
Ievgenii
Участник
Аватар для Ievgenii
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
 
111 / 113 (4) +++++
Регистрация: 21.09.2008
Адрес: Copenhagen, Denmark
Цитата:
Точно, наверно речь идет о различиях работы метода validate() в двух случаях:
Да, речь идет только о самой валидации и как она себя будет вести в данном примере! Извините, если сразу не ясно написал. Пример выбран - просто для наглядности.

В нашем сценарии пользователь два раза покинет контрол - то есть два раза вызавиться метод validate(). Вопрос был какие результаты он покажет (пройдет валидация или нет в обоих случиях) при данной реализации.

Цитата:
?! Как должно быть или как будет в конкретной версии?
Версия не важно, начиная с 4-той (хотя раньше тоже самое будет я думаю)


Цитата:
Хм.. Прошу не топтать в случае ошибки, отвечаю честно, без примера. Вроде бы должно быть так:
1) Сработает перекрытый validate - выкинет ошибку
2) Сработает табличный validate, который тоже выкинет ошибку
Напишите пожалуйста про перекрытый validate в обоих случиях.
__________________
Thx,
Ievgenii Korovin| Dynamics Ax SCM| Microsoft Corp| http://blogs.msdn.com/DynamicsAxSCM/

Последний раз редактировалось Ievgenii; 15.03.2011 в 11:43.
Старый 15.03.2011, 11:56   #11  
kornix is offline
kornix
MCP
MCBMSS
Злыдни
Ex AND Project
 
414 / 146 (5) +++++
Регистрация: 24.02.2009
Адрес: Санкт-Петербург
Все-таки сделал пример:
1. Если контрол связан с источником данных - система запустит validate написанный на контроле, потом modified на контроле, потом validate на таблице.

2. Если контрол не привязан к источнику данных, но привязан к EDT, система запустит validate только в случае ручного ввода текста в поле. Если выбрать значение из лукапа - validate написанный на контроле вообще не отработает.

И еще одна интересная особенность: ваш пример выкидывает 2 одинаковые ошибки: "validation failed". Причем, если поставить breakpoint на info.add() и пройтись отладчиком, то в система выкидывает только одну ошибку.

Последний раз редактировалось kornix; 15.03.2011 в 11:59.
Старый 15.03.2011, 12:26   #12  
Ievgenii is offline
Ievgenii
Участник
Аватар для Ievgenii
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
 
111 / 113 (4) +++++
Регистрация: 21.09.2008
Адрес: Copenhagen, Denmark
Цитата:
1. Если контрол связан с источником данных - система запустит validate написанный на контроле.
Рассматриваем только этот случай.


Цитата:
, потом modified на контроле, потом validate на таблице.
Неважно

Обратите внимание на:
  1. Устанавливает курсор на поле первого контрола и выбирает валидное значение из лукапа (GW). Дальше – не покидая контрол вводит какую нибудь чуш (GWsdsdsdsd)
__________________
Thx,
Ievgenii Korovin| Dynamics Ax SCM| Microsoft Corp| http://blogs.msdn.com/DynamicsAxSCM/
Старый 15.03.2011, 12:59   #13  
kornix is offline
kornix
MCP
MCBMSS
Злыдни
Ex AND Project
 
414 / 146 (5) +++++
Регистрация: 24.02.2009
Адрес: Санкт-Петербург
Тогда получается совсем круто, выводится 2 сообщения:
1. "validation is ok"
2. "Значение не найдено.."

Связано это вот с чем: сначала система попадает в validate на formStringControl'е, при первом вхождении в него метод valueStr() возвращает только то что было выбрано из лукапа. А потом система выполняет проверку уже по связям с источником данных, и причем в этой проверке сравнивается корректное введеное пользователем значение.

А по поводу:
Цитата:
4. Возращает курсор на поле первого контрола и вводит опять валидное значение (GW)
validate на контроле не запускается.

Версия DAX4.0 Kernel 4.0.2503.454

Последний раз редактировалось kornix; 15.03.2011 в 13:08.
За это сообщение автора поблагодарили: Ievgenii (3).
Старый 15.03.2011, 13:19   #14  
Ievgenii is offline
Ievgenii
Участник
Аватар для Ievgenii
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
 
111 / 113 (4) +++++
Регистрация: 21.09.2008
Адрес: Copenhagen, Denmark
Цитата:
Тогда получается совсем круто, выводится 2 сообщения:
1. "validation is ok"
2. "Значение не найдено.."

Связано это вот с чем: сначала система попадает в validate на formStringControl'е, при первом вхождении в него метод valueStr() возвращает только то что было выбрано из лукапа. А потом система выполняет проверку уже по связям с источником данных, и причем в этой проверке сравнивается корректное введеное пользователем значение.
Правильно . Это и был изначальный вопрос.

В Dynamics Ax2009 + в кастомизациях наших партнеров есть формы которые используют valueStr() при валидации, модификции контролов и так далее. Это приводит к очень странному поведению в более сложных случиях, по-этому следует использовать text() метод если нужна подобная валидация.

В Dynamics Ax 2012 куча новых возможностей валидации контролов и такой проблемы быть не должно (очень редко)
__________________
Thx,
Ievgenii Korovin| Dynamics Ax SCM| Microsoft Corp| http://blogs.msdn.com/DynamicsAxSCM/
За это сообщение автора поблагодарили: kornix (1).
Теги
validate, как правильно, метод

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Нет указан пользователь\сотрудник – насколько это серьезно может быть. Ievgenii DAX: Функционал 5 18.11.2009 12:25
Случай из жизни: как я каст тейбл с адресом джоинил(может кому-то полезно будет) HorrR DAX: Программирование 4 11.08.2009 12:58
DAX 4 SP1 Счет-фактура не может включать различные ставки НДС Daiver DAX: Функционал 3 01.10.2007 15:31
Процесс не может получить доступ к файлу Yprit DAX: Администрирование 6 15.07.2005 21:46
А кто-нибудь здесь может подсказать как выбирать модули при известных бизнес-процес? 2b4fITin DAX: Функционал 5 23.06.2003 17:21

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

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

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