Перейти к основному содержимому
Версия: 4.x

Применение изменений (APPLY)

Оператор применения изменений сохраняет все сделанные изменения в базу, а также вызывает обработки всех синхронных глобальных событий.

Для этого оператора также можно задать применяемое действие, которое будет выполнятся до вызова обработки всех событий, но делать это будет в той же транзакции. Выполнение внутри одной транзакции позволяет увеличить производительность и целостность такого выполнения, однако надо учитывать, что, например, при отмене изменений, все изменения, сделанные в таком применяемом действии, также будут отменены.В процессе обработки событий, операция применения может быть отменена в результате выполнения оператора отмены изменений. Если это происходит, то в свойство System.canceled записывается значение TRUE (NULL - в обратном случае).

Все сообщения, которые выдаются пользователю в процессе обработки событий, после завершения операции (как удачного, так и не удачного) записываются в специальное свойство System.applyMessage.

Как и для других операторов управления сессиями, для оператора применения изменений можно явно указать вложенные локальные свойства, которые сохранят свои изменения после выполнении оператора.

warning

Этот оператор работает по другому если выполняется внутри вложенной сессии: в этом случае все изменения копируются обратно в сессию, в которую эта сессия вложена (при этом в базу данных изменения не сохраняются)

Язык

Для объявления действия, реализующего применение изменений, используется оператор APPLY.

Примеры

CLASS Sku;
id = DATA INTEGER (Sku);

in = DATA LOCAL BOOLEAN (Sku);
applyIn() {
in(Sku s) <- TRUE WHERE id(s) == 123;
APPLY NESTED (in[Sku]) {};
IF canceled() THEN
MESSAGE applyMessage();
FOR in(Sku s) DO
MESSAGE id(s); // показывает '123'
}

calculateInTransaction() {
APPLY {
id(Sku s) <- (GROUP MAX id(Sku ss)) (+) 1; // проставляем новый код внутри транзакции
}
}