第4章 活动详解:任务类型(人工、服务、发送、接收、用户等)、子流程与调用活动

在 BPMN 2.0 中,活动(Activity) 是流程中执行工作的基本单元。本章深入解析两大类活动:任务(Task) 与 子流程(Sub-Process),以及特殊的重用机制 调用活动(Call Activity)。掌握它们的区别与适用场景,是建模准确、可执行流程的关键。

4.1 任务类型概览

任务是不可再分的最小工作单元,BPMN 2.0 定义了 6 种标准任务类型,分别对应不同的执行方式:

任务类型 执行者 典型场景
人工任务(Manual Task) 人(线下操作) 签收纸质文件、人工称重
用户任务(User Task) 人(通过系统) 审批工单、填写表单
服务任务(Service Task) 系统/服务 调用 API、执行数据库操作
发送任务(Send Task) 系统 发送邮件、MQ 消息
接收任务(Receive Task) 系统/人 等待外部响应、接收文件
脚本任务(Script Task) 引擎 执行 Groovy 脚本、计算表达式
关键区分:人工任务与用户任务都涉及人,但人工任务通常指不借助信息系统的手工操作;用户任务则依赖流程引擎提供的任务列表界面。建模时应优先使用用户任务以支持流程的自动跟踪与分配。

4.2 子流程与调用活动

当流程中的某一段逻辑需要独立封装或复用,就需要将活动升级为子流程或调用活动。

  • 子流程(Sub-Process):内嵌在当前流程定义中,展开后包含完整的一组活动。子流程内的边界事件可以捕获或抛出异常,实现局部补偿。
  • 调用活动(Call Activity):引用一个独立的全局流程定义(通常是发布为独立流程的“可重用子流程”)。调用活动不展开内部细节,只传递输入/输出数据。
对比维度 子流程(内嵌) 调用活动(全局)
定义位置 当前流程内部 外部独立流程定义
重用范围 仅当前流程 可被多个流程调用
内部事件影响 支持边界事件(异常处理) 不直接支持边界事件
执行行为 展开后执行内部活动 启动被调用流程实例,等待返回
常见错误:将调用活动当作子流程来画,却在调用活动上附加边界事件。调用活动本身是“黑盒”,边界事件应定义在被调用的全局流程内部。如需异常处理,请使用内嵌子流程。

4.3 案例分析:订单审核与发货流程

以电商订单处理为例,下图展示混合使用多种任务类型、子流程与调用活动的典型场景:

流程描述:收到客户订单后,系统首先执行服务任务检查库存;若库存充足,启动人工任务“仓库拣货”;同时通过发送任务向客户发送确认邮件;之后进入内嵌子流程“支付处理”(包含收款、退款校验等内部活动);支付成功后调用调用活动“物流发货”(复用独立定义的出库流程);最终由用户任务“客户签收确认”结束。

订单处理流程 —— 任务类型与子流程示例 开始 服务任务 检查库存 人工任务 仓库拣货 发送任务 发确认邮件 子流程 支付处理 调用活动 物流发货 结束 图例说明 任务类型:不同颜色区分(绿=服务,蓝=人工,橙=发送,红=调用) 子流程用虚线边框 + 实色内框表示,内部可展开多个活动 接收任务 等待确认 接收任务也可在流程中出现

4.4 任务类型选择实践清单

在实际建模中,遵循以下清单可避免常见设计错误:

  1. 确认执行主体:如果工作由人完成且不依赖系统,用 人工任务;如果人通过待办列表操作,用 用户任务。
  2. 自动操作判断:无人工干预的系统调用使用 服务任务;发送消息(邮件/队列)用 发送任务;等待外部消息到达用 接收任务。
  3. 子流程 vs 调用活动:只在单一流程内使用且需要局部异常处理,用 内嵌子流程;需要跨流程复用,用 调用活动。
  4. 避免“万能任务”:不要将所有行为都塞入“用户任务”或“服务任务”,根据 BPMN 语义选择最精确的类型,提升流程的可读性与可执行性。
  5. 命名规范:任务名称应体现“动宾短语”,如“审核订单”“调用库存API”,避免模糊动词如“处理”“操作”。

总结:活动是流程的骨架,选对任务类型决定了流程能否被正确理解与自动化。子流程与调用活动则提供了分层与复用的能力。下一层将对“网关”进行详细拆解。