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

Оператор PREV

Оператор PREV - создание свойства при помощи оператора предыдущего значения.

Синтаксис

PREV(propExpr)

Описание

Оператор PREV создает свойство, возвращающее значение заданного выражения на момент начала текущей сессии изменений — то есть значение, которое было до изменений, произошедших в этой сессии. Он всегда использует область видимости начала сессии (не переключает режим в зависимости от контекста); о том, как это соотносится с событийным режимом операторов изменений, смотрите парадигмальную статью и Events.md#change. Это контекстно-зависимый оператор-свойство, который может встречаться внутри выражений.

к сведению

PREV это именно оператор, а не встроенное свойство с композицией, поэтому PREV(f(a)) не равно [PREV(a)](f(a)).

Параметры

  • propExpr

    Выражение, для которого возвращается предыдущее значение.

Примеры

CLASS A;
f = DATA INTEGER (A);
// выдает по очереди все изменения f(a) в сессии
messageFChanges {
FOR CHANGED(f(A a)) DO
MESSAGE 'В этой сессии f(a) изменилось с ' + PREV(f(a)) + ' на ' + f(a);
}

CLASS Document;
date = DATA DATE (Document);

CLASS Article;
price = DATA NUMERIC[14,2] (Document, Article);
// записать в цену документа, последнюю использованную цену в БД
// PREV важен чтобы не учитывалась цены введенные в этом документе
// это особенно важно, если последняя использованная цена будет материализованной, тогда платформа сможет просто считать это значение из таблицы
setPrice {
price(Document d, Article a) <- PREV((GROUP LAST price(d, a) ORDER date(d), d));
}