Activiti 学习(三)—— Activiti 流程启动并完成

2年前 (2022) 程序员胖胖胖虎阿
239 0 0

Activiti 流程启动

流程定义部署后,就可以通过工作流管理业务流程了,也就是说前文部署的出差申请流程可以使用了。针对该流程,启动一个流程表示发起一个新的出差申请单,这就相当于 java 类与 java 对象的关系,类定义好后需要创建一个对象使用,也可以创建多个对象。对于出差申请流程,张三发起一个出差申请单需要启动一个流程实例,李四发起一个出差申请单也需要启动一个流程实例

Activiti 流程启动主要有两种方式,分别是根据 processDefinitionKey 启动和根据 processDefinitionId 启动

1. 根据 processDefinitionKey 启动

processDefinitionKey 就是 act_re_procdef 表的 KEY_ 字段的值,是对应的流程定义的 key

@Test
public void testStartProcess() {
    // 1. 创建 ProcessEngine
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    // 2. 获取 RuntimeService
    RuntimeService runtimeService = processEngine.getRuntimeService();
    // 3. 根据 processDefinitionKey 启动流程
    ProcessInstance instance = runtimeService.startProcessInstanceByKey("evection");
}

2. 根据 processDefinitionId 启动

processDefinitionId 就是 act_re_procdef 的主键 ID 例如 evection:1:22503

@Test
public void testStartProcess() {
    // 1. 创建 ProcessEngine
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    // 2. 获取 RuntimeService
    RuntimeService runtimeService = processEngine.getRuntimeService();
    // 3. 根据 processDefinitionKey 启动流程
    ProcessInstance instance = runtimeService.startProcessInstanceById("evection:1:22503");
}

Activiti 个人任务查询

流程启动后,任务的负责人就可以查询自己当前需要处理的任务,查询出来的任务都是该用户的待办任务

public void testFindPersonTaskList() {
    // 1. 获取流程引擎
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    // 2. 获取 taskService
    TaskService taskService = processEngine.getTaskService();
    // 3. 获取流程 key 和任务的负责人,查询任务
    List<Task> taskList = taskService.createTaskQuery()
        .processDefinitionKey("evection")   // 流程key
        .taskAssignee("zhangsan")   // 要查询的负责人
        .list();
    // 4. 输出
    for (Task task : taskList) {
        System.out.println("流程实例 id = " + task.getProcessInstanceId());
        System.out.println("任务 id = " + task.getId());
        System.out.println("任务负责人 = " + task.getAssignee());
        System.out.println("任务名称 = " + task.getName());
    }
}

Activiti 完成个人任务

根据任务 id,也就是 查找任务并处理

public void completeTask() {
    // 1. 获取流程引擎
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    // 2. 获取 TaskService
    TaskService taskService = processEngine.getTaskService();
    // 3. 根据任务id 完成任务
    taskService.complete("25005");
}

每次都要查找任务 id 很麻烦,一般来说,是任务负责人查询待办任务,选择任务进行处理,完成任务,那我们就能根据任务负责人和任务 key 来查找任务并完成

public void completeTask() {
    // 1. 获取流程引擎
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    // 2. 获取 TaskService
    TaskService taskService = processEngine.getTaskService();
    // 3. 获取 jerry - evection 对应的任务
    Task task = taskService.createTaskQuery()
        .processDefinitionKey("evection")
        .taskAssignee("jerry")
        .singleResult();
    // 4. 根据任务 id 完成任务
    taskService.complete(task.getId());
}

以此类推,直至整个出差流程完成

相关文章

暂无评论

暂无评论...