|
12.01.2007, 14:59 | #1 |
Участник
|
validate на элементах формы
Привет всем.
В аттаче формочка. Посмотрите, кому не лень там 2 поля с номенклатурой - хочу, чтобы во втором требовало ввода точно такого же значения, как и в первом. (и наоборот) validate() на контроле вообще не отрабатывает. (хотя отрабатывает, если вводить значение вручную - правда тоже с глюком) Может это баго-фича? или known issue? Или может есть объяснение такому поведению? Спасибо |
|
12.01.2007, 15:48 | #2 |
NavAx
|
Есть предположение, что метод нормально работает только тогда, когда есть его привязка к DS:
Цитата:
This method is called when the user leaves the control or saves. The method is only called if the user has made changes to the control. Override this method to validate user input.
|
|
|
За это сообщение автора поблагодарили: kashperuk (2). |
12.01.2007, 16:03 | #3 |
NavAx
|
скорее всего это следует из части фразы
Цитата:
... or saves
|
|
12.01.2007, 15:52 | #4 |
Участник
|
Да, я так и предполагаю, но из приведенной цитаты этого, к сожалению (или к счастью), не следует
|
|
12.01.2007, 16:11 | #5 |
Участник
|
Нет, метод modified вызывается и для unbound controls при нажатии, к примеру, Ctrl + S или кнопки сохранить на панели инструментов.
Порядок исполнения методов для контрола такой: leave (control) -> validate (control) -> modified (control) -> т.д. Но эта информация для связанных с источником элементов формы. Для несвязанных не нашел ничего. Не без помощи AndyD есть решение: validate() не трогаем. Перекрываем modified(): X++: [SIZE=2][LEFT]public boolean modified() { boolean ret = true; str s; ; s = winapi::getWindowText(this.hWnd()); if (itemIdFirst.valueStr() && s) { if (itemIdFirst.valueStr() !=s) ret = checkFailed(strFmt("ItemId_1 (%1) != ItemId_2 (%2)", itemIdFirst.valueStr(), s)); } if (ret) ret = super(); return ret;[/LEFT] } [/SIZE] |
|
12.01.2007, 16:18 | #6 |
----------------
|
Замечание.
У меня сложилось впечатление, что при автозополнении поля метод valueStr возвращает только введенную часть без автозаполенной ------- пользуйтесь edit-методами еще... для связанных с источником элементов формы вызывается validate на поле DS, а не на контроле Последний раз редактировалось Wamr; 12.01.2007 в 16:20. |
|
|
За это сообщение автора поблагодарили: kashperuk (2). |
12.01.2007, 16:29 | #7 |
Участник
|
Цитата:
Цитата:
Я не проверял, но так написано у Ерёменка и Шашкова. leave (design) -> validate (design) -> modified (design) -> validate (DS) -> validateField (Table) -> modified (DS) -> modifiedField (Table) |
|
12.01.2007, 16:34 | #8 |
Участник
|
Не - validate() на датасоурсе вызывается из modified() на контроле
__________________
Axapta v.3.0 sp5 kr2 |
|