工作流引擎。Flowable流程引擎可用于部署BPMN 2.0流程定义(用于定义流程的行业XML标准), 创建这些流程定义的流程实例,进行查询,访问运行中或历史的流程实例与相关数据

flowable使用

文档地址

http://doc.miguren.cn/bpmn/#_introduction

flowable-ui

flowable 默认使用内存数据库(h2数据库)。

war包运行

https://github.com/flowable/flowable-engine/releases/download/flowable-6.4.2/flowable-6.4.2.zip

镜像运行

flowable-ui 具有完整的功能。访问地址:http://127.0.0.1:8080/flowable-ui/idm/#/login。

  1. docker run -d -p8080:8080 flowable/flowable-ui
  2. 账号:admin
  3. 密码:test

flowable-rest 只提供了api的功能。

  1. docker run -p8080:8080 flowable/flowable-rest
  2. 账号:rest-admin
  3. 密码:test

项目集成

流程模型的用处是什么???
一次流程部署可能会涉及到多个流程定义文件,因此流程定义表中存了流程部署的id。
怎么获取流程id?
怎么获取流程当前的执行id?
怎么判断流程已经结束?=> 在历史流程当中是否能查找到这个流程id。

flowable-api 接口服务。

flowable-ui集成。

流程定义 使用流程设计器。流程定义需要遵循bpmn2.0规范,最终就是形成一个xml文件。

流程定义文件包含俩部分,一个是流程定义部分,一个是可视化部分。

SpringProcessEngineConfiguration,含有Spring容器的任务。

数据库的sql文件放在flowable-engine-common-6.4.2.jar中,目录为 org/flowable/common/db/

流程引擎配置

ProcessEngineConfiguration

流程引擎配置,可以使用xml文件配置,也可以使用javabean的方式配置。

StandaloneProcessEngineConfiguration,单独运行
SpringProcessEngineConfiguration,spring环境
JtaProcessEngineConfiguration,JTA事务

databaseSchemaUpdate

update,true,不存在的时候就更新。
update,false,不存在的时候就报错。
create-drop,引擎创建时创建表结构,并在引擎关闭时删除表结构。

flowable - 图1

概念

流程引擎

ProcessEngine,流程引擎会将流程定义存储在数据库中。流程定义的id是64位大小,key就是xml文件的id。

流程定义

ProcessDefinition,一般是xml文件。xml文件包含可视化部分(图形部分)和流程定义元素部分。一个流程定义文件可以包含多个流程定义(process信息)。流程定义中可以包含流程变量。需要遵循bmpn2.0规范(展现流程的注记方法)。流程文件最终需要转换成bpmnModel(也就是java对象)。

流程实例

流程定义启动之后就变成了流程实例。

流程变量

流程定义:

  1. 事件:
    1. 按触发的位置分类
      1. 开始事件(start event),是流程的起点。
        1. 定时启动事件
      2. 结束事件(end event)。
      3. 中间事件,单独作为流程节点的事件。
      4. 边界事件,附属于某个流程节点的事件。
    2. 按触发的类型分类
      1. 捕获事件,一直等待,直到被触发。
        1. 开始事件都是捕获事件,
        2. 信号事件(广播信号)
        3. 消息事件
      2. 抛出事件,自动触发,并返回结果。
  2. 任务类型:系统任务 和 用户任务。任务的执行是原子性的,只会从上一个等待任务到达下一个等待任务。
    1. 用户任务(userTask),流程中人类用户操作的步骤。用户任务可以跟角色关联起来。
    2. 系统任务,自动执行的步骤。
      1. 脚本任务(script task)
      2. java服务任务 (service task),实现JavaDelegate接口的任务
      3. java接收任务(receive task),实现Java
  3. 网关,可以选择流程的走向。
    1. 排他网关(exclusive gateway),从可选路径中只能选择一条。
    2. 包容网关(inclusive gateway),计算条件。
    3. 并行网关(parallel gateway),不计算条件。
    4. 事件网关(event-based gateway),必须要有俩条执行路径,比如一条路径等待信号,另外一条路径开启定时器,在指定的事件后执行。
  4. 流:定义流程的走向。
    1. 顺序流(sequence flow)
    2. 条件顺序流(conditional flow)
    3. 默认顺序流(defaullt sequence flow)
  5. 流程变量:流程变量是用户任务中输入的变量,网关可以根据这个流程变量选择不同的顺序流走向。
    1. 使用el表达式,${}。
  6. 事务(事务的执行必须是原子性的)
    1. 同步延续
    2. 异步延续
  7. 数据对象(自定义的数据结构)
  8. 自定义扩展
    1. flowable:命名空间的前缀,表示是flowable扩展的元素。

事件的介绍,

启动事件 指明事件发起人,flowable:initiator=”initiator” => 好像也可以设置认证人authenticate user。

流程实例可以通过id启动,也可以通过key启动。流程实例跟流程实例的主执行流实际上是同一条记录。

CandidateUsers,CandidateGroups 和 Assignee,Candidate 需要申领,Assignee为受理人。也就是一种是指派,另外一种是认领。

带有flowable: 前缀的表示自定义扩展。

execution执行,就是当前指针,执行流。

流程变量分为全局变量和局部变量,getVaribaleLocal只能获取局部变量的值,而getVariable可以获取局部变量的值,也可以获取全局变量的值。局部变量的值,在对应的任务执行节点执行完之后,就不能在获取到。

receive Task => trigger task。接收任务用左上角有一个消息图标

userTask => complete

signalEventReceived,messageEventReceived,

skip expression,设置为true的时候,任务才能自动完成。

delegationState,委托状态。pedding 等待解决 和 resolved 解决委托任务。 委托任务,任务还是挂在委托人的身上。

turnTask,转办任务,改变任务的受理人。

assignee,任务的受理人。

owner,任务的委托人。

审核不通过,功能怎么没有的???

子流程(subProcess)。

子任务(subTask)。

用户组和用户管理

可以使用NativeSql进行源生数据的查询。

终止执行流,将所有的执行流全部移到结束节点。

怎么还有一个汇签的功能???

异步执行器和定时任务

  1. <property name="asyncExecutorActivate" value="true" />
  2. <property name="history" value="audit" />

避免每次都读取数据库,会设置流程定义缓存processDefinitionCacheLimit,使用了LRU算法。

日志怎么实现动态绑定?

事件处理器:

FlowableEventListener ,事件监听器。BaseEntityEventListener

isFailOnException,是否需要忽略事务监听器执行时的代码异常。

typedEventListeners,eventListeners。类型监听器,只监听对应类型的事件。

事件监听的顺序,普通监听器按照在list里面的定义执行,然后再是某类型的事件。

工作流结束的时候,运行时的数据都会清空,只会在历史数据中存在。

全局事件监听器,FlowableEventDispatcher ,设置 FlowableEventListener。

flowable-api

RepositoryService

将流程定义部署到流程引擎当中。存储的是静态的数据。
查询引擎现有的部署与流程定义。
暂停或激活部署中的某些流程
获取各种资源,比如说流程图。
删除部署资源,如果不进行级联删除的话,如果部署的流程定义被流程实例引用,则将会删除出错。

RuntimeService

部署了之后,就需要使用RuntimeService服务来进行启动。可以将参数放入到流程启动的时候,也就是启动参数。存储的是动态的数据。
可以添加事件监听器 和 移除事件监听器。可以分发事件。
改变当前流程实例的运行状态(启动,终端,停止流程)。

TaskService

用户任务,根据条件查询有哪些任务。也可以查看跟当前任务关联的流程变量。

创建独立运行任务。

决定任务的执行用户。

添加任务监听器(taskListener)

认领任务(claim task)。使用候选组,候选人的方式需要认领任务。

完成任务(complete task)。

javaDelegate,java委托

dataObject,在xml文件中自动映射为流程变量。

IdentityService

用于管理组和用户

setAuthenticatedUserId,设置启动人的事件。

FormService

表单服务,是一个可选服务。开始表单是流程实例启动前显示的表单,而任务表单是完成任务时显示的表单。

HistoryService

查看所有流程实例的审计数据和历史数据。

ManagementService

管理服务。

DynamicBpmnService

可用于修改流程定义中的部分内容,而不需要重新部署它

表定义

  • ACTRE* :’ RE ’表示repository(存储)。RepositoryService接口操作的表。带此前缀的表包含的是静态信息,如,流程定义,流程的资源(图片,规则等)。
  • ACTRU* :’ RU ’表示runtime。这是运行时的表存储着流程变量,用户任务,变量,职责(job)等运行时的数据。flowable只存储实例执行期间的运行时数据,当流程实例结束时,将删除这些记录。这就保证了这些运行时的表小且快。
  • ACTID* : ’ ID ’表示identity(组织机构)。这些表包含标识的信息,如用户,用户组,等等。
  • ACTHI* : ’ HI ’表示history。就是这些表包含着历史的相关数据,如结束的流程实例,变量,任务,等等。
  • ACTGE* : 普通数据,各种情况都使用的数据。
表分类 表名 表说明
一般数据(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 流程定义信息

springboot集成flowable-modeler

代码下载:

https://github.com/gitonlie/flowable-ui.git

导入配置

@Import(value={
        // 引入修改的配置
        ApplicationConfiguration.class,
        AppDispatcherServletConfiguration.class,
        SecurityUtils.class})

mybatis配置

mybatis-plus:
  mapper-locations: classpath*:mapper/**/*Mapper.xml
  mapper-locations: classpath*:mapper/**/*Mapper.xml,classpath*:/META-INF/modeler-mybatis-mappings/*.xml
  type-aliases-package: com.ourway.its.**.entity
  typeEnumsPackage: com.ourway.its.**.enums  # 支持统配符 * 或者 ; 分割
  global-config:
    id-type: ASSIGN_ID
    capital-mode: true
    db-config:
      logic-delete-field: deleted  #全局逻辑删除字段值 3.3.0开始支持,详情看下面。
      logic-delete-value: 1        # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0    # 逻辑未删除值(默认为 0)
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  configuration-properties:
    prefix:
    blobType: BLOB
    boolValue: TRUE