|
Глобальная валидация DataWindow
|
|||
---|---|---|---|
#18+
Добрый день! Есть довольно большой проект на PB10.5. Возникла необходимость валидации всех вводимых данных. Некоторые поля в некоторых DW уже валидируются, и эти правила нужно применять после начальной (общей) проверки. Очень не хочется проходиться по всему коду и в каждом окне вставлять вызов валидирующей функции. Может быть есть возможность прикрутить эту функцию в одном месте, и после этого каким-то образом (наследование?) указать что во всех DW она должна вызываться неявно. Буду рад услышать любые советы по этому вопросу. Заранее спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2012, 13:34 |
|
Глобальная валидация DataWindow
|
|||
---|---|---|---|
#18+
Примените наследование. Ваш КО :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2012, 16:38 |
|
Глобальная валидация DataWindow
|
|||
---|---|---|---|
#18+
Спасибо:) Я так понимаю, вы предлагаете пройтись по исходникам всех окон и заменить type dw_1 from datawindow within tratata на type dw_1 from MyDatawindow within tratata и в Mydatawindow каким-то образом отслеживать itemchanged? чем это принципиально отличается от того, чтобы пройтись по всем окнам и вставить в начало itemchanged вызов валидирующей функции? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2012, 16:56 |
|
Глобальная валидация DataWindow
|
|||
---|---|---|---|
#18+
Тем что при добавлении очередного объекта не надо будет править что-то Собственно затем оно и нужно :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2012, 17:40 |
|
Глобальная валидация DataWindow
|
|||
---|---|---|---|
#18+
Хорошо, я так понимаю обхода всего кода не избежать. Но можно ли это сделать как-то гуманно, а не кликать на каждом окне "Edit Source"? Может в более новых версия ПБ есть функция поиска/замены по исходному коду всей библиотеки? ПС. И еще вопрос - как реализовать в предке перехват события, а затем отдавать его на обработку наследнику? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2012, 17:54 |
|
Глобальная валидация DataWindow
|
|||
---|---|---|---|
#18+
scholar..валидации всех вводимых данных.. А проверка во всех случаях одинаковая? (верится с трудом) Если да, то создать объект, который запустить при старте ПО и пусть он контролирует клавиатуру. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2012, 18:01 |
|
Глобальная валидация DataWindow
|
|||
---|---|---|---|
#18+
scholar..как реализовать в предке перехват события, а затем отдавать его на обработку наследнику? Смотрите Help - "AncestorReturnValue" ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2012, 18:11 |
|
Глобальная валидация DataWindow
|
|||
---|---|---|---|
#18+
Ну, я думаю, скорее перехватывать не itemchanged, или вернее не только его Но лучше не изобретать велосипед, а сделать несколько dw и наследовать от них, а сейчас поправить и перекомпилить В случае с PFC это всегда так и делается. Даже для очень больших проектов это занимает сравнительно немного времени, а бонусы очевидны ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2012, 18:31 |
|
Глобальная валидация DataWindow
|
|||
---|---|---|---|
#18+
создать объект, который запустить при старте ПО и пусть он контролирует клавиатуру Это суровый метод... Смотрите Help - "AncestorReturnValue" Спасибо за наводку, сейчас рою документацию, изучаю работу наследования. сделать несколько dw и наследовать от них Не нашел возможности наследовать DataWindow. Обычное окно, пользовательский объект - да. Этого хватает, но есть однин нюанс: Когда я в предке обрабатываю window.dw_1.itemchanged и возвращаю 1, в потомке ничего не происходит, нужно явно вызывать метод предка через super. Нельзя ли как-нибудь обойти это? Цель простая - минимизировать количество изменяемого кода. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2012, 16:56 |
|
Глобальная валидация DataWindow
|
|||
---|---|---|---|
#18+
scholarНе нашел возможности наследовать DataWindow. Обычное окно, пользовательский объект - да. там же окно и класс есть standart visual а там хоть кнобку хоть датавиндоу Когда я в предке обрабатываю window.dw_1.itemchanged и возвращаю 1, в потомке ничего не происходит, нужно явно вызывать метод предка через super. Нельзя ли как-нибудь обойти это? Цель простая - минимизировать количество изменяемого кода.все там происходит хелп чтоли читайте а не ройте Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2012, 12:56 |
|
Глобальная валидация DataWindow
|
|||
---|---|---|---|
#18+
чота раньше отправил чем дописал а там и обед внезапно застиг scholarНе нашел возможности наследовать DataWindow. Обычное окно, пользовательский объект - да. там же, где окно и класс, есть standart visual а там хоть кнобку хоть датавиндоу Когда я в предке обрабатываю window.dw_1.itemchanged и возвращаю 1, в потомке ничего не происходит, нужно явно вызывать метод предка через super. Нельзя ли как-нибудь обойти это? Цель простая - минимизировать количество изменяемого кода.тут я ерунду написал, коды возврата разумеется на очередность событий не влияют там галка есть extend ancestor script хотя по умолчанию она ставится, это ж надо было снять и забыть ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2012, 13:58 |
|
Глобальная валидация DataWindow
|
|||
---|---|---|---|
#18+
Спасибо! standart visual - то что нужно. автортам галка есть extend ancestor script Да, галка есть. Она вставляет в начало метода Код: sql 1.
Это не совсем то что нужно, т.к. из предка невозможно запретить наследнику обрабатывать событие если валидация провалена и придется в наследнике обрабатывать код возврата. Решил вопрос следующим образом: 1. Для DW 1.1. Делаю предка DW, в котором конструктор пробегает по всем полям и вставляет для них валидирующее выражение. К счастью, в данном проекте свойство validation используется всего в одном или двух местах и их легко будет переделать на itemchanged. Код конструктора выглядит примерно так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
1.2. Прохожу по исходникам всех DW и меняю Код: sql 1.
на Код: sql 1.
Поскольку замена простая и безвариантная, ошибок быть не должно. Минус такого решения в том, что при провале валидации в потомке после вывода соответствующего сообщения, выводится также сообщение предка, заданное свойством validationmsg, но это не критично. 2. Для single line edit Все то же самое, но имплементирую событие modified. Поскольку нельзя отменить изменения, делаю так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Кто-то знает как сделать поиск/замену в строке по регулярному выражению? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2012, 18:11 |
|
|
start [/forum/topic.php?fid=15&msg=37958180&tid=1335499]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
132ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 229ms |
0 / 0 |