Приветствую, коллеги!
Каким образом культурно определить, что некоторое поле на форме было изменено сейчас? чтобы запустить тригер по его изменению.
Выбирая в настройках тригера на поле OnObjectModify - я получаю событие при каждом нажатии клавиши...
Сохранить состояние при входе и потом сравнить при выходе?
Проверка изменения поля
-
- Сообщения: 106
- Зарегистрирован: 21 сен 2017, 18:48
- Откуда: Минск
Re: Проверка изменения поля
alexchuk, Попробуйте OnObjectSave - зкрипт будет запусаться ПОСЛЕ того, как изменения сохранены но до того, как вы выходите из поля (объекта).
(или от OnObjectExit - срабатывает ДО сохранения (если надо что-то проверить до того как записать).
(или от OnObjectExit - срабатывает ДО сохранения (если надо что-то проверить до того как записать).
-
- Сообщения: 338
- Зарегистрирован: 11 сен 2017, 13:42
- Откуда: Санкт-Петербург
Re: Проверка изменения поля
Рекомендацию Алексея поддерживаю, но считаю себя обязанным уточнить:OnObjectSave - зкрипт будет запусаться ПОСЛЕ того, как изменения сохранены но до того, как вы выходите из поля (объекта).
(или от OnObjectExit - срабатывает ДО сохранения (если надо что-то проверить до того как записать).
OnObjectSave запускается при выходе из поля ТОЛЬКО в том случае, если в поле производилась попытка изменить данные (даже если сами данные остались не измененными, триггер все равно запустится)
OnObjectExit - срабатывает ВСЕГДА при выходе из поля.
В момент запуска триггера OnObjectSave изменения ЕЩЕ НЕ сохранены и их можно откатить назад (команда UNDO)
это неизбежно придется делать, если нужна уверенность, что поле действительно поменяло свое значениеСохранить состояние при входе и потом сравнить при выходе?
Ну, или как вариант - запомнить текущее значение, выполнить команду Undo и получить начальное значение. А потом принять решение.
Только эту самую команду Undo придется в цикле выполнять несколько раз, пока не будет получено сообщение об ошибке.
Re: Проверка изменения поля
Культурно
- на тригере onObjectEnter запоминаете значение поля в глобальную переменную (типы $$currentFieldValueReserv )
- на тригере onObjectSave сравниваете значение поля со значением $$currentFieldValueReserv, принимаете решение что значение корректно и что с ним делать (если надо откатываете значение из резерва )
- очищаете $$currentFieldValueReserv
таким образом если у пользователя курсор в поле, то в $$currentFieldValueReserv всегда хранится первоначальное значение поля, если курсора в поле нет, то $$currentFieldValueReserv - пустое (собственно и самой переменной в памяти нет)
Можно повесить аналогичные тригеры на несколько полей - в $$currentFieldValueReserv будет всегда первоначальное значение активного поля.
- на тригере onObjectEnter запоминаете значение поля в глобальную переменную (типы $$currentFieldValueReserv )
- на тригере onObjectSave сравниваете значение поля со значением $$currentFieldValueReserv, принимаете решение что значение корректно и что с ним делать (если надо откатываете значение из резерва )
- очищаете $$currentFieldValueReserv
таким образом если у пользователя курсор в поле, то в $$currentFieldValueReserv всегда хранится первоначальное значение поля, если курсора в поле нет, то $$currentFieldValueReserv - пустое (собственно и самой переменной в памяти нет)
Можно повесить аналогичные тригеры на несколько полей - в $$currentFieldValueReserv будет всегда первоначальное значение активного поля.
Re: Проверка изменения поля
Общий смысл понял! Спасибо за разъяснения!!!
-
- Сообщения: 106
- Зарегистрирован: 21 сен 2017, 18:48
- Откуда: Минск
Re: Проверка изменения поля
P.S. Если воспользоваться функцийей Рея Кологона с сайта Брайна Даннинга XORvalues ( ListA ; ListB ) в варианте XORvalues( List( A; B); A) -- то можно получить значения(абзацы), которые были изменены по сравнению с $$currentFieldValueReserv (значение при входе в поле) и по выходу из поля. На пример, для лога.