Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [] OCL recursive operation


it seems you may be able to solve the problem elegantly using ->closure which is supported by MDT/OCL.

-- Axel

Steffen Heublein <steffen.heublein@xxxxxxxxxxxxxx> wrote:
Hello, I am trying to set up a recursive operation in OCL so that I get all objects that are associated to a certain one (and only those). The context is a BPMN2 process graph and I wish to get a collection with all connectors (i.e. sequence flows) that are successors of a certain node) My constraint looks like this: context FlowNode def: getOutgoingSF(FN : FlowNode) : Set(SequenceFlow) = FN.outgoing.targetRef->collect(x|getOutgoingSF(x))->asSet()->union(FN.outgoing.targetRef) FN.outgoing.targetRef gets the direct successor node(s) of the current node. As such an operation is not really testable with the OCL Interactive Console (my current choice for trying out constraints) I am using Dresden OCL ( to evaluate my constraints. Alas, the syntax checker complains that he can neither resolve the second getOutgoingSF nor (what is strange) the predefined operations asSet() and union(). Now, I am unsure if my recursive code is wrong or if there is some issue with Dresden OCL. Or if there is anything else that i did not think of (maybe also a simpler way to achieve my goal). Any help would be greatly appreciated and already thanks for reading this. Regards, Steffen mailing list

Back to the top