Activities

Event Sub-Process

A sub-process with no incoming/outgoing flows, started by an event (message, error, timer…) occurring while its parent scope runs. Drawn with a dotted border.

The Event Sub-Process is the scope's standing guard: dormant until its start event's trigger occurs anywhere in the surrounding scope, then it runs — interrupting the scope (solid-border start) or in parallel with it (dashed-border start).

It centralizes cross-cutting handling — errors, inquiries, cancellations — that would otherwise clutter the main flow with boundary events everywhere.

When to use and avoid

When to use

  • To handle events that can occur at any moment during the scope: status inquiries, cancellation requests, errors.

  • To keep the happy path clean, concentrating exception handling in one visible place.

  • When the same trigger must be handled identically regardless of where the scope currently is.

When NOT to use

  • When the trigger relates to one activity only — a boundary event on it is more precise.

  • For ordinary sequential structure — embedded sub-process.

  • When no event can actually reach the scope — dead guard.

Business example

A standing handler for status inquiries

Diagrama BPMN: A standing handler for status inquiries
A standing handler for status inquiries

Open this example in the HEFLO process editor and explore the diagram from the inside.

Open in the HEFLO editor →

Step by step

  1. The main claim flow runs normally.
  2. The Event Sub-Process (highlighted, dotted border) sits apart, with no flows connecting it.
  3. Whenever a status inquiry arrives, its non-interrupting message start fires the handler in parallel — the claim work never notices.

Differences

Event Sub-Process vs Boundary Event

A boundary guards one activity; the event sub-process guards the entire scope and carries its own handling flow inside. Scope-wide policies → event sub-process; step-specific reactions → boundary.

FAQ

Which start events can it use?

Typed, catching starts: message, timer, error, escalation, conditional, signal, compensation, multiple — each interrupting or (except error/compensation) non-interrupting.

Why doesn't it have sequence flows to the rest?

By definition — it is activated by its start event, not by tokens flowing in; it lives alongside the flow, not on it.

Related elements