BPMN基本元素:任务与子流程——活动的承载

在BPMN中,活动(Activity) 代表流程中”做什么”的具体行为。最常见的活动形式是任务(Task)子流程(Sub-Process)。本文讲解任务的分类、应用场景,以及子流程如何用于流程复用与分层。

任务的五大类型

BPMN定义了5种标准任务类型,每种代表不同的执行方式:

用户任务(User Task)

含义:需要人工介入的工作,如审批、填表、确认等。

特点

  • 流程在此暂停,等待人类完成
  • 通常分配给特定角色或用户
  • 完成后由人类主动点击”完成”按钮

常见场景

  • 审批流程(经理审批、财务审批)
  • 数据填报(客户信息、合同签署)
  • 质量检查(产品检验)

符号

用户任务

服务任务(Service Task)

含义:由系统自动执行的任务,无需人工干预。

特点

  • 流程自动运行,不需等待
  • 通常调用后端API、数据库操作或第三方服务
  • 执行成功/失败应有异常处理

常见场景

  • 调用支付网关
  • 发送邮件/短信通知
  • 计算与数据更新
  • 调用外部API(如天气查询、汇率转换)

符号

服务任务

伪代码示意

1
2
3
4
5
6
7
8
9
// 服务任务的逻辑执行示例
async function executeServiceTask(inputData) {
try {
const result = await callExternalAPI(inputData);
return result; // 流程继续
} catch(error) {
throw new WorkflowException(error); // 触发异常路径
}
}

脚本任务(Script Task)

含义:执行嵌入式脚本(如JavaScript、Python)的任务。

特点

  • 通常用于数据转换、计算或判断
  • 脚本代码可在流程定义中直接编写
  • 无需调用外部服务

常见场景

  • 计算订单总额
  • 数据格式转换
  • 业务规则评估

符号

脚本任务

伪代码示意

1
2
3
4
5
6
7
8
9
// 脚本任务示例:计算税率
let taxRate = 0;
if (amount > 10000) {
taxRate = 0.13;
} else if (amount > 5000) {
taxRate = 0.10;
} else {
taxRate = 0.08;
}

接收任务(Receive Task)

含义:流程等待接收外部消息后继续执行。

特点

  • 流程暂停,等待外部系统的消息
  • 与消息启动事件不同,接收任务在流程中途
  • 无超时机制(通常配合边界事件实现超时)

常见场景

  • 等待支付确认
  • 等待第三方系统通知
  • 等待合作伙伴反馈

符号

接收任务

发送任务(Send Task)

含义:向外部系统或人员发送消息的任务。

特点

  • 自动执行,无需等待
  • 消息发送成功后流程继续
  • 通常用于通知、提醒

常见场景

  • 发送审批通过通知
  • 向供应商发起询价请求
  • 发送订单确认邮件

符号

发送任务

子流程(Sub-Process)

概念

子流程是一个完整的流程,嵌入在另一个流程中。它可以:

  • 复用已有流程
  • 将复杂流程分层
  • 隐藏细节,简化可读性

嵌入式子流程(Embedded Sub-Process)

在主流程中直接定义的子流程,可展开/折叠:

1
2
3
4
5
6
7
8
9
10
11
主流程:
┌──────────────────────┐
│ 采购审批子流程 │ ← 可点击展开查看内部
│ ┌─────────────────┐ │
│ │ 创建采购订单 │ │
│ │ ↓ │ │
│ │ 经理审批 │ │
│ │ ↓ │ │
│ │ 财务复核 │ │
│ └─────────────────┘ │
└──────────────────────┘

特点

  • 子流程内有自己的启动/结束事件
  • 支持嵌套(子流程内还可有子流程)
  • 可复用相同的变量与数据

调用活动(Call Activity)

引用外部流程的方式,类似”函数调用”:

1
2
3
4
5
主流程:
[开始] → [调用"采购审批"流程] → [后续处理] → [结束]

外部流程文件
(purchase-approval.bpmn)

特点

  • 外部流程独立维护
  • 多个流程可共用同一个子流程
  • 便于流程版本管理与重用

任务与子流程的选择标准

场景 选择 原因
单个完整的业务操作 任务 简洁明快
多步骤业务流程(如审批) 子流程 逻辑聚合,易于隐藏细节
需要多个流程共用 调用活动 独立维护,避免重复
需要人工操作 用户任务 清晰的参与者与交互
系统自动处理 服务任务 明确自动化,无需等待

小案例:采购流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
创建采购单

┌─────────────────────┐
│ 采购审批子流程 │
│ 经理审批 → 财务复核 │
└─────────────────────┘
↓(批准分支)
发送给供应商 [服务任务]

等待报价 [接收任务]
↓(超时边界事件)
催款邮件 [服务任务]

流程结束

小结

掌握任务与子流程:

  • ✓ 五种任务类型及其自动化程度
  • ✓ 用户任务标记”人工环节”,服务任务标记”自动化”
  • ✓ 子流程用于分层与复用
  • ✓ 调用活动用于跨流程引用

能够设计出清晰的任务分配、智能的自动化与复用流程

参考资料