Skip to main content

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​

  1. Parser: Add ParseXxxElement() method in BpmnXmlParser.cs
  2. Definition: Add element type to BpmnTask or BpmnEvent or create new class
  3. Executor: Add case "bpmn:XxxElement" in BpmnExecutionEngine.cs
  4. Invoker: Update response building if needed

Adding New Gateway Types​

  1. Parser: Add to ParseGateways() method
  2. Executor: Add EvaluateXxxGatewayAsync() method
  3. Logic: Implement gateway-specific decision logic