Skip to end of metadata
Go to start of metadata

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

ОператорЗначениеОписание
SETf AND NOT PREV(f)Установлено значение
DROPPEDNOT f AND PREV(f)Сброшено значение
CHANGED(f OR PREV(f)) AND NOT f==PREV(f)Изменено значение
SETCHANGED

f 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

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

Язык

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

Примеры

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
 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));
     }
;

  • No labels