# BPMN 2.0
BPMN 2.0的根元素是definitions元素。在这个元素中,可以定义多个流程定义
<!--这是一个空的流程定义-->
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:flowable="http://flowable.org/bpmn"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI"
typeLanguage="http://www.w3.org/2001/XMLSchema"
expressionLanguage="http://www.w3.org/1999/XPath"
targetNamespace="http://www.flowable.org/processdef">
<!--流程部分-->
<process id="test" name="test" isExecutable="true">
</process>
<!--可视化部分-->
<bpmndi:BPMNDiagram id="BPMNDiagram_test">
<bpmndi:BPMNPlane bpmnElement="test" id="BPMNPlane_test">
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>
注意
- definitions 元素最少需要包含 xmlns 与 targetNamespace 声明
- targetNamespace 可以为空,它用于对流程定义进行分类
# process元素有两个属性
- id: 必填属性,将映射为Flowable ProcessDefinition对象的key参数
// 使用id来启动这个流程定义的新流程实例。这个方法总会使用流程定义的最新部署版本
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess");
# 与 startProcessInstanceById 方法不同
# startProcessInstanceById 参数为Flowable引擎在部署时生成的字符串ID
# 可通过processDefinition.getId()获取。ID的格式为 key:version,长度64字符
# 请注意限制流程key的长度,否则会抛出FlowableException异常,提示生成的ID过长
- name: 可选属性,将映射为ProcessDefinition的name参数
# 引擎本身不会使用这个参数。可以用于在用户界面上显示更友好的名字
# 一个流程图主要包含四个方面
- 事件
# 在一个流程图中肯定要有的是开始事件和结束事件,此外还有一些中间事件,边界事件等
- 连线
# 连线是将事件,任务,网关等连在一起的线条,一般情况下都是普通连线,有的会有一些条件
- 任务
接收任务
# 这类任务不需要处理额外的事,流程到这一步就自动停下来了,需要人工点一下,推动流程继续向下执行
发送任务
# 一般用来吧消息发送给外部参与者
服务任务
# 一般由系统自动完成,我们需要自定义一个类,可以在这个自定义的类里面完成自己想要做的事,比较灵活
脚本任务
# 一个自动化活动,当流程执行到脚本任务时,自动执行相应的脚本
用户任务
# 用于为那些需要人工参与者完成的工作建模
- 网关
互斥网关
# 也叫排他性网关,这种网关只有一个有效出口
并行网关
# 并行网关一般是成对出现的,如果有一些任务可以并行执行,那么可以用并行网关
相容网关
# 事件网关是通过中间事件驱动,它在等待的事件发生后才会触发决策,基于事件的网关允许基于事件做出决策
事件网关
# 这种网关有多个出口,只要满足条件,都会执行
# flowable-bpmn-visualizer
- 用户任务设置

注意
这里如果是传递变量需要用 ${} 表达式,如果是字符串,直接写即可
- 排他网关设置

注意
从排他性网关出来的线条中,有一个 Condition expression,这个表示这个线条执行的条件
图中的 ${approve} 表示这个变量的名字为 approve
- 服务任务设置

注意
给 Class 属性赋值,意思是这个节点执行的时候,会执行这个类中的方法,这个类需要实现 JavaDelegate 接口,然后重写 execute 方法,这个方法就是这个节点执行的时候会执行的方法。
/**
* @author BNTang
* @version 1.0
* @description 发送请假审批邮箱拒绝或者同意
* @since 2023-11-23
**/
public class Approve implements JavaDelegate {
@Override
public void execute(DelegateExecution delegateExecution) {
System.out.println("发送请假审批邮箱拒绝或者同意" + delegateExecution.getVariables());
}
}
# Flowable
Flowable BPMN 用户手册 (opens new window)
:: tip 注意 Flowable是Activiti的fork,使用自定义扩展时,总是通过flowable:命名空间前缀,明确标识出XML元素、属性等。请注意Flowable引擎也支持activiti:命名空间前缀。 ::