第四章 activiti流程 “BPMN2.0规范解密室”
一、BPMN2.0是什么?——流程界的“世界语”
1. 定义与使命
- 官方定义:BPMN(Business Process Model and Notation)2.0是业务流程建模的国际标准,用图形化符号描述业务流程。
- 核心目标:让业务人员与开发者用同一套语言沟通,告别“你说流程,我写代码”的跨服聊天!
2. BPMN与Activiti的关系
- Activiti是BPMN2.0规范的执行引擎,能将流程图转化为可运行的代码逻辑。
- 类比:BPMN是乐谱🎼,Activiti是钢琴家🎹——乐谱规定音符,钢琴家弹出旋律!
二、BPMN2.0核心元素——流程的“乐高积木”
1. 事件(Events)——流程的“触发器”
事件类型 | 图标 | 作用 | 示例场景 |
---|---|---|---|
开始事件 | ⚪ | 流程起点 | 用户点击“提交请假” |
结束事件 | ⚫ | 流程终点 | 审批完成 |
中间事件 | ⚪➕🌠 | 流程执行中触发 | 超时自动提醒审批 |
2. 任务(Tasks)——流程的“工作单元”
任务类型 | 图标 | 作用 | 代码对应 |
---|---|---|---|
用户任务 | 🟦 | 需要人工处理 | UserTask |
服务任务 | 🟦➕⚙️ | 自动调用Java服务 | ServiceTask |
脚本任务 | 🟦➕📜 | 执行Groovy/Python脚本 | ScriptTask |
代码示例:
<serviceTask id="sendEmailTask" activiti:class="com.example.SendEmailDelegate" />
3. 网关(Gateways)——流程的“交通警察”
网关类型 | 图标 | 作用 | 条件设置 |
---|---|---|---|
排他网关 | 🔲 | 单选分支(if-else) | ${days > 3} |
并行网关 | 🔲➕⏩ | 多选分支(同时执行) | 无需条件 |
包容网关 | 🔲➕🌐 | 混合分支(部分并行) | 可结合条件 |
避坑指南:
- 并行网关必须成对出现,否则流程会“卡死”在虚空!
三、流程与子流程——模块化设计的“俄罗斯套娃”
1. 调用活动(Call Activity)
- 作用:复用其他流程(如“通用审批”子流程)。
- 配置:
<callActivity id="callCommonApprove" calledElement="commonApprove" />
2. 事件子流程
- 作用:处理异常或特定事件(如“订单取消”补偿逻辑)。
- 示例:
<subProcess id="compensationSubProcess" triggeredByEvent="true"> <startEvent id="compensationStart" isInterrupting="false"/> <!-- 补偿逻辑 --> </subProcess>
四、连线(Sequence Flow)与条件表达式——流程的“导航路线”
1. 默认连线
- 无条件执行,用绿色实线表示。
- 代码:
<sequenceFlow id="flow1" sourceRef="startEvent" targetRef="task1" />
2. 条件连线
- 需设置表达式,用绿色虚线表示。
- 代码:
<sequenceFlow id="flow2" sourceRef="gateway" targetRef="task2"> <conditionExpression xsi:type="tFormalExpression">${days > 3}</conditionExpression> </sequenceFlow>
趣味测试:
如果连线条件写成`${days > 3 || days < 0}`,会发生什么?
A. 流程正常执行
B. 抛出异常
C. 永远不满足条件
五、BPMN与Activiti的“联姻”——XML与引擎的映射
1. BPMN文件结构解剖
<definitions>
<process id="leaveProcess" name="请假流程">
<startEvent id="start"/>
<userTask id="applyTask" name="提交申请"/>
<exclusiveGateway id="decideGateway"/>
<endEvent id="end"/>
<!-- 连线 -->
</process>
</definitions>
2. Activiti扩展属性
- 用
activiti:
命名空间增强功能,如指定Java类:<serviceTask id="task1" activiti:class="com.example.MyDelegate" />
六、课后挑战——成为“BPMN语言大师”
-
选择题:并行网关的作用是什么?
A. 根据条件选择分支
B. 同时执行所有分支
C. 终止流程 -
实战题:设计一个订单流程,包含“下单→并行检查库存和信用→汇聚→发货”,导出BPMN文件并部署测试。
A. 根据条件选择分支
B. 同时执行所有分支
C. 终止流程
- 实战题:设计一个订单流程,包含“下单→并行检查库存和信用→汇聚→发货”,导出BPMN文件并部署测试。