Да, это очень хорошая идея, чтобы убедиться, что dw.accepttext()
запущен, прежде чем пытаться сохранить любое окно данных. В противном случае, как вы указали, он не сможет сохранить всю информацию, которую вводит пользователь, если только он не выходит из каждого поля; каких конечных пользователей ожидать не следует.
Для более сложных окон / объектов вы можете создать для этого простую функцию, например wf_accepttext()
, которая содержит все вызовы dw.accepttext()
для каждого окна данных, которое необходимо обновить. Затем вы можете просто вызвать эту функцию, прежде чем пытаться обновить свои окна данных.
(Правка) Дополнительные мысли:
Приведенный выше комментарий Терри напомнил мне кое-что, что я не учел включить в свой первоначальный ответ. accepttext()
возвращает -1
, если проверка поля не удалась.
Поэтому, если вы создаете пользовательскую функцию для обработки всех ваших вызовов accepttext()
, убедитесь, что вы написали ее для обработки этого кода возврата. Что-то вроде этого должно быть достаточно:
/* wf_accepttext() */
if dw_foo.accepttext() = -1 then return false
if dw_bar.accepttext() = -1 then return false
// etc..
return true
Таким образом, в верхней части функции сохранения, назовем ее wf_save()
, вы можете сделать это:
/* wf_save() */
if not wf_accepttext() then return false
/* any other save validation and the dw.update() goes below here */
И в случае, если что-то не подтверждается, wf_save()
будет освобожден, и ваше itemchanged
событие должно иметь код для обработки остальных.