=> statement
The =>
statement creates a consequence.
Syntax
leftPropertyId(param1, ..., paramN) => eventClause rightExpr [RESOLVE resolveType];
Description
The =>
statement creates a consequence. This operator can declare its own local parameters when specifying the property of the consequence premise. These parameters can then be used in the expression of the consequence.
When creating a consequence a constraint will be created, which is pretty similar to the following statement
CONSTRAINT eventClause leftPropertyId(param1, ..., paramN) AND NOT rightExpr MESSAGE 'Consequence violated';
but it allows you to automatically resolve situations where this constraint is violated. So using type RESOLVE LEFT
is similar to creating a simple event:
WHEN eventClause SET(leftPropertyId(param1, ..., paramN)) DO
SETACTION(rightExpr);
RESOLVE RIGHT
, similarly:
WHEN eventClause DROPPED(leftPropertyId(param1, ..., paramN)) DO
DROPACTION(rightExpr);
Parameters
-
leftPropertyId
ID of the property specifying the consequence premise.
-
param1, ..., paramN
List of parameters of the property that defines the premise of the consequence. The number of these parameters must be equal to the number of parameters of the property.
-
rightExpr
Expression whose value determines the consequence.
-
resolveType
Auto resolution type in case of violation of the consequence. Specified by one of the following options:
LEFT
: if the premise (the left part of the statement) is changed to non-NULL
, then the consequence changes to nonNULL
.RIGHT
: if the consequence (the right part of the statement) changes toNULL
, then the premise changes toNULL
.LEFT RIGHT
: similar toLEFT
andRIGHT
together.
-
eventClause
Event description block. Describes an event upon the occurrence of which the created consequence will be checked and automatic resolution operations will be performed.
Examples
is(Sku s) = s IS Sku;
// the product must have a barcode and name specified
is(Sku s) => barcode(s);
is(Sku s) => name(s);
CLASS Invoice;
CLASS InvoiceLine;
invoice = DATA Invoice (InvoiceLine);
is(InvoiceLine l) = l IS InvoiceLine;
// for a document line, a document must be specified, and when deleting a document, the lines of this document should be deleted
is(InvoiceLine l) => invoice(l) RESOLVE RIGHT;
// is equivalent to declaring document = DATA Invoice (InvoiceLine) NONULL DELETE;
// aggregation for f(a, b) create an object of class x, whose property a(x) equals a, and property b(x) equals b
CLASS A;
CLASS B;
f = DATA BOOLEAN (A, B);
CLASS X;
a = DATA A(X);
b = DATA B(X);
is (X x) = x IS X;
f(a,b) => [ GROUP AGGR X x WHERE x IS X BY a(x), b(x)](a,b) RESOLVE LEFT;
is(X x) => f(a(x), b(x)) RESOLVE RIGHT;