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一般有两种方式: 通过Spinrg配置文件进行依赖注入,通过flowable.cfg.xml文件来初始化ProcessEngineConfiguration(这里的文件名必须为flowable.cfg.xml,否则Flowable识别不到) 通过编写程序的方式来构造ProcessEngineConfiguration对象 ProcessEngineConfiguration在初始化过程中会同时初始化数据库,如果数据库已经存在,则不会做创建更新操作,如果数据库不存在,则会默认执行数据库创建脚本。 流程引擎初体验 简单了解Bpmn Task任务: 用户任务(userTask) 系统任务(serviceTask ) Event事件: 定时器事件(timerEventDefinition) Gateway网关: 排他网关(exclusive gateway) 目标:实现以下简化版的请假流程 步骤1:定义相应的BPMN文件 步骤2:配置flowable.cfg.xml 步骤3:将流程定义添加到Repository仓储中 步骤4:Runtime开始一个流程实例 Flowable的用户权限体系 在接入Flowable的用户权限体系的时候,有四种方式: 使用Flowable提供的默认IdmEngine进行用户体系管理,该引擎包含了用户、组的概念。 集成LDAP,实现轻量级用户权限管理。通过IdentityService进行认证,用于由IdentityService处理所有认证业务的场景。 实现IdmIdentityService接口,自定义实现用户、组的查询 接入自定义的权限体系 用户id => 获取到租户id、角色id集、部门id集 单用户(assignee="用户id")、多用户(candidateUsers="用户id1,用户id2") 单角色、多角色(candidateGroups=":角色id1,:角色id2") 单部门、多部门(candidateGroups="部门id1:,部门id2:") 角色或部门(candidateGroups="角色id1:, :部门id1") 角色且部门 使用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文件 四、自定义权限的表达式,例如: 其中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_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 资源文件表