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 学习笔记

三、流程引擎使用架构

Flowable引擎在使用前需要先通过配置来初始化ProcessEngine。

初始化ProcessEngineConfiguration一般有两种方式:

1、通过Spring配置文件进行依赖注入,通过flowable.cfg.xml文件来初始化ProcessEngineConfiguration(这里的文件名必须为flowable.cfg.xml,否则Flowable识别不到)

2、通过编写程序的方式来构造ProcessEngineConfiguration对象

ProcessEngineConfiguration在初始化过程中会同时初始化数据库,如果数据库已经存在,则不会做创建更新操作,如果数据库不存在,则会默认执行数据库创建脚本。

         Flowable 学习笔记

                                                                       流程引擎API架构图

四、流程引擎

1、简单了解Bpmn

      1.1Task任务:

           用户任务(userTask)

           系统任务(serviceTask )

     1.2Event事件:

         定时器事件(timerEventDefinition)

     1.3Gateway网关:

          排他网关(exclusive gateway)

2、目标:实现以下简化版的请假流程

             Flowable 学习笔记
                                                       请假流程图(简单版)

步骤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的用户、组、租户的时候可以用以下思路来处理:

                     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(略作修改)。