2、流程建模基础:BPMN 2.0 标准介绍、流程元素(事件、活动、网关)、泳道图设计
聊到流程自动化,绕不开一个东西——BPMN 2.0。
说实话,我刚入行那会儿,觉得画流程图嘛,谁不会?Visio 拖几个框,连几条线,完事。直到第一次做真正的治理流程自动化项目,被业务方怼回来:“你这图,开发看不懂,业务也看不懂,到底谁的责任?”
嗯,从那以后我才明白,流程建模不是画画,是沟通。BPMN 2.0 就是那个让业务和 IT 都能闭嘴听你说话的通用语言。
2.1 BPMN 2.0 是什么?
BPMN 全称 Business Process Model and Notation,2.0 是 2011 年发布的稳定版本。说白了,它就是一套画流程图的国际标准,由 OMG 组织维护。
为什么非得用它?我个人的习惯是:只要涉及跨部门、跨系统的流程自动化,必须上 BPMN 2.0。原因有三:
- 统一符号:全世界搞流程的人看到同一个符号,理解一致。
- 可执行:BPMN 2.0 的图可以直接导入流程引擎(比如 Camunda、Flowable)跑起来。
- 分层清晰:从业务概览到技术实现,一张图能讲清楚。
核心观点:BPMN 2.0 不是画图工具,是流程自动化的“设计蓝图”。蓝图画错了,后面代码写得再好也白搭。
2.2 三大核心元素:事件、活动、网关
BPMN 2.0 的元素很多,但真正高频使用的就三类:事件(Event)、活动(Activity)、网关(Gateway)。我管它们叫“流程三件套”。
2.2.1 事件(Event)——流程的“触发器”
事件用圆圈表示。它告诉流程:什么时候开始、中间发生了什么意外、什么时候结束。
| 类型 | 符号 | 说明 | 我踩过的坑 |
|---|---|---|---|
| 开始事件 | 单细圆圈 | 流程启动的起点 | 别画多个开始事件,引擎会懵 |
| 中间事件 | 双细圆圈 | 流程运行中发生的“意外” | 超时事件一定要设,否则流程卡死没人知道 |
| 结束事件 | 单粗圆圈 | 流程终止 | 每个分支都要有结束,不然流程挂在那 |
| 消息事件 | 信封图标 | 收到或发送消息触发 | 消息名称必须唯一,否则路由错乱 |
| 定时事件 | 时钟图标 | 按时间触发 | 时区问题,我曾经被 UTC+8 坑过 |
我的经验:开始事件尽量用“消息”或“定时”触发,别用“空开始”。空开始意味着人工启动,自动化程度直接降级。
2.2.2 活动(Activity)——流程的“干活单元”
活动用圆角矩形表示。流程里所有“做事”的步骤,都是活动。
- 任务(Task):原子操作,不可再分。比如“发送审批邮件”。
- 子流程(Sub-Process):可展开的复合活动。比如“采购审批”里面可能包含“部门审批→财务审批→总经理审批”。
- 调用活动(Call Activity):调用另一个独立的流程定义。我常用它做公共流程复用,比如“发送通知”做成一个公共流程,到处调用。
避坑指南:我曾经把一个“子流程”画成“任务”,结果开发说没法复用。后来改成调用活动,省了 30% 的重复代码。记住:能复用的活动,别画成任务。
2.2.3 网关(Gateway)——流程的“岔路口”
网关用菱形表示。它不干活,只做决策。
| 网关类型 | 符号 | 行为 | 使用场景 |
|---|---|---|---|
| 排他网关 | X 标记 | 只有一个分支被激活 | 金额判断:小于 1000 走 A,否则走 B |
| 并行网关 | + 标记 | 所有分支同时执行 | 会签:财务、法务、HR 同时审批 |
| 包容网关 | O 标记 | 满足条件的分支都执行 | 风险等级:高风险走 A,中风险走 B,低风险走 C,可多选 |
| 事件网关 | 五边形 | 等待第一个事件触发 | 超时或收到消息,谁先到走谁 |
关键点:排他网关的条件必须互斥且覆盖所有可能。我曾经漏写一个“其他”条件,结果流程走到网关直接报错。现在我的习惯是:排他网关最后一条分支永远写“default”。
2.3 泳道图设计——分清“谁干什么”
泳道图(Swimlane Diagram)是 BPMN 里最实用的设计模式。它解决了一个核心问题:责任归属。
你想想看,一个流程跨了 5 个部门,每个部门 3 个角色,如果没有泳道,图上一堆活动,根本分不清谁该干什么。我在项目里见过最夸张的图,一个活动连了 8 条线,没人知道谁负责。
2.3.1 泳道 vs 泳池
- 泳池(Pool):代表一个独立的参与者,通常是公司或系统。一个流程图可以有多个泳池。
- 泳道(Lane):泳池内部的细分,代表角色或部门。比如“财务部”泳池下分“出纳”、“会计”、“财务经理”三个泳道。
我的设计原则:泳池之间用消息流(虚线箭头)通信,泳道之间用顺序流(实线箭头)通信。别混用,否则流程引擎解析会出问题。
2.3.2 泳道图设计四步法
- 识别参与者:列出所有涉及的系统、部门、外部机构。
- 划分泳池:每个独立参与者一个泳池。
- 细分泳道:泳池内按角色或岗位细分。
- 放置活动:把活动放到对应的泳道里,谁执行放谁下面。
避坑指南:我曾经把“系统自动审批”和“人工审批”放在同一个泳道,结果开发不知道哪个该自动化。后来我强制要求:系统活动放一个泳道,人工活动放另一个泳道。自动化边界一目了然。
2.4 本章知识体系总览
下面这张图是我自己总结的 BPMN 2.0 核心知识结构,方便你对照学习:
2.5 实战建议:从画图开始规范
最后说点实在的。很多团队做流程自动化,上来就写代码,结果写到一半发现流程逻辑有漏洞,返工成本极高。
我个人的习惯是:先画 BPMN 2.0 图,再写代码。画图的过程就是梳理逻辑的过程。你画清楚了,开发、测试、业务方都能看懂,后面几乎不会有大改动。
一句话总结:事件决定流程的“起承转合”,活动决定流程的“具体动作”,网关决定流程的“分支走向”,泳道决定流程的“责任归属”。把这四个东西搞明白,流程建模你就出师了。