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

Операторы изменений (SET, CHANGED, ...)

Операторы изменений позволяют определить произошли ли для свойства в текущей сессии те или иные виды изменений. Все эти операторы являются производными от оператора предыдущего значения (PREV), однако для улучшения читабельности и производительности рекомендуется использовать именно их. В следующей таблице приведены поддерживаемые виды изменений и их описание:

ОператорЗначениеОписание
SETf AND NOT PREV(f)Установлено значение
DROPPEDNOT f AND PREV(f)Сброшено значение
CHANGED(f OR PREV(f)) AND NOT f==PREV(f)Изменено значение
SETCHANGEDf AND NOT f==PREV(f)
или
CHANGED(f) AND NOT DROPPED(f)
Значение изменено на не NULL
DROPCHANGEDCHANGED(f) AND NOT SET(f)Значение или сброшено, или изменено с одного не NULL на другое не NULL
SETDROPPEDSET(f) OR DROPPED(f)Значение или сброшено или установлено с NULL на не NULL
warning

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

Язык

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

Примеры

quantity = DATA NUMERIC[14,2] (OrderDetail);
price = DATA NUMERIC[14,2] (OrderDetail);
sum(OrderDetail d) <- quantity(d) * price(d) WHEN CHANGED(quantity(d)) OR CHANGED(price(d));

createdUser = DATA CustomUser (Order);
createdUser (Order o) <- currentUser() WHEN SET(o IS Order);

numerator = DATA Numerator (Order);
number = DATA STRING[28] (Order);
series = DATA BPSTRING[2] (Order);
WHEN SETCHANGED(numerator(Order o)) AND
NOT CHANGED(number(o)) AND
NOT CHANGED(series(o))
DO {
number(o) <- curStringValue(numerator(o));
series(o) <- series(numerator(o));
incrementValueSession(numerator(o));
}
;