Business Process Model and Notation (BPMN) ist der internationale Standard für die grafische Darstellung von Geschäftsprozessen. BPMN 2.0 bietet eine standardisierte Notation zur Modellierung, Analyse und Optimierung von Business-Workflows.
Was ist BPMN?
BPMN ist eine grafische Notationssprache zur Beschreibung von Geschäftsprozessen. Sie wurde von der Object Management Group (OMG) entwickelt und ist seit 2011 als ISO-Norm 19510 standardisiert.
Kernmerkmale von BPMN
- Standardisierte Notation: Einheitliche Symbole und Regeln
- Grafische Darstellung: Visuelle Prozessmodellierung
- Technologieunabhängig: Plattformübergreifende Anwendung
- Ausführbare Prozesse: Direkte Umsetzung in Workflow-Engines
BPMN Grundelemente
1. Flow Objects (Flussobjekte)
Events (Ereignisse)
Events sind Auslöser oder Ergebnisse in einem Prozess:
<!-- Start Event -->
<bpmn:startEvent id="startEvent" name="Prozess starten"/>
<!-- End Event -->
<bpmn:endEvent id="endEvent" name="Prozess beenden"/>
<!-- Intermediate Event -->
<bpmn:intermediateCatchEvent id="timerEvent" name="Wartezeit">
<bpmn:timerEventDefinition/>
</bpmn:intermediateCatchEvent>
Event-Typen:
- Start Event: Prozessbeginn
- End Event: Prozessende
- Intermediate Event: Zwischenereignisse
Activities (Aktivitäten)
Aktivitäten repräsentieren Arbeitsschritte im Prozess:
<!-- Task -->
<bpmn:task id="task1" name="Daten eingeben"/>
<!-- User Task -->
<bpmn:userTask id="userTask1" name="Genehmigung erforderlich"/>
<!-- Service Task -->
<bpmn:serviceTask id="serviceTask1" name="Automatische Prüfung"/>
<!-- Sub-Process -->
<bpmn:subProcess id="subProcess1" name="Detailprozess">
<bpmn:startEvent id="subStart"/>
<bpmn:task id="subTask1"/>
<bpmn:endEvent id="subEnd"/>
</bpmn:subProcess>
Gateways (Gateways)
Gateways steuern den Prozessfluss:
<!-- Exclusive Gateway (XOR) -->
<bpmn:exclusiveGateway id="gateway1" name="Entscheidung"/>
<!-- Parallel Gateway (AND) -->
<bpmn:parallelGateway id="gateway2" name="Parallelisierung"/>
<!-- Inclusive Gateway (OR) -->
<bpmn:inclusiveGateway id="gateway3" name="Mehrfachauswahl"/>
2. Connecting Objects (Verbindungsobjekte)
Sequence Flows (Sequenzflüsse)
Verbinden Activities und Gateways:
<bpmn:sequenceFlow id="flow1" sourceRef="startEvent" targetRef="task1"/>
<bpmn:sequenceFlow id="flow2" sourceRef="task1" targetRef="gateway1"/>
Message Flows (Nachrichtenflüsse)
Kommunikation zwischen verschiedenen Prozessen:
<bpmn:messageFlow id="msgFlow1" sourceRef="pool1" targetRef="pool2"/>
Associations (Assoziationen)
Verbinden Artifacts mit Flow Objects:
<bpmn:association id="assoc1" sourceRef="dataObject1" targetRef="task1"/>
3. Pools and Lanes
Pools (Schwimmbahnen)
Repräsentieren Teilnehmer im Prozess:
<bpmn:pool id="pool1" name="Abteilung A">
<bpmn:laneSet>
<bpmn:lane id="lane1" name="Mitarbeiter"/>
<bpmn:lane id="lane2" name="Management"/>
</bpmn:laneSet>
</bpmn:pool>
Lanes (Bahnen)
Organisieren Activities innerhalb von Pools:
<bpmn:lane id="lane1" name="Vertrieb">
<bpmn:flowNodeRef>task1</bpmn:flowNodeRef>
<bpmn:flowNodeRef>gateway1</bpmn:flowNodeRef>
</bpmn:lane>
4. Data Objects
Data Objects
Repräsentieren Informationen im Prozess:
<bpmn:dataObject id="data1" name="Kundendaten"/>
<bpmn:dataStoreReference id="store1" name="Datenbank"/>
Praktisches BPMN Beispiel
Bestellprozess Modellierung
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn">
<bpmn:process id="Bestellprozess" isExecutable="false">
<!-- Start Event -->
<bpmn:startEvent id="StartEvent_1" name="Bestellung eingegangen">
<bpmn:outgoing>Flow_1</bpmn:outgoing>
</bpmn:startEvent>
<!-- Task: Bestellung prüfen -->
<bpmn:userTask id="Task_1" name="Bestellung prüfen">
<bpmn:incoming>Flow_1</bpmn:incoming>
<bpmn:outgoing>Flow_2</bpmn:outgoing>
</bpmn:userTask>
<!-- Gateway: Entscheidung -->
<bpmn:exclusiveGateway id="Gateway_1" name="Bestellung gültig?">
<bpmn:incoming>Flow_2</bpmn:incoming>
<bpmn:outgoing>Flow_3</bpmn:outgoing>
<bpmn:outgoing>Flow_4</bpmn:outgoing>
</bpmn:exclusiveGateway>
<!-- Task: Lager prüfen -->
<bpmn:serviceTask id="Task_2" name="Lagerbestand prüfen">
<bpmn:incoming>Flow_3</bpmn:incoming>
<bpmn:outgoing>Flow_5</bpmn:outgoing>
</bpmn:serviceTask>
<!-- Task: Ablehnung -->
<bpmn:userTask id="Task_3" name="Bestellung ablehnen">
<bpmn:incoming>Flow_4</bpmn:incoming>
<bpmn:outgoing>Flow_6</bpmn:outgoing>
</bpmn:userTask>
<!-- End Events -->
<bpmn:endEvent id="EndEvent_1" name="Bestellung bestätigt">
<bpmn:incoming>Flow_5</bpmn:incoming>
</bpmn:endEvent>
<bpmn:endEvent id="EndEvent_2" name="Bestellung abgelehnt">
<bpmn:incoming>Flow_6</bpmn:incoming>
</bpmn:endEvent>
<!-- Sequence Flows -->
<bpmn:sequenceFlow id="Flow_1" sourceRef="StartEvent_1" targetRef="Task_1"/>
<bpmn:sequenceFlow id="Flow_2" sourceRef="Task_1" targetRef="Gateway_1"/>
<bpmn:sequenceFlow id="Flow_3" name="Ja" sourceRef="Gateway_1" targetRef="Task_2"/>
<bpmn:sequenceFlow id="Flow_4" name="Nein" sourceRef="Gateway_1" targetRef="Task_3"/>
<bpmn:sequenceFlow id="Flow_5" sourceRef="Task_2" targetRef="EndEvent_1"/>
<bpmn:sequenceFlow id="Flow_6" sourceRef="Task_3" targetRef="EndEvent_2"/>
</bpmn:process>
</bpmn:definitions>
BPMN Gateway-Typen im Detail
Exclusive Gateway (XOR)
Nur ein Ausgangpfad kann gewählt werden:
// Java Implementierung eines Exclusive Gateway
public class ExclusiveGateway {
private Map<String, String> conditions;
public String evaluateCondition(Map<String, Object> context) {
for (Map.Entry<String, String> condition : conditions.entrySet()) {
if (evaluateExpression(condition.getKey(), context)) {
return condition.getValue();
}
}
return null; // Default Path
}
private boolean evaluateExpression(String expression, Map<String, Object> context) {
// Implementierung der Bedingungsauswertung
return context.containsKey(expression) && (Boolean) context.get(expression);
}
}
Parallel Gateway (AND)
Alle Ausgangspfade werden gleichzeitig aktiviert:
// Java Implementierung eines Parallel Gateway
public class ParallelGateway {
private List<String> outgoingFlows;
private List<String> incomingFlows;
public List<String> execute() {
if (allIncomingFlowsCompleted()) {
return new ArrayList<>(outgoingFlows);
}
return Collections.emptyList();
}
private boolean allIncomingFlowsCompleted() {
// Prüfung ob alle eingehenden Flüsse abgeschlossen sind
return true; // Vereinfachte Implementierung
}
}
Inclusive Gateway (OR)
Mehrere Ausgangspfade können gewählt werden:
// Java Implementierung eines Inclusive Gateway
public class InclusiveGateway {
private List<ConditionFlow> conditionFlows;
public List<String> evaluateConditions(Map<String, Object> context) {
List<String> activeFlows = new ArrayList<>();
for (ConditionFlow conditionFlow : conditionFlows) {
if (conditionFlow.evaluate(context)) {
activeFlows.add(conditionFlow.getTargetId());
}
}
return activeFlows;
}
}
BPMN Events und Event-Typen
Timer Events
Zeitgesteuerte Prozesse:
<bpmn:intermediateCatchEvent id="timerEvent" name="Wartezeit">
<bpmn:timerEventDefinition>
<bpmn:timeDuration>P2DT3H4M</bpmn:timeDuration> <!-- 2 Tage, 3 Stunden, 4 Minuten -->
</bpmn:timerEventDefinition>
</bpmn:intermediateCatchEvent>
Message Events
Nachrichtengesteuerte Kommunikation:
<bpmn:intermediateCatchEvent id="messageEvent" name="Nachricht empfangen">
<bpmn:messageEventDefinition messageRef="message1"/>
</bpmn:intermediateCatchEvent>
Error Events
Fehlerbehandlung in Prozessen:
<bpmn:boundaryEvent id="errorBoundary" attachedToRef="task1">
<bpmn:errorEventDefinition errorRef="error1"/>
</bpmn:boundaryEvent>
BPMN mit Camunda implementieren
Prozessdeployment
// Camunda BPMN Prozessdeployment
@Service
public class ProcessDeploymentService {
@Autowired
private RepositoryService repositoryService;
public void deployProcess(String processName, String bpmnFile) {
try (InputStream inputStream = getClass().getResourceAsStream(bpmnFile)) {
Deployment deployment = repositoryService.createDeployment()
.addClassnameResource(processName + ".class")
.addInputStream(processName + ".bpmn", inputStream)
.deploy();
System.out.println("Prozess deployed: " + deployment.getId());
} catch (IOException e) {
throw new RuntimeException("Fehler beim Deployment", e);
}
}
}
Prozessinstanz starten
// Camunda Prozessinstanz starten
@Service
public class ProcessInstanceService {
@Autowired
private RuntimeService runtimeService;
public String startProcess(String processKey, Map<String, Object> variables) {
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(
processKey,
variables
);
return processInstance.getId();
}
public List<Task> getUserTasks(String processInstanceId) {
return taskService.createTaskQuery()
.processInstanceId(processInstanceId)
.list();
}
}
Task Handler
// Camunda Task Handler
@Component
public class OrderTaskHandler {
@EventListener
public void handleTaskCreated(TaskCreatedEvent event) {
String taskId = event.getTaskId();
String taskName = event.getTaskName();
if ("Bestellung prüfen".equals(taskName)) {
processOrderTask(taskId);
}
}
private void processOrderTask(String taskId) {
// Business Logik für Bestellprüfung
Map<String, Object> variables = new HashMap<>();
variables.put("orderValid", true);
variables.put("orderAmount", 1000.0);
taskService.complete(taskId, variables);
}
}
BPMN Best Practices
1. Prozessmodellierung Richtlinien
// BPMN Validierungsregeln
public class BPMNValidator {
public ValidationResult validateProcess(Process process) {
ValidationResult result = new ValidationResult();
// Jeder Prozess muss ein Start Event haben
if (!hasStartEvent(process)) {
result.addError("Prozess benötigt mindestens ein Start Event");
}
// Jeder Prozess muss ein End Event haben
if (!hasEndEvent(process)) {
result.addError("Prozess benötigt mindestens ein End Event");
}
// Alle Tasks müssen verbunden sein
if (hasDisconnectedTasks(process)) {
result.addError("Es existieren nicht verbundene Tasks");
}
return result;
}
private boolean hasStartEvent(Process process) {
return process.getFlowElements().stream()
.anyMatch(element -> element instanceof StartEvent);
}
private boolean hasEndEvent(Process process) {
return process.getFlowElements().stream()
.anyMatch(element -> element instanceof EndEvent);
}
}
2. Namenskonventionen
<!-- Gute Namenskonventionen -->
<bpmn:userTask id="checkOrderTask" name="Bestellung prüfen"/>
<bpmn:exclusiveGateway id="isValidGateway" name="Bestellung gültig?"/>
<bpmn:serviceTask id="sendEmailTask" name="Bestätigung senden"/>
<!-- Schlechte Namenskonventionen -->
<bpmn:userTask id="task1" name="Task 1"/>
<bpmn:exclusiveGateway id="gw1" name="Gateway"/>
3. Prozessoptimierung
// Prozessperformance Analyse
@Service
public class ProcessAnalyticsService {
@Autowired
private HistoryService historyService;
public ProcessMetrics analyzeProcess(String processDefinitionKey) {
List<HistoricProcessInstance> instances = historyService
.createHistoricProcessInstanceQuery()
.processDefinitionKey(processDefinitionKey)
.finished()
.list();
ProcessMetrics metrics = new ProcessMetrics();
metrics.setTotalInstances(instances.size());
metrics.setAverageDuration(calculateAverageDuration(instances));
metrics.setSuccessRate(calculateSuccessRate(instances));
return metrics;
}
private Duration calculateAverageDuration(List<HistoricProcessInstance> instances) {
return instances.stream()
.map(instance -> Duration.between(
instance.getStartTime(),
instance.getEndTime()
))
.reduce(Duration.ZERO, Duration::plus)
.dividedBy(instances.size());
}
}
BPMN Tools und Frameworks
1. Camunda Modeler
// Camunda Modeler Plugin Beispiel
const customPlugin = {
id: 'custom-validation-plugin',
init: function(modeler) {
// Custom Validation Rule
modeler.get('validationRules').add('task-name-required', function(element) {
if (element.type === 'bpmn:Task' && !element.name) {
return 'Task muss einen Namen haben';
}
});
// Custom Property Panel
modeler.get('propertiesPanel').registerProvider({
getTabs: function(element) {
if (element.type === 'bpmn:UserTask') {
return {
'custom-task-tab': {
label: 'Custom Task Properties',
entries: [
{
id: 'task-priority',
label: 'Priority',
component: 'textfield',
bindTo: 'customPriority'
}
]
}
};
}
}
});
}
};
2. BPMN.js Integration
// BPMN.js Viewer Integration
import BpmnViewer from 'bpmn-js/lib/Viewer';
class BPMNViewer {
constructor(container) {
this.viewer = new BpmnViewer({
container: container,
width: '100%',
height: '500px'
});
}
async loadDiagram(xml) {
try {
await this.viewer.importXML(xml);
// Zoom to fit
const canvas = this.viewer.get('canvas');
canvas.zoom('fit-viewport');
} catch (err) {
console.error('Error loading BPMN diagram:', err);
}
}
addClickListener(callback) {
this.viewer.on('element.click', function(event) {
const element = event.element;
callback(element);
});
}
}
// Verwendung
const viewer = new BPMNViewer('#bpmn-container');
viewer.loadDiagram(bpmnXml);
viewer.addClickListener((element) => {
console.log('Clicked element:', element.id, element.name);
});
BPMN in der Praxis
E-Commerce Bestellprozess
<!-- Komplexer Bestellprozess mit mehreren Teilnehmern -->
<bpmn:definitions>
<!-- Pool: Kunde -->
<bpmn:pool id="customerPool" name="Kunde">
<bpmn:lane id="customerLane" name="Kunde">
<bpmn:userTask id="placeOrder" name="Bestellung aufgeben"/>
<bpmn:userTask id="makePayment" name="Zahlung durchführen"/>
</bpmn:lane>
</bpmn:pool>
<!-- Pool: Shop-System -->
<bpmn:pool id="shopPool" name="Shop-System">
<bpmn:lane id="orderLane" name="Bestellabwicklung">
<bpmn:serviceTask id="validateOrder" name="Bestellung validieren"/>
<bpmn:serviceTask id="checkInventory" name="Lagerbestand prüfen"/>
<bpmn:userTask id="processPayment" name="Zahlung verarbeiten"/>
</bpmn:lane>
<bpmn:lane id="warehouseLane" name="Lager">
<bpmn:userTask id="pickItems" name="Artikel kommissionieren"/>
<bpmn:userTask id="packageItems" name="Verpacken"/>
</bpmn:lane>
</bpmn:pool>
<!-- Pool: Lieferdienst -->
<bpmn:pool id="deliveryPool" name="Lieferdienst">
<bpmn:lane id="deliveryLane" name="Zustellung">
<bpmn:serviceTask id="scheduleDelivery" name="Lieferung planen"/>
<bpmn:userTask id="deliverPackage" name="Paket zustellen"/>
</bpmn:lane>
</bpmn:pool>
<!-- Message Flows zwischen Pools -->
<bpmn:messageFlow id="orderMessage" sourceRef="placeOrder" targetRef="validateOrder"/>
<bpmn:messageFlow id="paymentMessage" sourceRef="makePayment" targetRef="processPayment"/>
<bpmn:messageFlow id="deliveryMessage" sourceRef="packageItems" targetRef="scheduleDelivery"/>
</bpmn:definitions>
Genehmigungsprozess
// Genehmigungsprozess mit Eskalation
@Service
public class ApprovalProcessService {
public String startApprovalProcess(ApprovalRequest request) {
Map<String, Object> variables = new HashMap<>();
variables.put("requestId", request.getId());
variables.put("amount", request.getAmount());
variables.put("requester", request.getRequester());
variables.put("approvalLevel", determineApprovalLevel(request.getAmount()));
return runtimeService.startProcessInstanceByKey(
"approval-process",
variables
).getId();
}
private String determineApprovalLevel(Double amount) {
if (amount < 1000) return "manager";
if (amount < 10000) return "director";
return "executive";
}
@EventListener
public void handleEscalation(TaskEscalationEvent event) {
String taskId = event.getTaskId();
String escalationLevel = event.getEscalationLevel();
// Eskalation an höhere Ebene weiterleiten
Map<String, Object> escalationVariables = new HashMap<>();
escalationVariables.put("escalatedFrom", taskId);
escalationVariables.put("escalationReason", event.getReason());
taskService.delegateTask(taskId, escalateLevel + "_approval");
}
}
BPMN Prüfungsvorbereitung
Wichtige Prüfungsthemen
- BPMN Grundelemente: Events, Activities, Gateways
- Flow Objects: Verschiedene Typen und deren Anwendung
- Connecting Objects: Sequence Flows, Message Flows, Associations
- Pools und Lanes: Prozessorganisation und Verantwortlichkeiten
- Gateway-Typen: Exclusive, Parallel, Inclusive, Complex
- Event-Typen: Start, End, Intermediate Events
- Sub-Processes: Embedded und Call Activities
- Data Objects: Repräsentation von Informationen
Typische Prüfungsaufgaben
- Prozessanalyse: Gegebene BPMN-Diagramme interpretieren
- Prozessmodellierung: Geschäftsprozesse in BPMN darstellen
- Gateway-Anwendung: Richtige Auswahl von Gateway-Typen
- Event-Handling: Ereignisgesteuerte Prozesse modellieren
- Prozessoptimierung: Ineffizienzen in BPMN-Prozessen identifizieren
Prüfungsrelevante Konzepte
// Prüfungsrelevante BPMN-Konzepte
public class BPMNExamConcepts {
// 1. Prozesspfade und Gateway-Logik
public void demonstrateGatewayLogic() {
// Exclusive Gateway: Nur ein Pfad
// Parallel Gateway: Alle Pfade gleichzeitig
// Inclusive Gateway: Mehrere Pfade möglich
}
// 2. Event-basierte Prozesssteuerung
public void demonstrateEventHandling() {
// Start Events initiieren Prozesse
// Intermediate Events steuern Prozessfluss
// End Events beenden Prozesse
}
// 3. Datenfluss in BPMN
public void demonstrateDataFlow() {
// Data Objects repräsentieren Informationen
// Data Stores für persistente Daten
// Associations verbinden Daten mit Activities
}
}
Zusammenfassung
BPMN ist ein leistungsfähiges Standardwerkzeug für die Prozessmodellierung, das:
- Standardisierung einheitliche Prozessdarstellung ermöglicht
- Visualisierung komplexe Geschäftsprozesse verständlich macht
- Automatisierung direkte Umsetzung in Workflow-Systeme unterstützt
- Kollaboration gemeinsame Prozessentwicklung fördert
- Optimierung systematische Prozessverbesserung ermöglicht
Die Beherrschung von BPMN ist für IT-Professionals und Business-Analysten unerlässlich, um moderne Geschäftsprozesse effektiv zu modellieren, analysieren und automatisieren.
Weiterführende Ressourcen:

