Legacy Issue Number: 19199
Source: oose Innovative Informatik eG ( Axel Scheithauer)
It is specified that the evaluation of the guard of an ActivityEdge could use the value in the token offered to the edge (see page 392 and 406). However the way, how a guard accesses the value in the token is never specified.
15.2.3 page 392
>An offer shall only pass along an ActivityEdge if the guard for
>the edge evaluates to true for the offered token.
That sentence could get interpreted, that the guard will evaluate the object in the token (in case it contains one). Maybe I'm over interpreting the sentence. Then how about this one, taken from the chapter on DecisionNodes:
15.3.3 page 406
>...the value contained in an incoming object token may be used in
>the evaluation of the guards on outgoing ObjectFlows
Since it is explicitly specified for ActivityEdges coming out of DecisionNodes, I think the same should be true with any Edges.
Now that I have established, that guards should have access to the value in an object token, the question remains, how is this done? The natural way would be to define a parameter of the guard, the same way this is done for selection Behaviors. However guards are ValueSpecifications, and this element cannot have parameters. The Value could be specified by a Behavior, but as far as I understand, this behavior can only have a return parameter (even though there is no constraint).
How could this get solved? Maybe we need a new subclass of ValueSpecificaton like TokenValueSpecification to be used in Expressions? Or we need to allow Behaviors to be used as guards. Another possibility would be to do it the fUML way: The value in the token is compared with the result of the guard-Expression. Here we don't need a parameter. However it would make it hard to define certain kinds of guards (e.g. token.value between l and u) and I don't think, that the current specification includes the interpretation of fUML.
Reported: UML 2.5 — Thu, 30 Jan 2014 05:00 GMT
Updated: Wed, 28 Jun 2017 16:27 GMT