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