How-to: События
Пример 1
Условие
Есть заказ, для которого заданы дата, номер и признак того, является ли он закрытым.
CLASS Order 'Заказ';
isClosed 'Закрыт' = DATA BOOLEAN (Order);
date 'Дата' = DATA DATE (Order);
number 'Номер' = DATA INTEGER (Order);
Нужно сделать, чтобы заказы автоматически закрывались по окончании дня.
Решение
// Вариант 1
WHEN SET(date(Order o) < currentDate()) DO
isClosed(o) <- TRUE;
// Вариант 2
WHEN CHANGED(currentDate()) AND date(Order o) < currentDate() DO
isClosed(o) <- TRUE;
В первом случае, событие будет выполнено только в одной транзакции в момент изменения выражения внутри оператора SET
. А именно в тот момент, когда дата заказа становится меньше текущей даты. Однако, в случае если пользователь вручную изменит дату заказа больше текущей и сохранит, то система автоматически выполнит это событие и закроет заказ. Поэтому второй вариант предпочтительнее, так как оно будет срабатывать только в момент изменения текущей даты в полночь.