Проверка изменения поля

Практические советы по работе с FileMaker, типичные задачи и их решения. У вас вопрос? Пишите сюда.
Ответить
alexchuk
Сообщения: 4
Зарегистрирован: 12 сен 2017, 18:44

Проверка изменения поля

Сообщение alexchuk » 11 апр 2019, 12:49

Приветствую, коллеги!

Каким образом культурно определить, что некоторое поле на форме было изменено сейчас? чтобы запустить тригер по его изменению.
Выбирая в настройках тригера на поле OnObjectModify - я получаю событие при каждом нажатии клавиши...

Сохранить состояние при входе и потом сравнить при выходе?

Alexei Sytch
Сообщения: 64
Зарегистрирован: 21 сен 2017, 18:48
Откуда: Минск

Re: Проверка изменения поля

Сообщение Alexei Sytch » 12 апр 2019, 13:52

alexchuk, Попробуйте OnObjectSave - зкрипт будет запусаться ПОСЛЕ того, как изменения сохранены но до того, как вы выходите из поля (объекта).
(или от OnObjectExit - срабатывает ДО сохранения (если надо что-то проверить до того как записать).

andrey volkov
Сообщения: 201
Зарегистрирован: 11 сен 2017, 13:42
Откуда: Санкт-Петербург

Re: Проверка изменения поля

Сообщение andrey volkov » 12 апр 2019, 16:37

OnObjectSave - зкрипт будет запусаться ПОСЛЕ того, как изменения сохранены но до того, как вы выходите из поля (объекта).
(или от OnObjectExit - срабатывает ДО сохранения (если надо что-то проверить до того как записать).
Рекомендацию Алексея поддерживаю, но считаю себя обязанным уточнить:
OnObjectSave запускается при выходе из поля ТОЛЬКО в том случае, если в поле производилась попытка изменить данные (даже если сами данные остались не измененными, триггер все равно запустится)
OnObjectExit - срабатывает ВСЕГДА при выходе из поля.

В момент запуска триггера OnObjectSave изменения ЕЩЕ НЕ сохранены и их можно откатить назад (команда UNDO)

Сохранить состояние при входе и потом сравнить при выходе?
это неизбежно придется делать, если нужна уверенность, что поле действительно поменяло свое значение
Ну, или как вариант - запомнить текущее значение, выполнить команду Undo и получить начальное значение. А потом принять решение.
Только эту самую команду Undo придется в цикле выполнять несколько раз, пока не будет получено сообщение об ошибке.

Аватара пользователя
Arcady
Администратор
Сообщения: 148
Зарегистрирован: 10 сен 2017, 20:45
Контактная информация:

Re: Проверка изменения поля

Сообщение Arcady » 17 апр 2019, 12:15

Культурно ;)
- на тригере onObjectEnter запоминаете значение поля в глобальную переменную (типы $$currentFieldValueReserv )
- на тригере onObjectSave сравниваете значение поля со значением $$currentFieldValueReserv, принимаете решение что значение корректно и что с ним делать (если надо откатываете значение из резерва )
- очищаете $$currentFieldValueReserv

таким образом если у пользователя курсор в поле, то в $$currentFieldValueReserv всегда хранится первоначальное значение поля, если курсора в поле нет, то $$currentFieldValueReserv - пустое (собственно и самой переменной в памяти нет)
Можно повесить аналогичные тригеры на несколько полей - в $$currentFieldValueReserv будет всегда первоначальное значение активного поля.
Аркадий Перла.
ТриА. Разработка решений для FileMaker
http://tria.pw

alexchuk
Сообщения: 4
Зарегистрирован: 12 сен 2017, 18:44

Re: Проверка изменения поля

Сообщение alexchuk » 25 апр 2019, 04:01

Общий смысл понял! Спасибо за разъяснения!!!

Alexei Sytch
Сообщения: 64
Зарегистрирован: 21 сен 2017, 18:48
Откуда: Минск

Re: Проверка изменения поля

Сообщение Alexei Sytch » 29 апр 2019, 14:23

P.S. Если воспользоваться функцийей Рея Кологона с сайта Брайна Даннинга XORvalues ( ListA ; ListB ) в варианте XORvalues( List( A; B); A) -- то можно получить значения(абзацы), которые были изменены по сравнению с $$currentFieldValueReserv (значение при входе в поле) и по выходу из поля. На пример, для лога.

Ответить