流程建模基础:流程图的符号与规范(BPMN 2.0)

各位同学,今天我们来聊聊流程建模。说白了,就是把业务逻辑画成图,让机器和人能看懂。我做了这么多年自动化,发现一个规律:流程图画不好,后面写代码全是坑。所以这一章,咱们把BPMN 2.0的底子打扎实。

核心观点:BPMN 2.0不是画着玩的,它是可执行的标准。你画的每一个符号,将来都可能变成代码里的一个节点。

一、BPMN 2.0 到底是什么?

BPMN 2.0,全称是Business Process Model and Notation 2.0。嗯,名字挺长,你记住它是流程建模的国际标准就行。我2015年第一次接触它时,觉得这玩意儿跟Visio画的流程图没啥区别。后来踩了坑才发现——BPMN的符号是有严格语义的,不是随便画个框框就能跑。

举个例子:你画一个矩形,在普通流程图里它就是个“步骤”。但在BPMN里,矩形代表活动(Activity),它必须有一个明确的输入和输出。我曾经在项目里把“人工审批”画成了“服务任务”,结果引擎直接报错——因为服务任务要求自动执行,不能等人点按钮。

我的习惯:每次画图前,先问自己三个问题——这个节点谁来执行?需要什么数据?产出什么结果?想清楚再动笔。

二、三大核心元素:活动、网关、事件

BPMN 2.0的符号很多,但核心就三类:活动网关事件。你把这仨搞明白,80%的流程都能画。

1. 活动(Activity)

活动就是流程里“干活”的节点。它分两种:

  • 任务(Task):原子操作,不可拆分。比如“发送邮件”、“调用API”。
  • 子流程(Sub-Process):可以展开的复合操作。比如“订单处理”里面可能包含“审核”、“发货”、“开票”三个步骤。

我记得有一次做供应链项目,客户把“质检”画成了一个任务。结果一跑流程,发现质检要分“外观检查”和“性能测试”两步。没办法,只能改成子流程。所以我的建议是:如果某个活动需要多人协作或分步骤,果断用子流程

活动类型 符号 说明 常见场景
用户任务 圆角矩形 + 人形图标 需要人工操作 审批、填写表单
服务任务 圆角矩形 + 齿轮图标 系统自动执行 调用API、计算
脚本任务 圆角矩形 + 脚本图标 执行一段代码 数据转换、规则判断
子流程 圆角矩形 + 加号 可展开的复合活动 订单处理、审核流程

避坑指南:我曾经把“用户任务”和“服务任务”搞混,结果流程引擎一直等着用户操作,而实际上应该自动调用接口。记住:有人参与的用用户任务,机器干的用服务任务

2. 网关(Gateway)

网关就是流程里的“岔路口”。它决定流程往哪走。BPMN里最常用的网关有三种:

  • 排他网关(XOR):二选一,只能走一条路。比如“金额大于1000走经理审批,否则走自动通过”。
  • 并行网关(AND):所有分支同时执行。比如“下单后同时通知仓库和财务”。
  • 包容网关(OR):满足条件的分支都执行。比如“如果客户是VIP且订单金额大,两个特殊处理都触发”。

你想想看,排他网关就像你早上出门——要么坐地铁,要么打车,只能选一个。并行网关就像你同时烧水和煮面,两件事互不干扰。包容网关嘛,有点像“如果下雨就带伞,如果天冷就加衣”——条件可以叠加。

个人经验:新手最容易犯的错误是网关条件写重叠。比如排他网关的两个分支条件分别是“金额>1000”和“金额<=1000”,这没问题。但如果你写成“金额>1000”和“金额>500”,那金额1500的订单就会同时满足两个条件,排他网关会报错。所以,写条件时一定要检查互斥性

3. 事件(Event)

事件是流程里“发生的事”。它分三种:开始事件中间事件结束事件

  • 开始事件:流程的起点。比如“收到订单”、“定时触发”。
  • 中间事件:流程执行过程中发生的事。比如“等待审批结果”、“接收消息”。
  • 结束事件:流程的终点。比如“订单完成”、“流程终止”。

嗯,这里要注意:事件是有类型的。比如“定时事件”和“消息事件”的图标不一样。我见过有人把“定时开始”画成了“消息开始”,结果流程永远不启动——因为引擎在等消息,而实际上应该等时间到。

事件类型 图标特征 说明 示例
开始事件 细圆圈 流程启动 收到HTTP请求
中间事件 双圆圈 流程中发生 等待30分钟
结束事件 粗圆圈 流程终止 订单完成
定时事件 圆圈+时钟 时间触发 每天8点执行
消息事件 圆圈+信封 消息触发 收到邮件

三、知识体系总览

下面这张图,是我自己整理的BPMN 2.0核心知识结构。你把它存下来,画图时对照着看,基本不会出错。

BPMN 2.0 核心知识体系 活动 (Activity) 网关 (Gateway) 事件 (Event) 用户任务 服务任务 脚本任务 子流程 排他网关 (XOR) 并行网关 (AND) 包容网关 (OR) 开始事件 中间事件 结束事件 定时/消息事件 核心原则 活动负责“做什么” | 网关负责“怎么走” | 事件负责“何时触发”

四、实战中的避坑指南

理论说完了,咱们聊聊实战。我这些年做流程建模,踩过不少坑,挑几个典型的说说:

  1. 符号滥用:有人把所有节点都画成“任务”,不管它是人工还是自动。结果引擎跑起来,该自动的等着人点,该人工的自动执行了。记住:符号决定行为
  2. 网关条件不完整:排他网关必须覆盖所有可能性。比如“金额>1000走A,金额<=1000走B”,这没问题。但如果你只写了“金额>1000走A”,那金额<=1000的订单就卡住了。我建议:每个排他网关都加一个默认分支
  3. 事件类型搞混:开始事件和中间事件的图标很像,但语义完全不同。开始事件是流程的“启动开关”,中间事件是流程中的“等待点”。我曾经把“等待审批”画成了开始事件,结果流程一启动就卡在等待上——因为审批还没发生呢。

我的小技巧:画完图后,用“走流程”的方式模拟一遍。从开始事件出发,沿着每个分支走到底,看看有没有死胡同或逻辑漏洞。这个方法帮我发现了至少30%的隐藏问题。

五、总结

好了,这一章的内容就这些。BPMN 2.0的符号规范,说白了就是三个词:活动、网关、事件。活动是干活,网关是选路,事件是触发。你把这三点刻在脑子里,画出来的流程图至少是合格的。

最后送大家一句话:流程建模不是画画,是编程的另一种形式。你画的每一个符号,将来都会变成代码里的逻辑。所以,认真对待每一个框框和箭头。


专注资料整理