# Flowable

# 参考文档

# 背景

BPM(Business Process Management),即业务流程管理,是一种以规范化的构造端到端的卓越业务流程为中心,以持续的提高组织业务绩效为目的系统化方法。

BPMN(Business Process Model And Notation)- 业务流程模型和符号 是由 BPMI(Business Process Management Initiative)开发的一套标准的业务流程建模符号,使用 BPMN 提供的符号可以创建业务流程。2004 年 5 月发布了 BPMN1.0 规范。BPMI 于 2005 年 9 月并入 OMG(The Object Management Group 对象管理组织)组织。OMG 于 2011 年 1 月发布 BPMN2.0 的最终版本。

# 开始

可以直接去下载 flowable 包,会得到 flowable-ui.war 和 flowable-rest.war 两个包。

直接可以使用 java -jar flowable-ui.war 运行官方提供的流程设计器。

推荐使用 6.6 以后的版本

# bpmn.js

bpmn.js是一个用于在Web应用程序中渲染和编辑BPMN(Business Process Model and Notation)流程图的JavaScript库。它提供了一套功能强大的API和工具,可以帮助开发人员在应用程序中集成BPMN流程图的显示和编辑功能。

使用bpmn.js,开发人员可以将BPMN流程图嵌入到他们的应用程序中,并与其它组件进行交互。它支持创建、修改和删除BPMN元素,如任务、网关、事件等,并提供了丰富的事件和回调函数,以便开发人员可以根据用户的操作进行相应的处理。 bpmn.js还支持将BPMN流程图导入和导出为XML格式,以便与其他BPMN工具进行交互和共享。它还提供了丰富的样式和主题选项,使开发人员可以自定义流程图的外观和样式。 总的来说,bpmn.js是一个强大的工具,可以帮助开发人员在Web应用程序中实现BPMN流程图的显示和编辑功能,并与其它组件进行集成。

https://bpmn.io/

alt text

# 流程设计

  • act_ge_bytearray:记录流程定义的资源信息。xml和流程图的图片信息。
  • act_re_deployment:流程部署表,记录这次的部署行为
  • act_re_procdef:流程定义表,记录这次部署动作对应的流程定义信息

要注意区分流程部署和流程定义的关系 一次部署搡作可以部署多个流程定义

部署流程(相当于定义一个类)——》 流程实例(相当于创建一个对象)

  • act_ru_task 表中看到对应的记录。 act_ru_task 记录的都是当前待办的记录信息

ru 就是运行时,已经开启的一个实例

每启动一个流程实例那么就会在 act_hi_procinst 表中维护一条记录。流程实例

然后在act_ru_execution 会记录流程的分支

alt text

# service

# RepositoryService

是activiti的资源管理类,

提供了管理和控制流程发布包和流程定义的操作。便用工作流建工具设计的业务流程图需要使用此service将流程定义文件的内容部署到计算机。 除了部署流程定义以外还可以:查询引整中的发布包和流程定义。 暂停或激活发布包,对应全部和特定流程定义。暂停意味着它们不能再执行任何操作了,激活是对应的反向操作。获得多种资源,像是包含在发布包里的文件,或引警自动生成的流程图。 获得流程定义的pojo版本,可以用来通过java解析流程,而不必通过xml。

# RuntimeService

Activiti的流程运行管理类,

可以从这个服务类中获取很多关于流程执行相关的信息

# TaskService

Activiti的任务管理类。

可以从这个类中获取任务的信息,

# HistoryService

Flowable的历史管理类,

可以査询历史信息,执行流程时,引警会保存很多数据(根据配置),比如流程实例启动时间,任务的参与者,完成任务的时间,每个流程实例的执行路径,等等。这个服务主要通过查询功能来获得这些数据。

# ManagementService

Activiti的引擎管理类,

提供了对Flowable 流程引擎的管理和维护功能,这些功能不在工作流驱动的应用程序中使用,主要用于 Flowable 系统的日常维护

# 表结构

在Flowable中的表结构在初始化的时候会创建五类表结构,具体如下:

  • ACT_RE: "RE"表示 repository。这个前缀的表包含了流程定义和流程静态资源(图片,规则,等等)。
  • ACT_RU: "RU"表示 runtime。这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。Flowable只在流程实例执行过程中保存这些数据,在流程结束时就会删除这些记录。这样运行时表可以一直很小速度很快。
  • ACT_HI:"H表示 history。这些表包含历史数据,比如历史流程实例,变量,任务等等
  • ACT_GE: GE 表示 general,通用数据,用于不同场景下
  • ACT_ID:"ID'表示identity(组织机构)。这些表包含标识的信息,如用户,用户组,等等,

# 挂起激活

挂起的流程定义不能在创建新的实例 即,挂起的流程定义不能够开启新的流程

已经开启的实例不受影响

流程实例也支持挂起和激活

# 分配用户

# 表达式分配

# 值表达式

${aaaa}

# 方法表达式

创建相应的 Spring Bean 就行了,会自动去单例池找

${myBean.haha()} 注意方法后面的括号要带着

# 监听器分配

# 流程变量

ACT_RU_ACTINST

start 一个流程的时候设置的是全局变量

也可以启动流程之后 set 变量(局部变量)

# 候选人

候选人不是审批人

候选人需要 拾取 操作变为审批人

拾取之后可以归还任务,退回到候选人

claim

unclaim 之后可以直接 setAssignee

# 网关

# 排他网关(异或)

遇到分叉,只能选择之一

alt text

  • 如果只有一个顺序流的条件满足要求,则就走这个顺序流
  • 如果有多个顺序流的条件满足要求,则哪个顺序流的定义在流程文件中靠前,走哪个顺序流
  • 如果没有顺序流的条件满足要求,则抛出异常

# 并行网关(分岔和合并)

alt text

# 分岔

可以让一个执行流变为多个同时进行的并发执行流

# 合并

可以让多个执行流合并为一个执行流

  • 并行网关并不要求成对出现,即有了分岔并不一定有合并,有了合并也不一定有分岔

  • 一个并行网关允许同时出现分岔和合并两种行为,即多个执行流到达该并行网关时被合并,然后随机又被分岔为多个执行流

  • 并行网关不会解析流条件。 即使顺序流中定义了流条件,也会被忽略

  • 并行网关有几个分支,就会生成几个任务记录。并且,必须要等多个分支任务都完成后汇聚到一起,才能流转到下一个节点任务

  • 即使并行网关设置了流条件,且代码中设置的流程变量只满足了一个条件,但依旧产生了两条任务,也就是并行网关并不会去解析我们设置的流条件的

# 包含网关

alt text

包含网关可以看做是排他网关和并行网关的结合体.

即可以当排他网关使用,也可以当并行网关使用

# 当排他网关使用

  • 当排他网关使用时,需要为从包含网关输出的顺序流 1 和顺序流 2 设置流条件
  • 如果只有一个顺序流的条件满足要求,则就走这个顺序流
  • 如果有多个顺序流的条件满足要求,则会 并行 走满足条件的 所有的 顺序流(这点和排他网关有区别,排他网关是哪个顺序流的定义在流程文件中靠前,走哪个顺序流)
  • 如果没有顺序流的条件满足要求,则抛出异常

# 当并行网关使用

和并行网关效果一致

# 事件网关

# 讨论区

由于评论过多会影响页面最下方的导航,故将评论区做默认折叠处理。

点击查看评论区内容,渴望您的宝贵建议~
Last Updated: 5/28/2024, 9:28:26 AM