As the name implies, the Intermediate Event indicates where something happens (an Event) somewhere between the Start and End of a Process. It will affect the flow of the Process, but will not start or (directly) terminate the Process. Intermediate Events can be used to:
- Show where messages are expected or sent within the Process,
- Show delays are expected within the Process,
- Disrupt the Normal Flow through exception handling, or
- Show the extra work required for compensation
There are ten (10) types of Intermediate Events in BPMN: None, Message, Timer, Escalation, Compensation, Conditional, Link, Signal, Multiple and Parallel Multiple. Each type of Intermediate Event will have a different icon placed in the center of the Intermediate Event shape to distinguish one from another.
An Intermediate Event that is placed within the normal flow of a Process can be used for one of two purposes. The Event can respond to (“catch”) the Event Trigger or the Event can be used to set off (“throw”) the Event Trigger.
When a Token arrives at an Intermediate Event that is placed within the normal flow of a Process, one of two things will happen. If the Event is used to “throw” the Event Trigger, then the Trigger of the Event will immediately occur (e.g., the Message will be sent) and the Token will move down the outgoing Sequence Flow. If the Event is used to “catch” the Event Trigger, then the Token will remain at the Event until the Trigger occurs (e.g., the Message is received). Then the Token will move down the outgoing Sequence Flow.
|This is valid for only Intermediate Events that are in the main flow of the Process. The modeler does not display the type of Event. It is used for modeling methodologies that use Events to indicate some change of state in the Process.
|A message arrives from a participant and triggers the Event. This causes the Process to continue if it was waiting for the message, or changes the flow for exception handling. When used to “catch” the message, then the Event marker will be unfilled (top figure). In Normal Flow, Message Intermediate Events can be used for sending messages to a participant. When used to “throw” the message, the Event marker will be filled (bottom figure) If used for exception handling it will change the Normal Flow into an Exception Flow.
|A specific time-date or a specific cycle (e.g., every Monday at 9am) can be set that will trigger the Event. If used within the main flow it acts as a delay mechanism. If used for exception handling it will change the Normal Flow into an Exception Flow.
|If business-related problems are escalated to supporting or informing activities (e.g. to inform a responsible) then you can use a catching escalation event on an acitivity boundary. The escalation signal is sent from within the activity. If the latter is a sub process then a throwing escalation event throws the escalation signal to the escalation event on the sub process boundary.
|This is used for compensation handling - both activating and performing compensation.
When used in Normal flow, this Intermediate Event indicates that a Compensation is necessary. Thus, it is used to “throw” the Compensation event, and the Event marker MUST be filled (bottom figure). If the Event identifies an activity, then that is the activity (and no other) that will be compensated. Otherwise, the compensation is broadcast to all activities that have completed within the Process Instance, including the top-level Process and including all Sub-Processes. Each completed activity that is subject to compensation will be compensated, in the reverse order of the completion of the activities. To be compensated, an activity MUST have a Compensation Intermediate Event attached to its boundary. When attached to the boundary of an activity, the Event will be triggered by a thrown compensation that identifies that activity or to a broadcast compensation. When used to “catch” the Compensation event, the Event marker MUST be unfilled (top figure). When the Event is triggered, the Compensation Activity that is Associated to the Event will be performed.
|This type of event is triggered when a Condition becomes true.
|A Link is a mechanism for connecting two sections of a Process. Link Events can be used to create looping situations or to avoid long Sequence Flow lines. Link Event uses are limited to a single Process level (i.e., they cannot link a parent Process with a Sub-Process). Paired Intermediate Events can also be used as “Off Page Connectors” for printing a Process across multiple pages. They can also be used as generic “Go To” objects within the Process level. There can be multiple Source Link Events, but there can only be one Target Link Event. When used to “catch” from the Source Link, the Event marker will be unfilled (top figure). When used to “throw” to the Target Link, the Event marker will be filled (bottom figure).
|This type of event is used for sending or receiving Signals. A Signal is for general communication within and across Process Levels, across Pools, and between Business Process Diagrams. A BPMN Signal is similar to a signal flare that shot into the sky for anyone who might be interested to notice and then react. Thus, there is a source of the Signal, but no specific intended target. This is different than a BPMN Message, which has a specific Source and a specific Target (which can be an Entity or an abstract Role). This type of Intermediate Event can send or receive a Signal if the Event is part of a Normal Flow. The Event can only receive a Signal when attached to the boundary of an activity. The Signal Event differs from an Error Event in that the Signal defines a more general, non-error condition for interrupting activities (such as the successful completion of another activity) as well as having a larger scope than Error Events. When used to “catch” the signal, the Event marker will be unfilled (top figure). When used to “throw” the signal, the Event marker will be filled (bottom figure).
|This means that there are multiple Triggers assigned to the Event. If used within normal flow, the Event can “catch” the Trigger or “throw” the Triggers. When attached to the boundary of an activity, the Event can only “catch” the Trigger. When used to “catch” the Trigger, only one of the assigned Triggers is required and the Event marker will be unfilled (top figure). When used to “throw” the Trigger (the same as a Multiple End Event), all the assigned Triggers will be thrown and the Event marker will be filled (bottom figure).
|This means that there are multiple triggers assigned to the Event. If used within normal flow, the Event can only “catch” the trigger.
Unlike the normal Multiple Intermediate Event, all of the assigned triggers are required for the Event to be triggered.