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