Here is a test for my readers.
Question: What BPMN elements may be used to model interprocess communications (mark all correct options) -
- sequence flow
- message flow
- signal event
- conditional event
Answer: click to see the answer
Comments to the answer:
Control flows can only connect objects within a same pool, so option А is wrong. Messages, by contrast, connect objects in different pools and/or pools themselves (starting or ending at the pool boundary), so option B is the “most correct”, so to say. Option C is also correct, see my signal usage examples.
An example of interprocess communication via conditional event:
The purchasing process checks whether a budget for the given period is approved and if not awaits for the approval. When the budget is approved the purchase is made or not depending on whether it’s secured in the budget. The budget approval is a separate process: when the budget is approved, the process sets the appropriate attribute to “true”, and this same attribute is checked by the purchasing process. In this example two processes interact via conditional event hence option D is correct, too.
Please note that “Budget Approved” trigger fires only when the boolean expresion defined for it changes its value from false to true. It means the following scheme will not work:
If the purchasing in the above diagram happens when the budget is already approved, the process will wait for the trigger forever.
One instance of the budget approval process has an impact on multiple instances of the purchasing processes awaiting the event in this example. BPMN signal works in a similar manner so let’s try to use it for the task:
But it won’t work either. The point is that we are interested not in some abstract budget approval but in a budget for the period defined in the particular purchasing process instance attributes. It’s possible to write a boolean expression for the conditional event that will do the job but in a case of a signal we should define it at design time so we can’t tie the signal to a specific budget item.
Anyway both signals and conditional events support by BPMS vendors is very limited so better not count on them if you are interested in process execution.
Now let’s consider the final option E: do you think interprocess communications may be modeled with associations? My answer - not just may be but should be! To be precise, the value comes not from associations themselves but from data objects connected to the process activities by associations.
Here is an example:
It’s a typical pattern of interaction between customer order process, production scheduling and production. The key point: production has its own rhythm, it does not rush immediately to fulfill a customer’s order. Instead, customers order are converted into production orders, the latter are stored in the database for some time, and then at some regular intervals (e.g. daily) the production planning process starts which calculates a production schedule for given production orders. As soon as the schedule is fulfilled instances of the customer’s order process receive messages that the order is produced and theу proceed to delivery. Two methods of interprocess communication are involved in this case: via data objects and messages.
Generally speaking, these two methods are the most essential. But unfortunately, interprocess communication via data is often neglected.
According to my observations, most business analysts are interested only in the sequence of tasks within a single process (orchestration). If they ever use BPMN data objects they do it to show the data flows between process tasks. Yet data objects are more valuable for modeling interprocess communication.
I strongly recommend starting a process work from a process architecture, hiding processes internals within collapsed pools. Only collapsed pools connected by data objects and messages - here the previous diagram:
It makes no sense to get into the orchestration until you’ve got a clear picture of processes interconnections by data flows and messages.
In BPMN 2.0 a new Data Store element was introduced which is more suitable for interprocess communication modeling:
But I personally don’t have much need for it: If you are within BPMN 1.x then use a good old Data Object and just label it with say, “Production Orders Database”: