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



    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());
    }
    

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


  • 相关阅读:
    node.js开发 打包管理工具webpack
    node.js开发 npm包管理工具 npm 和 cnpm区别
    node.js开发 npm包管理工具
    node.js开发 1-概述
    脚手架-1概念
    前端开发 vue,angular,react框架对比2
    AttachDispatch
    画图软件orign的使用
    建立xml文件时遇到的编码问题和解决方法
    securecrt简介
  • 原文地址:https://www.cnblogs.com/Yee-Q/p/15264760.html
Copyright © 2020-2023  润新知