Flowable工作流引擎
一、BPMN2.0协议:
模型与符号说明:http://www.bpmb.de/images/BPMN2_0_Poster_CHN.PDF
BPMN 2.0(Business Process Model and Notation)是一种用于描述业务流程的图形化标准。它提供了一套统一的符号和规范,用于创建可视化的流程模型,以便更好地理解、分析和改进业务流程。BPMN 2.0协议定义了一系列元素和符号,用于表示流程中的活动、事件、网关、任务、序列流等。这些元素包括:
1、Start Event(开始事件):
表示流程的起点。它是流程的第一个元素,标志着流程的开始。可以有不同类型的开始事件,如None(无特定行为)、Message(消息触发)、Timer(定时触发)等。
2、End Event(结束事件):
表示流程的终点。它标志着流程的结束,可以有不同类型的结束事件,如None(无特定行为)、Message(消息结束)等。
3、Intermediate Event(中间事件):
表示在流程执行过程中发生的事件,位于流程的中间位置。可以用于触发某个操作或引起流程的变化。常见的中间事件包括Message(消息触发)、Timer(定时触发)、Signal(信号触发)等。
4、Task(任务):
表示需要执行的具体工作或活动。任务可以是人工任务(Human Task),需要由人员完成,也可以是自动任务(Service Task),由系统或服务执行。任务通常用一个方框表示,可以定义任务的属性、输入和输出数据。
5、Gateway(网关):
表示流程中的决策点。根据不同的条件,网关可以控制流程的分支和合并。常见的网关包括:
- 互斥网关(Exclusive Gateway):又称排他网关,有且仅有一个有效出口,可以理解为if......else
- 并行网关(Parallel Gateway):所有出口路径均会被执行,无需等待其他分支完成,可以理解为开多线程同时执行多个任务。
- 包含网关(Inclusive Gateway):只要满足条件的出口都会执行,可以理解为 if(......) do,所有的条件判断都是同级别的。
6、Sequence Flow(序列流):
表示流程中不同元素之间的连接线,表示流程的执行顺序。序列流用箭头表示,从一个元素指向另一个元素。
7、Data Object(数据对象):
表示流程中用于存储和传递数据的对象。数据对象可以是输入、输出或中间结果数据。它们可以是具体的数据实体、文档或消息。
8、Sub-Process(子流程):
表示一个独立的子流程,可以在主流程中嵌套使用。子流程可以有自己的开始事件、结束事件和任务等。子流程通常用一个矩形框表示,并与主流程以边界事件或调用活动进行连接。
9、Pool(泳道):
用于将不同的参与者或角色分组,以显示流程中的不同业务单位或组织。泳道可以帮助清晰地表示各个参与者之间的责任和关系。
10、Message(消息):
用于在不同的流程之间发送和接收消息。消息可以触发特定的行为或引起流程的变化,可以是同步消息或异步消息。
通过使用这些BPMN 2.0协议元素,并结合其属性和连接关系,可以创建清晰、可视化且易于理解的业务流程模型。这些元素提供了一种统一的符号系统,使得不同的利益相关者能够共享和交流对于业务流程的理解和设计。
二、Flowable工作流引擎:
官方手册:https://tkjohn.github.io/flowable-userguide/#_introduction
1、简介:
Flowable是BPMN的一个基于java的软件实现,不过Flowable不仅仅包括BPMN,还有DMN决策表和CMMN Case管理引擎,并且有自己的用户管理、微服务API等一系列功能,是一个服务平台。
2、Flowable数据库说明:
工作流程的相关操作都是操作存储在对应的表结构中,为了能更好的弄清楚Flowable的实现原理和细节,有必要先弄清楚Flowable的相关表结构及其作用。
在Flowable中的表结构在初始化的时候会创建五类表结构,具体如下:
- ACT_RE_* 表:'RE’表示 repository,这些表存储流程模型相关的信息,包括流程定义、流程图、表单等。其中,ACT_RE_PROCDEF 表存储流程定义信息,包括流程定义 ID、名称、版本号、是否挂起等。
- ACT_RU_* 表:'RU’表示 runtime,这些表存储流程运行时的数据,如任务实例、执行实例等。其中,ACT_RU_TASK 表存储任务相关的信息,包括任务 ID、名称、所属流程实例 ID、受理人、创建时间、到期时间、优先级等。
- ACT_HI_* 表:'HI’表示 history,这些表存储历史数据,如历史任务、历史变量等。其中,ACT_HI_TASKINST 表存储历史任务相关的信息,包括任务 ID、名称、所属流程实例 ID、受理人、开始时间、结束时间、耗时等。
- ACT_ID_* 表:'ID'表示identity,这些表存储身份认证相关的数据,如用户、用户组等信息。其中,ACT_ID_USER 表存储用户相关的信息,包括用户 ID、用户名、密码、邮箱等。
- ACT_GE_* 表:'GE' 表示 general,这些表存储通用的流程引擎数据,如定时任务、变量等。其中,ACT_GE_PROPERTY 表存储引擎属性相关的信息,如数据库类型、版本号、时间戳等。
(1)、一般数据对应表:
表名 | 表说明 |
---|---|
ACT_GE_BYTEARRAY | 通用的流程定义和流程资源 |
ACT_GE_PROPERTY | 系统相关属性 |
(2)、流程历史记录表:
表名 | 表说明 |
---|---|
ACT_HI_ACTINST | 历史的流程实例 |
ACT_HI_ATTACHMENT | 历史的流程附件 |
ACT_HI_COMMENT | 历史的说明性信息 |
ACT_HI_DETAIL | 历史的流程运行中的细节信息 |
ACT_HI_IDENTITYLINK | 历史的流程运行过程中用户关系 |
ACT_HI_PROCINST | 历史的流程实例 |
ACT_HI_TASKINST | 历史的任务实例 |
ACT_HI_VARINST | 历史的流程运行中的变量信息 |
(3)、用户用户组表:
表名 | 表说明 |
---|---|
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 | 用户表 |
(4)、流程定义表:
表名 | 表说明 |
---|---|
ACT_RE_DEPLOYMENT | 部署单元信息 |
ACT_RE_MODEL | 模型信息 |
ACT_RE_PROCDEF | 已部署的流程定义 |
(5)、运行实例表:
表名 | 表说明 |
---|---|
ACT_RU_DEADLETTER_JOB | 正在运行的任务表 |
ACT_RU_EVENT_SUBSCR | 运行时事件 |
ACT_RU_EXECUTION | 运行时流程执行实例 |
ACT_RU_DEADLETTER_JOB | 历史作业表 |
ACT_RU_EVENT_SUBSCR | 运行时用户关系信息 |
ACT_RU_EXECUTION | 运行时作业表 |
ACT_RU_DEADLETTER_JOB | 暂停作业表 |
ACT_RU_EVENT_SUBSCR | 运行时任务表 |
ACT_RU_EXECUTION | 定时作业表 |
ACT_RU_EXECUTION | 运行时变量表 |
(6)、其他表:
表名 | 表说明 |
---|---|
ACT_EVT_LOG | 事件日志表 |
ACT_PROCDEF_INFO | 流程定义信息 |
3、Flowable-Service-API:
引擎API是与Flowable交互的最常用手段。总入口点是ProcessEngine
。像配置章节中介绍的一样,ProcessEngine可以使用多种方式创建。使用ProcessEngine,可以获得各种提供工作流/BPM方法的服务。ProcessEngine与服务对象都是线程安全的,因此可以在服务器中保存并共用同一个引用。
Service-API |
说明 |
RepositoryService |
用于管理和操作流程定义和部署相关的操作 |
相关实现 |
1、createDeployment():创建一个新的流程部署,并将流程定义部署到Flowable引擎中。 2、deploy():部署已创建的流程定义。 3、deleteDeployment():删除已部署的流程定义。 |
|
|
RuntimeService |
用于启动、查询和管理流程实例和执行流程任务 |
相关实现 |
1、startProcessInstanceByKey():根据流程定义的key启动一个新的流程实例。 2、startProcessInstanceById():根据流程定义的ID启动一个新的流程实例。 3、createExecutionQuery():创建一个查询,用于查询流程实例和执行流程任务。 4、signal():向流程实例发送一个信号,触发相应的流程执行。 |
|
|
TaskService |
用于管理和操作流程任务 |
相关实现 |
1、createTaskQuery():创建一个查询,用于查询流程任务。 2、complete():完成一个流程任务。 3、claim():领取一个未被领取的流程任务。 |
|
|
HistoryService |
用于访问和查询历史数据 |
相关实现 |
1、createHistoricProcessInstanceQuery():创建一个查询,用于查询历史流程实例。 2、createHistoricTaskInstanceQuery():创建一个查询,用于查询历史任务。 |
三、Spring Boot整合流程引擎Flowable:
1、审批人管理:
2、动态表单:
3、网关:
4、相关案例参考:
四、相关参考: