BPMN Engine Architecture
This document describes the architecture of the BankLingo BPMN Process Engine.
System Overview​
Component Architecture​
Core Components​
Execution Flow​
Process Start to Completion​
Signal/Resume Flow​
Data Flow Architecture​
WorkflowData Preparation (UserTask)​
Element Parsing​
Supported BPMN Elements​
State Management​
Process State Lifecycle​
Security & Scoping​
WorkflowData Scoping​
Gateway Evaluation​
Exclusive Gateway Decision Logic​
Key Design Decisions​
1. Intermediate Events as End Points​
Decision: IntermediateThrowEvent with no outgoing flows acts as end event
Rationale:
- BPMN 2.0 compliant
- Semantic clarity (explicit termination vs natural completion)
- Visual distinction in diagrams
- Future extensibility (can add signal/message definitions)
2. Script Property Dual-Purpose​
Decision: Single Script property for both ScriptTask execution and UserTask form preparation
Benefits:
- Simpler API (no ServerScript + Script)
- Same property name across all task types
- Execution context automatically correct
3. WorkflowData Scoping​
Decision: Three-tier security approach (Script → FormVariables → Empty)
Security Benefits:
- Prevents accidental data exposure
- Explicit opt-in for data sharing
- Developer controls what frontend receives
Performance Considerations​
Execution Loop Protection​
Default: maxIterations = 1000
Extension Points​
Adding New BPMN Elements​
- Parser: Add
ParseXxxElement()method inBpmnXmlParser.cs - Definition: Add element type to
BpmnTaskorBpmnEventor create new class - Executor: Add
case "bpmn:XxxElement"inBpmnExecutionEngine.cs - Invoker: Update response building if needed
Adding New Gateway Types​
- Parser: Add to
ParseGateways()method - Executor: Add
EvaluateXxxGatewayAsync()method - Logic: Implement gateway-specific decision logic