Flowable 学习笔记
一、Flowable 入门介绍
官网地址:https://flowable.com/open-source/
Flowable6.3中文教程:https://tkjohn.github.io/flowable-userguide/#_introduction
可以在官网下载对应的jar包在本地部署运行,官方提供了下面的五个应用程序:
Flowable Modeler:流程定义管理
Flowable Task:用户任务管理
Flowable IDM:用户组权限管理
Flowable REST API:流程引擎对外提供的API接口
Flowable Admin:后台管理
二、Flowable五大引擎
Flowable有五大引擎,每个之间都是相互独立互不影响
ProcessEngine是里面最核心也是最重要的一个引擎,如果失去它那Flowable也就意义了。
三、流程引擎使用架构
Flowable引擎在使用前需要先通过配置来初始化ProcessEngine。
初始化ProcessEngineConfiguration一般有两种方式:
1、通过Spring配置文件进行依赖注入,通过flowable.cfg.xml文件来初始化ProcessEngineConfiguration(这里的文件名必须为flowable.cfg.xml,否则Flowable识别不到)
2、通过编写程序的方式来构造ProcessEngineConfiguration对象
ProcessEngineConfiguration在初始化过程中会同时初始化数据库,如果数据库已经存在,则不会做创建更新操作,如果数据库不存在,则会默认执行数据库创建脚本。
流程引擎API架构图
四、流程引擎
1、简单了解Bpmn
1.1Task任务:
用户任务(userTask)
系统任务(serviceTask )
1.2Event事件:
定时器事件(timerEventDefinition)
1.3Gateway网关:
排他网关(exclusive gateway)
2、目标:实现以下简化版的请假流程
请假流程图(简单版)
步骤1:定义相应的BPMN文件
步骤2:配置flowable.cfg.xml
步骤3:将流程定义添加到Repository仓储中
步骤4:Runtime开始一个流程实例
五、数据库介绍
ACT_RE_ *:RE代表repository。具有此前缀的表包含静态信息,例如流程定义和流程资源(图像,规则等)。
ACT_RU_ *:RU代表runtime。这些是包含运行时的流程实例,用户任务,变量,作业等的运行时数据的运行时表。Flowable仅在流程实例执行期间存储运行时数据,并在流程实例结束时删除记录。这使运行时表保持小而快。
ACT_HI_ *:HI代表history。这些是包含历史数据的表,例如过去的流程实例,变量,任务等。
ACT_GE_ *:general数据,用于各种用例。
ACT_ID_*:Idm的用户、组
---------------------------------------------------------------------------------------------------------------------
ACT_HI_ACTINST 流程实例的历史运行节点表
ACT_HI_TASKINST 流程实例的历史任务表
ACT_HI_VARINST 流程实例的历史运行节点的变量表
ACT_HI_PROCINST 流程历史部署记录
ACT_HI_IDENTITYLINK 对应ACT_RU_IDENTITYLINK的历史记录表
ACT_RE_DEPLOYMENT 流程部署
ACT_RE_PROCDEF 流程定义表
ACT_RU_EXECUTION 流程实例执行过程的所有节点记录
ACT_RU_IDENTITYLINK 流程实例运行过程中,各节点对应的用户
ACT_RU_TASK 流程实例运行时的任务表
ACT_RU_VARIABLE 流程实例运行时节点的变量表
ACT_GE_BYTEARRAY 资源文件表
六、用户权限体系
使用Flowable工作流引擎的时候,不可避免就需要考虑相应的用户权限,根据官方文档提供的教程,实现Flowable的用户权限体系总共有两大类:
(一)Flowable提供的IdmEngine身份识别引擎
在接入Flowable的用户权限体系的时候,有3种方式:
1、使用Flowable提供的默认IdmEngine进行用户体系管理,该引擎包含了用户、组的概念。
2、集成LDAP,实现轻量级用户权限管理。通过IdentityService进行认证,用于由IdentityService处理所有认证业务的场景。
3、实现IdmIdentityService接口,自定义实现用户、组的查询
(二)自定义身份识别引擎
有时候在项目上已经实现了自己的用户体系,接入Flowable的工作流引擎时,就需要考虑如何将自己的用户体系映射到Flowable工作流引擎的数据权限上去。Flowable提供的数据权限体系是用户、组、租户的结构体系,因为这里提供一个映射的设计思路:
用户权限体系映射:用户A(id值为1)—— 角色A(id值为1)——部门A(id值为1) —— 区域A(id值为1)(某个租户的用户A是角色A,所在部门为部门A,所属区域为区域A)
根据上述的映射关系转换成如下
用户转换后的id:1
角色转换后的id:R1
部门转换后的id:O1
区域转换后的id:A1
将映射关系对应到Flowable中
用户:1
组:R1、O1、A1
1、 单用户(assignee="用户id")、多用户(candidateUsers="用户id1,用户id2")
2、 单角色、多角色(candidateGroups=":角色id1,:角色id2")
3、 单部门、多部门(candidateGroups="部门id1:,部门id2:")
4、 角色或部门(candidateGroups="角色id1:, :部门id1")
5、 角色且部门
在实际项目中,往往用户会存在租户、角色、部门之间的对应关系,因而在对应到Flowable的用户、组、租户的时候可以用以下思路来处理:
知道如果映射后,现在的问题就是在哪里去实现这部分的映射关系,以下提供几种实现的思路,目前还没正式验证过,仍处于实验阶段:
一、修改官方的源码
已知对bpmn的用户任务进行解析的方法类为UserTaskXMLConverter,通过该类的源码可以了解相关的解析机制,在此基础上对自己需要的节点添加相关的解析操作
二、找到官方提供的自定义配置,修改自定义配置属性(还未找到方案)
三、在前端设计bpmn文件的时候,通过相关的方法对id进行映射后生成最终的bpmn文件
四、自定义权限的表达式,例如:<userTask id="approveTask" name="刘备审批" flowable:assignee="#{idmTest.org('emp')}"/>
其中idmTest.org就是用来自定义返回的id集的方法
注:文章出自https://www.jianshu.com/p/799b1ebf5dc4?tdsourcetag=s_pctim_aiomsg(略作修改)。