A.8. Intermediate Events

A.8.1. Intermediate Events

... 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.[3]
Intermediate Event handles a particular situation that occurs during Process execution. The situation is the trigger of the Intermediate Event.
In a Process, Intermediate Events can be placed as follows:
in a Process workflow with one optional incoming and one outgoing Flow:
The event is executed as part of the workflow. If the Event has no incoming Flow, its execution is triggered always when the respective trigger occurs during the entire Process instance execution. If the Event has an incoming Flow it is executed as part of the Process workflow. Once triggered, the Event's outgoing Flow is taken only after the respective Event has occurred.
on an Activity boundary with one outgoing Flow:
If the Event occurs while the Activity is being executed, the Event triggers its execution to the outgoing Flow. One Activity may have multiple boundary Intermediate Events. Note that depending on the behavior you require from the Activity with the boundary Intermediate Event, you can use either of the following Intermediate Event type:
  • interrupting: the Activity execution is interrupted and the execution of the Intermediate Event is triggered.
  • non-interrupting: the Intermediate Event is triggered and the Activity execution continues.
Based on the type of Event cause the execution of the Intermediate Event (triggers), the following Intermediate Events are distinguished:
Timer Intermediate Event
delays the execution of the outgoing Flow.
Conditional Intermediate Event
is triggered when its condition evaluates to true.
Error Intermediate Event
is triggered by an Error object with the given Error Code.
Escalation Intermediate Event
has two subtypes: Catching Escalation Intermediate Event that is triggered by a Escalation and Throwing Escalation Intermediate Event that produces an Escalation when executed.
Signal Intermediate Event
has two subtypes: Catching Signal Intermediate Event that is triggered by a Signal and Throwing Signal Intermediate Event that produces a Signal when executed.
Message Intermediate Event
has two subtypes: Catching Message Intermediate Event that is triggered by a Message and Throwing Message Intermediate Event that produces a Message when executed.

A.8.2. Intermediate Event types

A.8.2.1. None Intermediate Event

None Intermediate Event is an abstract Intermediate Event and displays all possible Intermediate Event properties.

A.8.2.2. Timer Intermediate Event

A Timer Intermediate Event allows you to delay further workflow execution or to trigger the workflow execution periodically. It represents a timer that can trigger one or multiple times after a given period of time: always when triggered the timer condition (the defined time) is checked and once the time event occurs, the outgoing Flow is taken.
The Event defines the Timer delay and Timer period properties, that use the Timing mechanism as described in Section A.5, “Timing”. When placed in the Process workflow, a Timer Intermediate Event has one incoming Flow and one outgoing Flow and its execution starts when the incoming Flow transfers to the Event. When placed on an Activity boundary, the execution is trigger at the same time as the Activity execution.
The timer is canceled if the timer element is canceled, for example, by completing or aborting the enclosing process instance).
Attributes
Message
ID of the expected Message object
Timer delay
Time delay before the Event triggers its outgoing Flow for the first time
Timer period
Period between two subsequent triggers
If set to 0, the Event execution is not repeated.

A.8.2.3. Conditional Intermediate Event

A Conditional Intermediate Event is an Intermediate Event with a boolean condition as its trigger. The Event triggers further workflow execution when the condition evaluates to true and its outgoing Flow is taken.
The Event must define its boolean Conditional. When placed in the Process workflow, a Conditional Intermediate Event has one incoming Flow and one outgoing Flow and its execution starts when the incoming Flow transfers to the Event. When placed on an Activity boundary, the execution is triggered at the same time as the Activity execution. Note, that if the Event is non-interrupting, the Event triggers continuously while the condition is true.
Attributes
Condition
Boolean condition that must be evaluated to true for the execution to continue

A.8.2.4. Message Intermediate Event

A Message Intermediate Event is an Intermediate Event that allows you to produce or consume a Message object. Depending on the action the event element is to perform, you need to use either of the following:
  • Throwing Message Intermediate Event produces a Message object based on the defined properties
  • Catching Message Intermediate Event listens for a Message object with the defined properties

A.8.2.5. Compensation Intermediate Event

A Compensation Intermediate Event is a boundary event that is attached to a Activity in a transaction Sub-Process that may finish with a Compensation End Event or a Cancel End Event. The Compensation Intermediate Event must have one outgoing Association Flow that connects to an Activity that defines the compensation action needed to compensate for the action performed by the Activity.
On runtime, if the transaction Sub-Process finishes with the Compensation End Event, the Activity associated with the boundary Compensation Intermediate Event is executed and the execution continues with the respective Flow leaving the transaction Sub-Process.

A.8.2.6. Message Intermediate Event types

A.8.2.6.1. Throwing Message Intermediate Event
When reached on execution, a Throwing Message Intermediate Event produces a Message and the excecution continues to its outgoing Flow.
Attributes
CancelActivity
if the Event is place on the boundary of an Activity and the Cancel Activity property is set to true, the Activity execution is cancelled immediately when the Event receives its Escalation object.
MessageRef
ID of the produced Message object
A.8.2.6.2. Catching Message Intermediate Event
When reached on execution, a Catching Message Intermediate Event awaits a Message defined in its properties. Once the Message is received, the Event triggers execution of its outgoing Flow.
Attributes
MessageRef
ID of the expected Message object

A.8.2.7. Escalation Intermediate Event

An Escalation Intermediate Event is an Intermediate Event that allows you to produce or consume an Escalation object. Depending on the action the event element is to perform, you need to use either of the following:
  • Throwing Escalation Intermediate Event produces an Escalation object based on the defined properties
  • Catching Escalation Intermediate Event listens for an Escalation object with the defined properties

A.8.2.8. Escalation Intermediate Event types

A.8.2.8.1. Throwing Escalation Intermediate Event
When reached on execution, a Throwing Escalation Intermediate Event produces an Escalation object and the excecution continues to its outgoing Flow.
Attributes
EscalationCode
ID of the produced Escalation object
A.8.2.8.2. Catching Escalation Intermediate Event
When reached on execution, a Catching Escalation Intermediate Event awaits an Escalation object defined in its properties. Once the object is received, the Event triggers execution of its outgoing Flow.
Attributes
EscalationCode
code of the expected Escalation object
CancelActivity
if the Event is place on the boundary of an Activity and the Cancel Activity property is set to true, the Activity execution is cancelled immediately when the Event receives its Escalation object.

A.8.2.9. Error Intermediate Event

An Error Intermediate Event is an Intermediate Event that can be used only on an Activity boundary. It allows the Process to react to an Error End Event in the respective Activity. The Activity must not be atomic. When the Activity finishes with an Error End Event that produces an Error with the respective ErrorCode, the Error Intermediate Event catches the Error object and execution continues to the outgoing Flow of the Error Intermediate Event.
Attributes
ErrorRef
reference number of the Error object the Event is listening for

A.8.2.10. Error Intermediate Event types

A.8.2.10.1. Throwing Error Intermediate Event
When reached on execution, a Throwing Error Intermediate Event produces an Error object and the excecution continues to its outgoing Flow.
Attributes
ErrorRef
reference number of the produced Error object
A.8.2.10.2. Catching Error Intermediate Event
When reached on execution, a Catching Error Intermediate Event awaits an Error object defined in its properties. Once the object is received, the Event triggers execution of its outgoing Flow.
Attributes
ErrorRef
reference number of the expected Error object
CancelActivity
if the Event is place on the boundary of an Activity and the Cancel Activity property is set to true, the Activity execution is cancelled immediately when the Event receives its Escalation object.

A.8.2.11. Signal Intermediate Event

A Signal Intermediate Event is an Intermediate Event that allows you to produce or consume a Signal object. Depending on the action the event element is to perform, you need to use either of the following:
  • Throwing Signal Intermediate Event produces a Signal object based on the defined properties
  • Catching Signal Intermediate Event listens for a Signal object with the defined properties

A.8.2.12. Signal Intermediate Event types

A.8.2.12.1. Throwing Signal Intermediate Event
When reached on execution, a Throwing Signal Intermediate Event produces a Signal object and the execution continues to its outgoing Flow.
Attributes
SignalRef
The Signal code that is to be sent or consumed
CancelActivity
if the Event is place on the boundary of an Activity and the Cancel Activity property is set to true, the Activity execution is cancelled immediately when the Event receives its Escalation object.
A.8.2.12.2. Catching Signal Intermediate Event
When reached on execution, a Catching Signal Intermediate Event awaits a Signal object defined in its properties. Once the object is received, the Event triggers execution of its outgoing Flow.
Attributes
SignalRef
reference code of the expected Signal object


[3] Business Process Model and Notation (BPMN). Version 2.0, OMG Document Number: formal/2011-01-03 http://www.omg.org/spec/BPMN/2.0