Оператор CHANGE
Оператор CHANGE - создание действия, которое изменяет свойство.
Синтаксис
[CHANGE] propertyId(expr1, ..., exprN) <- valueExpr [WHERE whereExpr]
Описание
Оператор CHANGE создает действие, которое изменяет свойство при выполнении условия. Этот оператор может добавлять свои локальные параметры при задании свойства, значение которого будет изменяться. Эти параметры соответствуют перебираемым объектам и не являются параметрами создаваемого действия.
Условие определяется блоком WHERE. Если этот блок не задан, то считается, что условие всегда выполняется.
Ключевое слово CHANGE, определяющее оператор, можно не указывать.
Параметры
-
propertyIdИдентификатор свойства, значение которого изменяется. Свойство должно быть создано определенными операторами, чтобы возможно было изменить его значение. Разрешается изменять значения свойств, созданных с помощью операторов
DATA,ABSTRACT,LOCAL. -
expr1, ..., exprNСписок выражений или типизированных параметров, задающих аргументы изменяемого свойства. При использовании типизированных параметров можно обращаться как к уже объявленным параметрам, так и объявлять новые локальные параметры. При использовании выражений добавлять новые локальные параметры нельзя. Количество выражений в этом списке должно совпадать с количеством параметров изменяемого свойства.
-
valueExprВыражение, на значение которого необходимо изменить значение свойства.
-
whereExprВыражение, значение которого является условием создаваемого изменения. Если не задано, считается равным
TRUE.
Примеры
// установить всем клиентам у кого сумма заказа больше 100 скидку в размере 15 процентов
CLASS Customer;
discount = DATA NUMERIC[5,2] (Customer);
totalOrders = DATA NUMERIC[14,2] (Customer);
setDiscount {
discount(Customer c) <- 15 WHERE totalOrders(c) > 100;
}
discount = DATA NUMERIC[5,2] (Customer, Item);
in = DATA BOOLEAN (Item);
// изменить скидку для выбранных товаров для клиента
setDiscount (Customer c) {
discount(c, Item i) <- 15 WHERE in(i);
}
// скопировать свойство g в свойство f
f = DATA INTEGER (INTEGER);
g = DATA INTEGER (INTEGER);
copyFG {
f(a) <- g(a);
}