# Flowable
# 参考文档
- Flowable 官网 (opens new window)
- Flowable BPMN 用户手册 v6.3.0 (opens new window)
- BPMN.JS (opens new window)
# 背景
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/
# 流程设计
- act_ge_bytearray:记录流程定义的资源信息。xml和流程图的图片信息。
- act_re_deployment:流程部署表,记录这次的部署行为
- act_re_procdef:流程定义表,记录这次部署动作对应的流程定义信息
要注意区分流程部署和流程定义的关系 一次部署搡作可以部署多个流程定义
部署流程(相当于定义一个类)——》 流程实例(相当于创建一个对象)
- act_ru_task 表中看到对应的记录。 act_ru_task 记录的都是当前待办的记录信息
ru 就是运行时,已经开启的一个实例
每启动一个流程实例那么就会在 act_hi_procinst 表中维护一条记录。流程实例
然后在act_ru_execution 会记录流程的分支
# 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
# 网关
# 排他网关(异或)
遇到分叉,只能选择之一
- 如果只有一个顺序流的条件满足要求,则就走这个顺序流
- 如果有多个顺序流的条件满足要求,则哪个顺序流的定义在流程文件中靠前,走哪个顺序流
- 如果没有顺序流的条件满足要求,则抛出异常
# 并行网关(分岔和合并)
# 分岔
可以让一个执行流变为多个同时进行的并发执行流
# 合并
可以让多个执行流合并为一个执行流
并行网关并不要求成对出现,即有了分岔并不一定有合并,有了合并也不一定有分岔
一个并行网关允许同时出现分岔和合并两种行为,即多个执行流到达该并行网关时被合并,然后随机又被分岔为多个执行流
并行网关不会解析流条件。 即使顺序流中定义了流条件,也会被忽略
并行网关有几个分支,就会生成几个任务记录。并且,必须要等多个分支任务都完成后汇聚到一起,才能流转到下一个节点任务
即使并行网关设置了流条件,且代码中设置的流程变量只满足了一个条件,但依旧产生了两条任务,也就是并行网关并不会去解析我们设置的流条件的
# 包含网关
包含网关可以看做是排他网关和并行网关的结合体.
即可以当排他网关使用,也可以当并行网关使用
# 当排他网关使用
- 当排他网关使用时,需要为从包含网关输出的顺序流 1 和顺序流 2 设置流条件
- 如果只有一个顺序流的条件满足要求,则就走这个顺序流
- 如果有多个顺序流的条件满足要求,则会 并行 走满足条件的 所有的 顺序流(这点和排他网关有区别,排他网关是哪个顺序流的定义在流程文件中靠前,走哪个顺序流)
- 如果没有顺序流的条件满足要求,则抛出异常
# 当并行网关使用
和并行网关效果一致
# 事件网关
# 讨论区
由于评论过多会影响页面最下方的导航,故将评论区做默认折叠处理。
点击查看评论区内容,渴望您的宝贵建议~
← 工作流总览