Skip to main content

Flowable 框架


Flowable 框架学习笔记

Flowable 入门介绍

官网地址:flowable.org

Flowable BPMN 用户手册 (v 6.3.0)

Flowable BPMN 用户手册 (v 6.4.2-SNAPSHOT)

Flowable BPMN 用户手册 (v 6.5.0-SNAPSHOT)

可以在官网下载对应的jar包在本地部署运行,官方提供了下面的五个应用程序:

  • Flowable Modeler:流程定义管理

  • Flowable Task:用户任务管理

  • Flowable IDM:用户组权限管理

  • Flowable REST API:流程引擎对外提供的API接口

  • Flowable Admin:后台管理

初识Flowable五大引擎

Flowable有五大引擎,每个之间都是相互独立互不影响。

ProcessEngine是里面最核心也是最重要的一个引擎,如果失去它那Flowable也就意义了。

五大引擎

流程引擎使用架构

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

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

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

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

流程引擎API架构图

模型图

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

流程引擎初体验

  1. 简单了解Bpmn

    1. Task任务:

      用户任务(userTask)

      系统任务(serviceTask )

    2. Event事件:

      定时器事件(timerEventDefinition)

    3. Gateway网关:

      排他网关(exclusive gateway)

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

请假流程图(简单版)

  • 步骤1:定义相应的BPMN文件

  • 步骤2:配置flowable.cfg.xml

  • 步骤3:将流程定义添加到Repository仓储中

  • 步骤4:Runtime开始一个流程实例

Flowable的用户权限体系

在接入Flowable的用户权限体系的时候,有四种方式:

  1. 使用Flowable提供的默认IdmEngine进行用户体系管理,该引擎包含了用户、组的概念。

  2. 集成LDAP,实现轻量级用户权限管理。通过IdentityService进行认证,用于由IdentityService处理所有认证业务的场景。

  3. 实现IdmIdentityService接口,自定义实现用户、组的查询

  4. 接入自定义的权限体系

    用户id => 获取到租户id、角色id集、部门id集

    1. 单用户(assignee="用户id")、多用户(candidateUsers="用户id1,用户id2")

    2. 单角色、多角色(candidateGroups=":角色id1,:角色id2")

    3. 单部门、多部门(candidateGroups="部门id1:,部门id2:")

    4. 角色或部门(candidateGroups="角色id1:, :部门id1")

    5. 角色且部门

使用Flowable工作流引擎的时候,不可避免就需要考虑相应的用户权限,

根据官方文档提供的教程,实现Flowable的用户权限体系总共有两大类:

Flowable提供的IdmEngine身份识别引擎

使用Flowable提供的IdmEngine,也有三种方案:

  • 方案一: Flowable默认提供的IdmEngine已经实现IdmIdentityService接口,包含对用户、组、权限等的操作;

  • 方案二: 集成LDAP来实现轻量级用户权限管理。LDAP内部已经实现IdmIdentityService接口,包含对用户、组、权限等的操作;

  • 方案三: 自定义实现IdmIdentityService接口,实现对用户、组、权限的操作;

自定义身份识别引擎

有时候在项目上已经实现了自己的用户体系,接入Flowable的工作流引擎时,就需要考虑如何将自己的用户体系映射到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

知道如果映射后,现在的问题就是在哪里去实现这部分的映射关系,以下提供几种实现的思路,目前还没正式验证过,仍处于实验阶段:

  • 一、修改官方的源码

    已知对bpmn的用户任务进行解析的方法类为UserTaskXMLConverter,通过该类的源码可以了解相关的解析机制,在此基础上对自己需要的节点添加相关的解析操作

  • 二、找到官方提供的自定义配置,修改自定义配置属性(还未找到方案)

  • 三、在前端设计bpmn文件的时候,通过相关的方法对id进行映射后生成最终的bpmn文件

  • 四、自定义权限的表达式,例如:<userTask id="approveTask" name="刘备审批" flowable:assignee="#{idmTest.org('emp')}"/>

其中idmTest.org就是用来自定义返回的id集的方法

数据库介绍(34张表)

ACT_RE_ *:RE代表repository。具有此前缀的表包含静态信息,例如流程定义和流程资源(图像,规则等)。

ACT_RU_ *:RU代表runtime。这些是包含运行时的流程实例,用户任务,变量,作业等的运行时数据的运行时表。Flowable仅在流程实例执行期间存储运行时数据,并在流程实例结束时删除记录。这使运行时表保持小而快。

ACT_HI_ *:HI代表history。这些是包含历史数据的表,例如过去的流程实例,变量,任务等。

ACT_GE_ *:general数据,用于各种用例。

ACT_ID_ *:Idm的用户、组

表分类表名表说明
一般数据(2)ACT_GE_BYTEARRAY通用的流程定义和流程资源
ACT_GE_PROPERTY系统相关属性
流程历史记录(8)ACT_HI_ACTINST历史的流程实例
ACT_HI_ATTACHMENT历史的流程附件
ACT_HI_COMMENT历史的说明性信息
ACT_HI_DETAIL历史的流程运行中的细节信息
ACT_HI_IDENTITYLINK历史的流程运行过程中用户关系
ACT_HI_PROCINST历史的流程实例
ACT_HI_TASKINST历史的任务实例
ACT_HI_VARINST历史的流程运行中的变量信息
用户用户组表(9)ACT_ID_BYTEARRAY二进制数据表
ACT_ID_GROUP用户组信息表
ACT_ID_INFO用户信息详情表
ACT_ID_MEMBERSHIP人与组关系表
ACT_ID_PRIV权限表
ACT_ID_PRIV_MAPPING用户或组权限关系表
ACT_ID_PROPERTY属性表
ACT_ID_TOKEN系统登录日志表
ACT_ID_USER用户表
流程定义表(3)ACT_RE_DEPLOYMENT部署单元信息
ACT_RE_MODEL模型信息
ACT_RE_PROCDEF已部署的流程定义
运行实例表(10)ACT_RU_DEADLETTER_JOB正在运行的任务表
ACT_RU_EVENT_SUBSCR运行时事件
ACT_RU_EXECUTION运行时流程执行实例
ACT_RU_HISTORY_JOB历史作业表
ACT_RU_IDENTITYLINK运行时用户关系信息
ACT_RU_JOB运行时作业表
ACT_RU_SUSPENDED_JOB暂停作业表
ACT_RU_TASK运行时任务表
ACT_RU_TIMER_JOB定时作业表
ACT_RU_VARIABLE运行时变量表
其他表(2)ACT_EVT_LOG事件日志表
ACT_PROCDEF_INFO流程定义信息

ACT_HI_ACTINST 流程实例的历史运行节点表

ACT_HI_TASKINST 流程实例的历史任务表

ACT_HI_VARINST 流程实例的历史运行节点的变量表

ACT_HI_PROCINST 流程历史部署记录

ACT_RE_DEPLOYMENT 流程部署

ACT_RE_PROCDEF 流程定义表

ACT_RU_EXECUTION 流程实例执行过程的所有节点记录

ACT_RU_TASK 流程实例运行时的任务表

ACT_RU_VARIABLE 流程实例运行时节点的变量表

ACT_GE_BYTEARRAY 资源文件表