Документация на documentation.lsfusion.org скоро станет недоступной, используйте, пожалуйста, https://docs.lsfusion.org/ru.
Оператор PREV - создание свойства при помощи оператора предыдущего значения.
Синтаксис
PREV(propExpr)
Описание
Оператор PREV создает свойство, возвращающее значение другого свойства на момент начала текущей сессии (или на момент предыдущего события в событийном режиме). То есть значение, которое было до изменений, произошедших в текущей сессии.
PREV это именно оператор, а не встроенное свойство с композицией, поэтому PREV(f(a)) не равно [PREV(a)](f(a)).
Параметры
propExpr
Выражение, значение которого определяет свойство, для которого необходимо получить предыдущее значение.
Примеры
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
f = DATA INTEGER (A);
// выдает по очереди все изменения f(a) в сессии
messageFChanges {
FOR CHANGED(f(A a)) DO
MESSAGE 'In this session f(a) changed from ' + PREV(f(a)) + ' TO ' + 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));
}