BPMN Grundlagen: Business Process Model and Notation
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: