Flowable的实体基本概念:
1 流程定义(Process Definition)和流程实例(Process Instance)。
前者定义流程的模板(比如请假的审批规则),后者是每个运行时生成的流程实例(比如某次请假的审批申请)。所以前者使用Flowable的RepositoryService管理,后者使用RuntimeService管理。
2 事件(event)、任务(task)、顺序流(sequence flow)、网关(gateway)
事件是系统预设的操作节点,常用的事件有startEvent和endEvent,标记一个流程定义的起始和结束。
任务是最常见的操作节点,是工作流的核心组成部分。用户任务是需要用户界面操作的(比如上级审批、老板审批),服务任务是系统处理的(比如执行某些条件后,标记完成向下流转)等。用户任务需指定任务执行人,服务任务需指定执行的服务(如java类)。
流是将不同的事件或任务连接起来的有向箭头。流上可以附加条件,仅条件满足时才流动。
网关用于统筹不同的流,通过排他网关(根据条件N选1),并行网关(无条件N个并行),相容网关(根据条件N选m),事件网关(根据事件和逻辑决定选择),实现流的条件。排他网关举例:请假<4天,A审批;>=4天,B审批。
3 活动(activity)
是BPMN 2.0概念,意为每个执行节点。event、task、flow、gateway都是一个activity。每个活动有一个id,唯一标志。
4 执行(execution)
指当前流程实例执行到的节点,可以理解为一个指针,指向当前活跃的活动(activity)。一个流程实例同一时间点可能有多个执行(如并行网关指向多个task)。
其他概念:
1 部署(deployment)
指将定义的流程xml作为流程定义存储到数据库,使其支持生成流程实例的过程。
2 任务执行人
执行人可以通过assignee(指定某个人执行)、candidateUsers(指定某些人执行)、candidateGroups(指定某些组合执行)来完成一个或多个执行人指定。执行人按先到先得的规则进行任务执行。
3 事件监听器(Listener)
Flowable对不同实体定义了许多事件(注意:该事件不是上文提到的event实体,而是一个动作触发的告知事项)。事件(在可用时)提供type
, executionId
, processInstanceId
与processDefinitionId
。
事件监听器对上述事件进行监听可以对指定的activity定义一个Listener。
常用的示例:
1)TaskListener:对task的监听关联的create, assignment, comleted, deleted四种事件。可以使用TaskListener对指定的Task进行监听。TaskListener 的事件类型和执行时机是与任务相关的,它可以访问任务相关的信息,并可以对任务进行操作(例如设置任务的执行人 、 指定任务的代理人 、 发送通知 等),因此通常用于处理与任务相关的事件。
2)ExecutionListener:对activity(包括sequenceFlow)的监听关联的start, take, end三种事件,可以使用ExecutionListener监听(也可以对event节点监听),可以捕获的事件:1.流程实例的启动和结束。2.流程执行转移。3.活动的启动和结束。4.网关的启动和结束。5.中间事件的启动和结束。6.启动事件的结束,和结束事件的启动。ExecutionListener 的事件类型和执行时机都是固定的,它不能直接访问任务相关的信息(例如任务的候选人、任务的执行者等)。
3)FlowableEventListener,资料较少,目前理解是全局事件监听器,用于定义整个流程实例中,指定的event执行逻辑(包括每种实例的每个event),对processInstance中的所有task对应的event生效。功能更普适,但配置成本更高,且对所有同类型事件生效(如Task-Created等)。和上述的两种Listener互为补充。
中文用户文档:Flowable BPMN 用户手册 (v 6.3.0)
代码攻略:采用springboot+flowable快速实现工作流_spring boot 工作流 vue-CSDN博客
https://www.cnblogs.com/zhlblogs/p/14041899.html