Моя интерпретация вопроса у вас есть что-то вроде
INPUT ...
...
END INPUT
IF int_flag THEN
# Don't update database
ELSE
# Update database
END IF
Если пользователь принимает диалог, код для обновления базы данных будет выполняться. Если пользователь не внес каких-либо изменений в INPUT, это может считаться пустой тратой времени.
Я знаю, что с помощью Genero мы добавили синтаксис, чтобы вы могли лучше обнаружить, что изменения произошли в диалоговом окне и, таким образом, только обновить базу данных, если произошло изменение. http://www.4js.com/online_documentation/fjs-fgl-manual-html/#c_fgl_prog_dialogs_touched_flag.html
Если все еще на старых 4gl, field_touched должен быть доступен вам. Я знаю, что мы можем сделать
AFTER INPUT
IF int_flag THEN
EXIT INPUT
END IF
IF field_touched(*) THEN
# User has made a change in the dialog
и с помощью * тест все поля в диалоговом окне без явного того, чтобы перечислить их, возможно, придется перечислять поля явно. Таким образом, это может быть проще, чем вы думаете, чтобы проверить после диалога.
Аналогичным образом, для сложных структур данных с записями и массивами в Genero мы можем проводить сравнения, анализируя JSON или XML, а затем в строку, поэтому эти методы также могут делать перед и после сравнения один лайнер.
В противном случае, если вы хотите выполнить тест после выполнения инструкции базы данных, триггеры могут быть для вас вариантом. Создайте триггеры, чтобы вставить запись в таблицу аудита только в том случае, если в UPDATE произошло подлинное изменение.