Lesmateriaal · OFL-1.1

BPMN 2.0-referentie

Deelnemers

Pool
Participant
Lane
Lane

Pool

Container voor een proces. Een deelnemer in een interactie. Pools wisselen alleen gegevens uit via message flows. Kan worden ingeklapt om details te verbergen.

Pool met lanes: orkestratiemodel
Pool als “dirigent”: één coördinerend proces verdeelt taken over de deelnemers
Collaboration: twee pools wisselen berichten uit
Collaboration: onafhankelijke pools (klant en pizzeria) verbonden door message flows

Lane

Een baan binnen een pool die laat zien wie de taken uitvoert (een functie, rol, afdeling of IT-systeem).

Lanes: taken verdeeld over rollen
Lanes binnen de pool “gedeeld appartement” — taken verdeeld over de huisgenoten (Christian, Falko, Robert); een XOR gateway bepaalt wat er wordt gekookt

Activiteiten

Task-typen

Abstract
Task (None)
Manual
Manual
User
User Task
Send
Send Task
Receive
Receive Task
Script
Script Task
Service
Service Task
Business Rule
Business Rule

Abstract (None Task)

Het type is niet gespecificeerd. Gebruikt bij vroege modellering wanneer de uitvoeringswijze nog niet is bepaald, of wanneer die niet relevant is voor het doel van het diagram. In feite een tijdelijke aanduiding die later wordt verfijnd tot een concreet type.

User Task

Uitgevoerd door een mens via een software-interface: een CRM-formulier, een scherm in een webapp, een item in een taakbeheerder. Het belangrijkste verschil met een manual task is dat de persoon binnen het systeem werkt dat de status van de taak bijhoudt.

Voorbeelden: een aanvraag goedkeuren in het systeem, een formulier invullen, een document beoordelen in een selfserviceportaal.

Manual Task

Uitgevoerd door een mens zonder tussenkomst van de BPM-engine. Het systeem kan niet automatisch detecteren wanneer dit werk begint of eindigt.

Voorbeelden: een document fysiek ondertekenen, een klant bellen, een fysieke vergadering houden, een pakket per koerier bezorgen.

Service Task

Automatisch uitgevoerd door een programma of service. Er komt geen mens aan te pas. Het meest voorkomende task-type in uitvoerbare processen.

Voorbeelden: een HTTP-verzoek aan een API, een schrijfbewerking naar een database, een microservice-aanroep, een berekening uitvoeren.

Send Task

Stuurt een bericht naar een specifieke externe deelnemer (een ander proces of systeem) en eindigt direct, zonder op een antwoord te wachten. Een fire-and-forget-patroon.

Voorbeelden: een e-mail naar een klant sturen, een event publiceren op een message queue, een melding versturen via webhook.

Receive Task

Wacht op een inkomend bericht van een externe deelnemer. Het proces pauzeert bij deze taak totdat het bericht binnenkomt.

Een speciale variant is de instantiërende Receive: als zo'n taak de eerste stap in een proces is, start de ontvangst van het bericht zelf een nieuwe procesinstantie (een alternatief voor een message start event).

Voorbeelden: wachten op het antwoord van een tegenpartij, wachten op een callback van een betaalprovider, wachten op een leverbevestiging.

Script Task

Voert een ingebed script (code) uit dat rechtstreeks in het procesmodel is gedefinieerd. Anders dan een service task roept de code geen extern systeem aan — het draait binnen de BPM-engine.

Voorbeelden: een dataformaat converteren, een deadline berekenen, een tekst voor een e-mail opbouwen, een voorwaarde controleren.

Business Rule Task

Roept een beslisengine aan (bijv. een DMN-tabel). Invoer wordt door een set regels gehaald en er wordt een beslissing teruggegeven.

Voorbeelden: een korting bepalen op basis van klantsegment, een verzekeringspremie berekenen, een aanvraag toetsen aan beleid, een aanvraag classificeren.
Alle BPMN-task-typen in één diagram
Overzicht van alle task-typen: abstract, manual, user, receive, send, script, service, business rule

Task markers

Kleine iconen onderaan in het midden van een taakrechthoek. Ze geven het gedrag van de taak aan — niet het type.

Loop
Loop
Multi-inst. ∥
Parallel MI
Multi-inst. ≡
Sequential MI
Compensation
Compensation
Ad-hoc ~
Ad-hoc
Subprocess +
Subprocess
MarkerBetekenisVoorbeeld
↻ LoopDe taak herhaalt zolang een voorwaarde geldt (één instantie, meerdere iteraties)Een document herzien → indienen → bij afwijzing opnieuw
∥ Parallelle multi-instanceN instanties starten tegelijk — één per item in de verzamelingDe melding tegelijk naar elke goedkeurder sturen
≡ Sequentiële multi-instanceDezelfde N instanties, maar na elkaarElke kandidaat om de beurt interviewen
⏪ CompensationEen rollback-taak: draait alleen wanneer compensatie wordt getriggerd, om een reeds voltooide actie ongedaan te maken“Boeking annuleren” nadat “Hotel boeken” al is voltooid
~ Ad-hocTaken binnen het subproces draaien in willekeurige volgorde, kunnen worden herhaald of overgeslagen; start- en end events zijn binnenin niet toegestaanVrije keuze van stappen tijdens een klantgesprek
+ SubprocessEen samengestelde activiteit met een verborgen interne volgorde; flows kunnen de grens niet overschrijden“Orderverwerking” verbergt 10 interne stappen
Loop marker op een taak
Loop marker (↻): de taak herhaalt totdat aan een voorwaarde is voldaan
Multi-instance marker op een taak
Parallelle multi-instance (∥): “pizza kiezen” draait tegelijk één instantie per huisgenoot
Compensation marker op een taak
Compensation marker (⏪): een rollback-taak die draait wanneer een voltooide actie ongedaan wordt gemaakt

Subprocess

Een samengestelde activiteit gemarkeerd met “+”. Bevat een eigen reeks stappen. Flows kunnen de grens niet overschrijden. Intermediate events hechten aan de rand.

Subproces: verborgen complexiteit
Een subproces kapselt de interne volgorde in — van buitenaf is alleen de “+”-marker zichtbaar

Call Activity

Dikke rand. Verwijst naar een globaal subproces (bijv. “Inkoop”) dat in verschillende processen wordt hergebruikt.

Verschil met een ingebed subproces: in een ingebed subproces zijn gegevens direct toegankelijk (gedeelde scope met het bovenliggende proces). Een Call Activity is een apart proces — de invoer en uitvoer vereisen expliciete data-mapping: wat we bij de aanroep meegeven en wat we bij terugkeer teruglezen.
Call Activity: een gedeeld subproces dat in meerdere processen wordt hergebruikt
Call Activity: één globaal subproces “Artikel inkopen” (dikke rand) wordt aangeroepen vanuit zowel “Orderverwerking” als “Voorraadbeheer”

Ad-hoc-subproces

Marker “~”. Activiteiten binnenin mogen in willekeurige volgorde draaien, herhaald of overgeslagen worden. Start-/end events zijn binnenin niet toegestaan.

Ad-hoc-subproces: taken in willekeurige volgorde
Ad-hoc (~): taken binnenin draaien in willekeurige volgorde en mogen herhaald worden

Event-subproces

Gestreepte rand binnen een proces. Getriggerd door een start event terwijl het bovenliggende proces actief is. Onderbrekend — annuleert het bovenliggende proces. Niet-onderbrekend — draait parallel.

Event-subproces
Event-subproces (gestreepte rand): getriggerd door een event binnen het actieve bovenliggende proces

Gateways

Regelen splitsen en samenvoegen. Een gateway is geen taak! De beslissing wordt vóór de gateway genomen.

Exclusive XOR
Of/of
Parallel AND
En/en
Inclusive OR
Eén of meer
Event-based
Event-based
Complex
Complex
None
None

Exclusive (XOR) Gateway

De meest voorkomende gateway. Bij het splitsen activeert hij precies één uitgaand pad — het pad waarvan de voorwaarde als eerste waar is. Als geen enkele voorwaarde geldt, loopt het proces vast met een fout (het is dus goede praktijk om altijd een “default”-tak te definiëren). Bij het samenvoegen laat hij elke binnenkomende token direct door, zonder op de andere te wachten.

Analogie: een splitsing in de weg waar je maar één kant op rijdt.

Voorbeelden: “Is de order betaald? → Ja / Nee”, “Is het bedrag > 10.000? → Ja / Nee”.
Tip: formuleer de vraag vóór de gateway en zet de antwoordopties op de uitgaande pijlen.
Exclusive (XOR) gateway — voorbeeld
XOR gateway: “welk gerecht?” → kies één recept uit meerdere (slechts één pad wordt geactiveerd)

Parallel (AND) Gateway

Bij het splitsen activeert hij alle uitgaande paden tegelijk, onvoorwaardelijk — zonder controles. Bij het samenvoegen wacht hij op tokens op alle binnenkomende paden en pas wanneer ze allemaal zijn aangekomen, geeft hij één enkele token door.

Analogie: een manager verdeelt taken over vijf medewerkers en wacht tot alle vijf klaar zijn.

Voorbeelden: de goederen verzenden en de factuur opstellen tegelijk; verschillende afdelingen die documenten tegelijk beoordelen.
Antipatroon: voeg takken niet samen met AND als ze door XOR zijn gesplitst of als er altijd maar één van wordt gevolgd. AND wacht eeuwig op tokens op alle invoeren — het proces loopt vast (deadlock). Voeg na een XOR samen met een XOR (of een leeg ruitje).
Parallel (AND) gateway — voorbeeld
AND gateway: alle takken starten parallel en worden bij het samenvoegen gesynchroniseerd (we wachten op allemaal)

Inclusive (OR) Gateway

Een hybride van XOR en AND. Bij het splitsen activeert hij één of meer paden afhankelijk van de voorwaarden — elke voorwaarde wordt onafhankelijk geëvalueerd. Bij het samenvoegen wacht hij alleen op tokens op de paden die daadwerkelijk zijn geactiveerd (niet op allemaal, zoals AND doet).

Analogie: een buffet — je neemt één gerecht, twee of alles, maar nooit niets.

Voorbeelden: de klant koos bezorging en/of afhalen en/of cadeauverpakking — voer de gekozen opties uit en wacht tot ze allemaal klaar zijn.
Let op: OR gateways zijn lastiger te analyseren. In vertakte diagrammen kunnen de synchronisatieregels ondoorzichtig zijn. Niet elke engine ondersteunt ze correct.
Inclusive (OR) gateway — voorbeeld
OR gateway: één of meer paden worden geactiveerd afhankelijk van de voorwaarden; het samenvoegen wacht alleen op de takken die daadwerkelijk zijn gevolgd

Event-based Gateway

Fundamenteel anders dan de rest: hij routeert niet op basis van data, maar op basis van welk event het eerst binnenkomt. Na de gateway plaats je intermediate wachtende events (timer, message, conditional, signal). Zodra er één afgaat, worden de andere geannuleerd.

Analogie: je hebt een pizza besteld — als die na 60 minuten niet is bezorgd, bel je de pizzeria; komt hij eerder, dan eet je.

Voorbeelden: wachten op betaling met een timer (niet betaald binnen 3 dagen → order annuleren); wachten op het antwoord van de klant of op een deadline.
Event-based gateway — voorbeeld
Event-based gateway: routeert op basis van welk event het eerst binnenkomt (timer vs. message)

Complex Gateway

Gebruikt wanneer de vertakkingslogica niet met standaard gateways uit te drukken is. De samenvoegvoorwaarde wordt bepaald door een expressie (bijvoorbeeld “ga verder wanneer 3 van de 5 takken klaar zijn” of “wanneer het eerste antwoord binnen is en 10 minuten zijn verstreken”).

In de praktijk: zelden gebruikt en niet elke BPM-engine ondersteunt het. Als een combinatie van XOR / AND / OR volstaat, kies dan daarvoor.

None (Default Exclusive)

Een ruit zonder marker. Semantisch gelijk aan een exclusive (XOR) gateway — de BPMN-standaard staat toe het kruis weg te laten. Sommige methodologen vinden dit slechte praktijk omdat het de leesbaarheid schaadt: het is onduidelijk of de auteur de marker vergat of bewust voor XOR koos.

Events

Kernbegrippen

Een event is iets dat gebeurt (een feit), in tegenstelling tot een taak (een actieve handeling). Getekend als cirkels.

Start
Dunne cirkel
Intermediate
Dubbele cirkel
End
Dikke cirkel

Catching (niet-gevulde marker) — wachten. Throwing (gevuld) — werpen. Boundary events: onderbrekend (doorgetrokken) en niet-onderbrekend (gestreept).

Overzichtstabel events

Iconen uit bpmn-font (Camunda). “—” = niet gedefinieerd door de standaard.

TypeStartIntermediateEnd
NormaalEvent-subpr.Niet-onderbr.CatchBoundaryBoundary niet-onderbr.Throw
None
✉ Message
⏱ Timer
⚡ Error
▲ Signal
📋 Conditional
↗ Escalation
⬤ Terminate
⏪ Compensation
✖ Cancel
➡ Link
⬠ Multiple
➕ Parallel mult.

Message

Uitwisseling met een specifieke ontvanger: e-mail, telefoontje, HTTP, push. Beschikbaar in elke positie.

Message event — voorbeeld
Message event: het versturen van een pizzabestelling als throwing event triggert het proces aan de ontvangerskant

Timer

Datum/tijd, interval, aftelling (deadline). Alleen catching.

Timer event — voorbeeld
Timer: start (volgens planning uitvoeren), onderbrekende boundary (deadline), niet-onderbrekende boundary (herinnering)

Error

Een ernstige fout. Catching — alleen op een boundary. Throwing — alleen aan het einde.

Error event — voorbeeld
Een boundary error event op het subproces “Artikel inkopen”: bij een fout gaat de flow naar de handler “inkoopfout afhandelen”; het happy path gaat verder met het betalen van de factuur

Conditional

Wachten op een externe voorwaarde (“de oven is heet”). Alleen catching.

Conditional event — voorbeeld
Conditional: het proces wacht tot externe voorwaarden gelden — de pizza gaat pas de oven in als die 180° bereikt, en gaat er pas uit als hij gaar is

Signal

Broadcast (tegenover een geadresseerd bericht). Elke abonnee reageert.

Signal event — voorbeeld
Signal: een pizzareclame op tv start het proces via een signal start; na aankoop krijgt men trek (een voorwaarde), daarna wordt de pizza opgegeten; het signal end verspreidt de beoordeling naar pizzatest.de

Terminate

Stopt onmiddellijk de volledige procesinstantie. Alleen als end.

Parallel proces met gewone end events
Zonder Terminate: na de AND-splitsing draaien tokens parallel. Taak 2 duurt 45 minuten, taak 3 duurt 30; de instantie eindigt na 55 minuten, wanneer beide tokens zijn verbruikt door hun gewone (none) end events.

Wat als het niet langer zinvol is om taak 2 voort te zetten nadat taak 3 klaar is? Dan wordt het onderstaande patroon gebruikt:

Hetzelfde proces met een Terminate end event
Met Terminate: na taak 3 wordt de voorwaarde “is taak 2 nog nodig?” gecontroleerd. Zo niet — dan gaat de flow naar een Terminate event dat direct elke resterende token van de instantie verbruikt (inclusief de nog lopende taak 2). Terminate is alleen geldig als end event.
Link event — voorbeeld
Link event: een “teleport” — throwing werpt de flow eruit, catching pikt hem op, ter vervanging van een lange kruisende pijl

Compensation

Draait een eerder voltooide actie terug. De compenserende taak is gekoppeld via een associatie.

Compensation event — voorbeeld
Compensation: een boundary event (omlijnde ⏪) op een voltooide taak triggert via een associatie de bijbehorende compensatie-handler

Escalation

Verzonden vanuit een subproces naar het bovenliggende proces — geen fout. Kan niet-onderbrekend zijn.

Escalation event — voorbeeld
Escalation: het subproces “Bezorging” werpt “te laat”; het bovenliggende proces vangt dit met een niet-onderbrekende boundary escalation en informeert parallel de klant — de hoofdflow gaat door

Cancel

Alleen in de context van transacties. End — rollback. Boundary — catch.

Data, artefacten, flows

Data Object
Data Object
Data Store
Data Store
Data Input
Data Input
Data Output
Data Output
Annotation
Text Annotation
Group
Group
Flow
Sequence Flow
Message flow
Message Flow
Conditional
Conditional Flow
Default
Default Flow
Transaction
Transaction

Data Object

Een “vel papier” met een omgevouwen hoek. Vertegenwoordigt informatie die wordt aangemaakt, verbruikt of doorgegeven tussen taken binnen een procesinstantie. Bestaat alleen zolang de instantie leeft.

Voorbeelden: een klantaanvraag, een conceptcontract, een rapport dat gaandeweg wordt samengesteld.

Data Store

Een cilinder. Persistente opslag die de procesinstantie overleeft: een database, een register, een bestandsopslag. Taken lezen eruit en schrijven erin.

Voorbeelden: CRM, ERP, orderdatabase, documentarchief.

Data Input / Data Output

Parameters van een proces of subproces op de grens. Input — wat van buitenaf wordt aangeleverd; output — wat wordt teruggegeven. Pijl met een open/gevulde driehoek.

Voorbeelden: het subproces “Inkoop” neemt een lijst met artikelen als input en geeft een factuur als output terug.

Text Annotation

Een opmerking die via een gestreepte lijn aan een willekeurig element wordt gekoppeld. Beïnvloedt de uitvoering niet — het dient alleen om zaken voor de lezer van het diagram te verduidelijken.

Group

Een gestreepte afgeronde rechthoek. Een visuele groepering van elementen (bijv. “alle logistieke taken”). Heeft geen uitvoeringssemantiek; flows mogen de grens vrij overschrijden.

Sequence Flow

Een doorgetrokken pijl met een gevulde punt. Bepaalt de uitvoeringsvolgorde binnen één pool. Kan poolgrenzen niet overschrijden.

Een conditional flow (met een klein ruitje bij de bron) — gaat alleen af als de voorwaarde waar is. Gebruikt op uitgaande pijlen van een taak zonder gateway.

Een default flow (met een streepje bij de bron) — het terugvalpad van een XOR/OR gateway of een conditionele splitsing, gevolgd als geen andere voorwaarde geldt.

Message Flow

Een gestreepte pijl met een open punt. Verbindt verschillende pools — een bericht dat tussen onafhankelijke deelnemers wordt uitgewisseld. Niet gebruikt binnen één pool.

Voorbeelden: de klant stuurt een order naar de pizzeria; de bank stuurt een betaalbevestiging.

Transaction

Een subproces met een dubbele rand. ACID-semantiek: ofwel elke interne actie commit succesvol, ofwel de hele transactie wordt teruggedraaid via een Cancel event (met compensaties). Gebruikt voor consistentie bij gedistribueerde operaties.

Voorbeelden: het boeken van een pakket “vlucht + hotel + auto” — als een stap mislukt, wordt de hele boeking geannuleerd.

Klaar om te proberen?

Maak gratis je eerste BPMN-diagram — geen registratie of creditcard nodig.

Genereer BPMN-flowcharts met AI
Voorbeelden overgenomen van camunda.com. Samengesteld door BP1.AI.