I’m trying to model a process dealing with hierarchical data.
The customer should be notified about events (past or upcoming). We should be able to prepare and deliver several messages about one event: first we start with a single initial message, but eventually, more messages can be added, like follow-ups and conclusion messages. Every message has its own workflow - it can be updated, scheduled for delivery, in delivery, delivered. The workflow of event is tied to the state of its messages: for example it is
closed when all its messages are delivered and event end time has passed without anyone adding new messages.
So, my main entity is
Event. It has own data attributes like
end times. This data is common to all this events’ messages. So I model a single
Event as a process instance. But individual messages have their own, independent and possibly different paths though the delivery workflow. So, I thought it is natural to have them as “executions” or “tokens”.
Well, there are multiple messages for one event. I could create a multivalued or list variable to store them. The problem is - when a workflow token of a message reaches some Activity - how do I know -which message was that? It may be multiple messages at the same Activity - how do I know - which one just arrived and should be dealt with?
I also tried to store them as local vars. The problem is - local vars are scoped to the current activity, whatever that means. They will not survive though the whole path of the token.
I cannot find a way to get the data that travels with that token. A regular variable just has the common data for all tokens of current process instance - nothing specific to the token at hand.
I also thought about using multiinstance subprocesses. They should deal nicely with local vars (not sure if they are local, but, as I understand, each subprocess instance gets its own). The problem is that in our case we do not have all the messages at once. A new message may be created at any time. So, we never have a final iterable list of messages, which, as I understand, is required to create a multiinstance subprocess.