连接与数据:SequenceFlow、MessageFlow与数据对象

在BPMN中,流程对象(事件、任务、网关)需要通过连接对象来组织成一个完整的流程。本文讲解顺序流、消息流、数据对象及其语义,这些是建模的”血管“

连接对象的三大类型

1. 顺序流(Sequence Flow)

含义:表示流程执行的先后顺序,仅在同一池内使用。

特点

  • 箭头形式,从一个对象指向另一个
  • 控制流的运行方向与执行序列
  • 可附加条件表达式(如金额 > 1000)
  • 从网关出发的顺序流通常带条件

符号

顺序流(同池内)

标注说明

  • 无标注:无条件执行
  • 标注条件:[condition][金额 > 1000]
  • 标注”默认”:当其他条件都不满足时,流向此边

伪代码示意

1
2
3
4
5
6
7
8
9
10
// 顺序流的逻辑
node.on('complete', () => {
// 无条件流向下一个节点
moveToNextNode(targetNode);
});

// 带条件的顺序流(从网关出发)
if (evaluateCondition(sequenceFlow.condition)) {
moveToNextNode(sequenceFlow.target);
}

2. 消息流(Message Flow)

含义:表示跨池的异步通信,流程对象之间的消息传递。

特点

  • 仅连接不同池的对象
  • 代表异步消息,非流程执行顺序
  • 通常与事件配合(消息启动事件、消息中间事件等)
  • 不能直接”触发”后续活动,需要接收方通过事件来响应

符号

消息流(跨池异步)

标注说明

  • 消息名称:如 订单确认信息支付成功通知

消息流 vs 顺序流的核心区别

1
2
3
4
5
6
7
顺序流(同池内):
销售部门:[提交订单] → [通知] → 完成

消息流(跨池):
销售部门:[提交订单] ⟿ 消息(订单)⟿ 财务部门

财务部门:[等待订单消息] → 接收后执行 → ...

3. 数据关联(Association)

含义:连接数据对象与活动,表示数据的输入/输出。

特点

  • 仅用于关联数据对象,不控制流程执行
  • 可标注”输入”或”输出”方向
  • 帮助理解数据流动

符号

数据关联(点线箭头)

数据对象(Data Objects)

概念

数据对象代表流程中被创建、修改或使用的信息

分类

  • 数据对象(Data Object):过程中产生的数据(如订单、发票)
  • 数据存储(Data Store):持久化数据源(如数据库、文件)
  • 数据输入/输出:流程与外部的数据交换

符号

数据对象(纸张折角) 数据存储(数据库桶)

小案例:数据流动

1
2
3
4
5
6
7
8
9
[创建订单] 
↓(产生数据)
[订单] ← 数据对象
↓(关联输入)
[验证订单] ← 输入数据关联
↓(产生/更新数据)
[订单] 更新为"已验证"

[数据存储:订单库] ← 保存关联

伪代码示意

1
2
3
4
5
6
7
8
9
10
11
// 创建订单(产生数据)
const order = createOrder(formData);

// 验证订单(消费数据)
if (validateOrder(order)) {
// 更新订单状态(修改数据)
order.status = 'verified';

// 保存到数据库(数据存储)
saveToDatabase(order);
}

条件表达式与默认流

条件表达式

网关分支时,顺序流可带条件:

1
2
3
4
◇ [排他网关:订单金额]
├─ [金额 > 5000] → [经理审批]
├─ [金额 > 1000] → [主管审批]
└─ [默认] → [自动审批]

条件写法(伪代码):

1
2
3
4
5
6
7
8
// 简单比较
if (orderAmount > 5000) { ... }

// 变量比较
if (processVariables.customerType === 'VIP') { ... }

// 复杂表达式
if (orderAmount > 5000 && customerType !== 'blocked') { ... }

默认流

在网关处,当其他条件都不满足时,流向默认分支

标注方式:顺序流上标注 Default 或菱形符号指向默认出边。

小案例:订单处理的完整流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[客户](参与者)
↓ 消息流(订单信息)
[销售部门]
[接收订单] ← 消息启动事件

[订单] ← 数据对象
↓ 输入数据关联
[验证订单内容]

◇ [金额判断]
├─ [≥1000] → [主管审批] → ◇ [审批结果]
│ ├─ [同意] → [准备发货] ⟿ 发货通知 ⟿ [物流部门]
│ └─ [拒绝] → [发送拒绝通知] ⟿ ⟿ [客户]

└─ [<1000] → [自动审批] → [准备发货] ⟿ ...

[订单库] ≡ ← 数据存储关联(订单信息保存)

常见设计误区

误区 问题 纠正
用顺序流跨池 违反BPMN规范 跨池必须用消息流
消息流控制流程顺序 消息是异步的,不保证顺序 在接收方用事件响应消息
忽视数据对象 流程逻辑不清晰 标明关键数据的输入/输出
过度细化数据 模型复杂 仅标明关键数据对象

小结

掌握连接与数据:

  • ✓ 顺序流控制同池执行顺序
  • ✓ 消息流表示跨池通信(异步)
  • ✓ 数据对象明确信息流动
  • ✓ 条件表达式驱动网关决策

能够设计出信息流清晰、数据关系明确的流程。

参考资料