# 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:命名空间前缀。 ::