Flowable/Camunda实战:从零绘制完整审批流程图的BPMN 2.0指南
当你在Flowable Modeler中新建一个空白流程时,面对左侧琳琅满目的BPMN图标,是否曾感到无从下手?本文将带你用Camunda Modeler(同样适用于Flowable)逐步构建一个包含部门审批、财务审核、自动通知等完整环节的采购审批流程。我们会从最基础的拖拽图标开始,直到生成可部署的.bpmn文件——整个过程就像搭积木一样直观。
1. 环境准备与基础元素认知
在开始绘制前,建议下载最新版Camunda Modeler(与Flowable兼容),其界面主要分为四个区域:左侧的BPMN元素面板、中央的绘图画布、右侧的属性配置栏以及底部的调试控制台。我们先来认识几个核心元素:
- 用户任务(User Task):需要人工处理的节点,如图中
部门经理审批 - 服务任务(Service Task):自动执行的逻辑,如
发送邮件通知 - 排他网关(Exclusive Gateway):菱形图标,用于条件分支
- 定时事件(Timer Event):时钟图标,实现延迟触发
提示:双击画布空白处可设置全局流程属性,建议先定义processId和name
2. 构建采购审批主干流程
2.1 绘制基础任务链
- 从左侧面板拖拽**开始事件(空心圆)**到画布
- 添加第一个用户任务,命名为
提交采购申请 - 连接后续任务:
部门初审(用户任务)金额>5000?(排他网关)财务复核(用户任务,条件分支)
- 最终汇合到
归档记录(服务任务)
<!-- 示例:部门初审的用户任务定义 --> <userTask id="deptReview" name="部门初审" flowable:assignee="${applicant.deptManager}"> <extensionElements> <flowable:formProperty id="approved" type="boolean" label="是否批准"/> </extensionElements> </userTask>2.2 配置网关条件
在金额判断网关处,需要设置流转条件:
| 路径目标 | 条件表达式 | 说明 |
|---|---|---|
| 财务复核 | ${amount > 5000} | 大额采购流程 |
| 直接归档 | ${amount <= 5000} | 小额采购快速通道 |
注意:表达式语法默认使用JUEL,也可切换为Groovy
3. 高级功能集成
3.1 添加定时事件
当需要实现"超时自动通过"功能时:
- 在
部门初审任务添加边界定时事件 - 配置属性:
- Timer Definition Type: Duration
- Timer Definition: PT48H (48小时)
- 连接后续自动审批服务
3.2 异常处理设计
通过错误边界事件处理审批拒绝:
- 在审批任务添加红色闪电图标
- 定义错误代码:REJECTED
- 连接补偿任务:
通知申请人修改重置表单状态
// 对应的JavaDelegate示例 public class RejectionNotifier implements JavaDelegate { public void execute(DelegateExecution exec) { String applicant = (String) exec.getVariable("applicant"); emailService.send(applicant, "您的申请需要修改"); } }4. 流程调试与优化
4.1 模拟运行测试
Camunda Modeler内置模拟器可逐步验证:
- 点击右上角"Start Process"按钮
- 在调试面板填写初始变量:
{ "amount": 7500, "applicant": "user123" } - 逐步执行并观察变量变化
4.2 性能优化技巧
- 对高频任务启用异步特性:
<serviceTask id="archiveTask" flowable:async="true"/> - 使用执行监听器记录耗时:
exec.getEngineServices() .getRuntimeService() .createVariableInstanceQuery() .processInstanceIdIn(exec.getId()) .list();
5. 可视化增强与文档化
5.1 添加注释元素
- 使用文本注释解释复杂逻辑
- 用关联线连接到相关元素
- 分组相关节点到泳道
5.2 生成流程图文档
通过Modeler的Export功能可生成:
- 高分辨率PNG流程图
- 带交互注释的HTML文档
- 符合规范的BPMN 2.0 XML
最后分享一个实用技巧:在复杂流程中,我习惯先用便签纸手绘草图确定主要节点,再在工具中细化。对于包含超过15个节点的流程,建议拆分为子流程——这能让维护成本降低40%以上。