Flowable工作流随笔笔记``
一、Flowable
1、发展
BPM(BusinessProcessManagement),业务流程管理是一种管理原则,通常也可以代指BPMS(BusinessProcessManagementSuite),是一个实现整合不同系统和数据的流程管理软件套件.
BPMN(BusinessProcessModelandNotation)是基于流程图的通用可视化标准。该流程图被设计用于创建业务流程操作的图形化模型。业务流程模型就是图形化对象的网状图,包括活动和用于定义这些活动执行顺序的流程设计器
。BPMN2.0正式版本于2011年1月3日发布,常见的工作流引擎
如:Activiti、Flowable、jBPM 都基于 BPMN 2.0 标准。
2、概念
Flowable是一个开源的工作流引擎,它支持业务流程管理和工作流自动化。这个引擎是用Java编写的,提供了强大的流程执行和管理功能。它允许开发人员定义、部署和执行各种业务流程,包括但不限于审批流程、工作流、报销流程等。
Flowable是一个灵活、轻量级的工作流引擎,可以嵌入到Java应用程序中,并与各种技术栈集成。它支持BPMN 2.0(业务流程建模和标记标准)规范,允许使用图形化方式设计和部署业务流程。
对于有大型项目经验的高级工程师,熟悉Flowable等工作流引擎可以在开发复杂业务流程和自动化任务时提供有力的支持。
3、术语
- Assignee: 任务的受理人,即执行人。它有两种情况(有值,NULL)
- Owner: 任务的委托人。
- CandidateGroup: 候选用户组
- CandidateUser: 候选人
- delegateTask: 委派任务/签收的任务
- resolveTask: 委派任务的代办,任务的拥有者把任务委派他人来办理,他人办完后,又重新回到任务拥有者,会产生流转记录。
- turnTask: 转办任务,只是改变当前任务的办理人而已,不会产生流转记录。
- CompleteTask: 完成任务,或叫办结提交下一步。
- claimTask:任务签收
- 或签(Any-Or-Sign): 或签是指在一个审批流程中,多个审批人中的任何一个人审批通过即可。换句话说,只要有一个人同意,整个流程就被批准。这适用于某些情况下不需要所有人都同意的场景,只需满足其中一个条件即可通过。
- 会签(All-Or-Sign): 会签是指所有的审批人都必须同意才能使整个流程通过。在这种情况下,每个审批人都有权利对流程提出异议,如果有一个人不同意,整个审批就会被拒绝,即一票否决权。
- 加签(counter-signing)是指在流程执行过程中,动态地向流程中添加新的参与者或任务。加签通常用于在流程执行过程中引入额外的审批人或任务,以便他们能够对特定的流程实例或任务进行审批或处理。
4、XML组件定义
组件 | 释义 |
---|---|
process |
表示一个完整的工作流程 |
startEvent |
工作流中起点位置,绿色按钮 |
endEvent |
工作流中结束位置,红色按钮。 |
userTask |
代表一个任务审核节点(组长、经理等角色),这个节点上有一个 flowable:assignee 属性,这表示这个节点该由谁来处理,将来在 Java 代码中调用的时候,我们需要指定对应的处理人的 ID 或者其他唯一标记。 |
serviceTask |
这是服务任务,在具体的实现中,这个任务可以做任何事情。 |
exclusiveGateway |
逻辑判断节点,相当于流程图中的菱形框。 |
sequenceFlow |
链接各个节点的线条,sourceRef 属性表示线的起始节点,targetRef 属性表示线指向的节点【箭头线段】 |
conditionExpression |
自定义流转条件的表达式,应用于流程线上,示例值:${wfCustomUserHandler.strList(execution, '自定义参数')} 或者 ${days > 5} |
二、表、类
1、关系说明
流程定义提供了业务流程的结构、逻辑和行为,而流程实例是对流程定义的具体实例化,表示正在执行的业务流程。多个流程实例可以同时存在,每个实例都有自己的状态、数据和执行路径。
例如,考虑一个简单的请假流程。流程定义定义了请假流程的各个步骤、审批人和条件。当员工发起请假请求时,会创建一个新的流程实例,该实例遵循流程定义的规定,经过审批步骤,最终完成或终止。如果另一位员工也发起了请假请求,将创建另一个独立的流程实例,与第一个流程实例并行执行。
- 一个流程模型(
act_de_model
)部署后可以有多个流程定义(act_re_procdef
),即一对多; - 一个流程定义可以有多个流程实例(
act_hi_procinst
),即一对多;
2、Java类
①、Service总览
service名称 | service作用 |
---|---|
RepositoryService | 资源管理类,它提供用于管理和操作部署和流程定义(BPMN )的操作,主要负责一些静态的配置,获得流程定义的pojo版本, 可以用来通过java解析流程,而不必通过xml。 |
RuntimeService | 流程运行管理类,负责一些动态的任务,如启动一个新的实例,通常一个流程可以对应多个实例。它也用于检索和储存一些流程变量,比如在单向网关组件中需要传递之前的选择。 |
TaskService | 任务管理类,主要和分配给人的任务相关,比如将任务分配给用户 |
HistoryService | 历史管理类,可以查询历史信息,执行流程时,引擎会保存很多数据(根据配置),比如流程实例启动时间,任务的参与者, 完成任务的时间,每个流程实例的执行路径,等等。 这个服务主要通过查询功能来获得这些数据。 |
②、关键名称说明
类 | 释义 |
---|---|
ProcessDefinition | 流程的定义,也就相当于规范,每个 ProcessDefinition 都会有一个 id。 |
ProcessInstance | 流程的一个实例。简单来说,ProcessDefinition 相当于是类,而 ProcessInstance 则相当于是根据类 new 出来的对象。 |
Activity | Activity 是流程标准规范 BPMN2.0 里面的规范,流程中的每一个步骤都是一个 Activity。 |
Execution | Execution 的含义是流程的执行线路,通过 Execution 可以获得当前 ProcessInstance 当前执行到哪个 Activity了。 |
Task | Task 就是当前要做的工作。 |
ProcessEngineConfiguration | 类通过读取xml文件配置流程引擎 |
IdentityService | 主要负责用户的管理 |
FormService | 可选的服务,主要负责开始表单和结束表单 |
DynamicBpmnService | 可以动态的添加新的流程 |