OCLOperators whentrue
Created by Hans.karlsen on 2021-12-04 · Last edited by Sandra.akech on 2025-12-11.
When you have an immutable OCL expression, you always return a value - and then the OCLOperators_caseTrueFalse is good. However, when using the MDriven Action-Language that allows updates of objects, another construct is introduced to compact things even more:
boolean.whentrue(dothis):boolean
The return is always the arg0.
Example:
let x=SomeObject.SomeEnum in ( (x=#Enum1).whentrue(SomeObject.DoYourThing1); (x=#Enum2).whentrue(SomeObject.DoYourThing2); (x=#Enum3).whentrue(SomeObject.DoYourThing3) )
Fun fact: "whentrue" and logical "and" are implemented the same - the logical "and" only evaluates arg1 of arg0 is true (lazy evaluation) and "whentrue" does the same thing, but always returns arg0.
This means that a convoluted but equivalent construct can be:
let x=SomeObject.SomeEnum in ( (x=#Enum1) and (SomeObject.DoYourThing1;true); (x=#Enum2) and (SomeObject.DoYourThing2;true); (x=#Enum3) and (SomeObject.DoYourThing3;true) )
If this is TRUE, do something.
Example Using whentrue:
isPaid = trueisPaid.whentrue(Order.markAsCompleted)- If
isPaidis true, runOrder.markAsCompleted - If
isPaidis false, do nothing - Result returned:
isPaid(true)
