一、启动流程
流程定义与实例的关系类似于Java的类与对象,通过定义的id创建流程实例,编写测试代码:
package org.example.flowabledemo2;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.runtime.ProcessInstance;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class ProcessTest {
@Autowired
private RuntimeService runtimeService;
/**
* 发起流程
*/
@Test
public void startProcess() {
String id = "FirstFlow:1:95cad374-2702-11ef-8d5d-644ed7087863";
// 根据流程定义ID启动流程
ProcessInstance processInstance = runtimeService.startProcessInstanceById(id);
}
}
运行测试后,在act_ru_task中可以查看到正在执行的流程信息。
每启动一个流程会在act_hi_procinst表中多一条启动记录,然后会在act_ru_execution表中记录流程的分支。
二、流程审批
查询待办信息并根据id审批任务:
package org.example.flowabledemo2;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.TaskService;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.task.api.Task;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
public class ProcessTest {
@Autowired
private TaskService taskService;
/**
* 根据用户查询待办信息
*/
@Test
public void findFlow() {
// 获取到 act_ru_task 中 assignee 字段是 zhangsan 的信息
List<Task> list = taskService.createTaskQuery().taskAssignee("zhangsan").list();
// 获取该用户待办事项
System.out.println(list);
// 根据id进行审批
for (Task task : list) {
// 根据Id审批任务
taskService.complete(taskId);
}
}
}
运行后查看act_ru_task表,任务进度到达了经理审批。
在通过lisi用户查询任务进行审批,查看act_ru_task表已空,说明已经没有待办任务了。
三、各个Service服务
Service是工作流引擎提供用于进行工作流部署、执行、管理的服务接口,我们使用这些接口可以操作服务对应的数据库。所有Service都可以通过ProcessEngine获取,springboot中也可以通过自动注入获取。
1、RepositoryService
Flowable资源管理类。很可能是使用 Flowable 引擎要用的第一个服务。这个服务提供了管理与控制部署(deployments) 与流程定义 (process definitions) 的操作。
2、RuntimeService
Flowable流程运行管理类。与提供静态信息(也就是不会改变,至少不会经常改变的信息)RepositoryService 相反, 用于启动流程定义的新流程实例。
3、TaskService
Flowable任务管理类。 对于像 Flowable 这样的 BPM 引擎来说,核心是需要人类用户操作的任务。所有任务相关的东西都组织在 TaskService 中,例如:查询分派给用户或组的任务创建独立运行 (standalone) 任务。这是一种没有关联到流程实例的任务。决定任务的执行用户 (assignee) ,或者将用户通过某种方式与任务关联。认领 (claim) 与完成 (complete) 任务。认领是指某人决定成为任务的执行用户,也即他将会完成这个任务。完成任务是指 “ 做这个任务要求的工作 ” ,通常是填写某个表单。
4、IdentityService
它用于管理(创建,更新,删除,查询 …… )组与用户。请注意, Flowable 实际上在运行时并不做任何用户检查。例如任务可以分派给任何用户,而引擎并不会验证系统中是否存在该用户。这是因为 Flowable 有时要与 LDAP 、 Active Directory 等服务结合使用。
5、FormService
是可选服务。也就是说 Flowable 没有它也能很好地运行,而不必牺牲任何功能。这个服务引入了开始表单(start form)与任务表单 (task form) 的概念。 开始表单是在流程实例启动前显示的表单,而任务表单是用户完成任务时显示的表单。 Flowable 可以在 BPMN 2.0 流程定义中定义这些表单。表单服务通过简单的方式暴露这些数据。再次重申,表单不一定要嵌入流程定义,因此这个服务是可选的。
6、HistoryService
暴露 Flowable 引擎收集的所有历史数据。当执行流程时,引擎会保存许多数据(可配置),例如流程实例启动时间、谁在执行哪个任务、完成任务花费的事件、每个流程实例的执行路径,等等。这个服务主要提供查询这些数据的能力。
7、ManagementService
通常在用 Flowable 编写用户应用时不需要使用。它可以读取数据库表与表原始数据的信息,也提供了对作业 (job) 的查询与管理操作。 Flowable 中很多地方都使用作业,例如定时器 (timer) ,异步操作 (asynchronouscontinuation) ,延时暂停 / 激活 (delayed suspension/activation) 等等。