Activiti工作流入门筑基圆满

  • 第十一步:关联业务表

     //关联业务表
        @Test
        public void actionwith(){
    //1、获取流程引擎
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    //2、获取RuntimeService
            RuntimeService runtimeService = processEngine.getRuntimeService();
    // 3、启动流程的过程中,添加businesskey
    //第二个参数:businessKey,业务表的id,就是1001
            ProcessInstance instance = runtimeService.
                    startProcessInstanceByKey("holiday", "1001");
    //4、输出
            System.out.println("businessKey=="+instance.getBusinessKey());
    
        }

    运行截图:
    Activiti工作流入门筑基圆满_第1张图片

  • 第十二步:使用uel表达式创建负责人
    (一)重新创建bpmn文件

    png图片和bpmn文件见上面的步骤
    ```Java
    流程部署
    //1、创建ProcessEngine
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    //2、获取RepositoryServcie
            RepositoryService repositoryService = processEngine.getRepositoryService();
    //3、使用service进行流程的部署,定义一个流程的名字,把bpmn和png部署到数据中
            Deployment deploy = repositoryService.createDeployment()
                    .name("出差申请流程-uel")
                    .addClasspathResource("bpmn/myEvection.bpmn20.xml")
                    .addClasspathResource("bpmn/Evection.png")
                    .deploy();
    //4、输出部署信息
            System.out.println("流程部署id="+deploy.getId());
            System.out.println("流程部署名字="+deploy.getName());
    ```
    
启动实例:
​```Java
//获取流程引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取RunTimeService
        RuntimeService runtimeService = processEngine.getRuntimeService();
//设定assignee的值,用来替换uel表达式
        Map assigneeMap = new HashMap();
        assigneeMap.put("assignee0","张三");
        assigneeMap.put("assignee1","李经理");
        assigneeMap.put("assignee2","王总经理");
        assigneeMap.put("assignee3","赵财务");
//启动流程实例
        runtimeService.startProcessInstanceByKey("myEvection",assigneeMap);
​```

数据库表信息更改:
Activiti工作流入门筑基圆满_第2张图片
Activiti工作流入门筑基圆满_第3张图片

  • 第十三步:候选人实例
    创建bpmn文件
    参考上面步骤,在bpmn文件中的部门经理审核加上一句话,添加候选人

        
        
          
            
            
            
            
          

    代码步骤:

     /**
                     * 创建候选人实例
                     * 第一步部署定义
                     */
                    @Test
                    public void testCandate(){
                    //1、创建ProcessEngine
                    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
                    //2、获取RepositoryServcie
                    RepositoryService repositoryService = processEngine.getRepositoryService();
                    //3、使用service进行流程的部署,定义一个流程的名字,把bpmn和png部署到数据中
                    Deployment deploy = repositoryService.createDeployment()
                            .name("出差申请流程-Candidate")
                            .addClasspathResource("bpmn/testCandate.bpmn20.xml")
                            .addClasspathResource("bpmn/testCandate.png")
                            .deploy();
                }
    
                    /**
                     * 第二步流程部署实例
                     */
                    @Test
                    public void StartTestCandate(){
                    //获取流程引擎
                    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
                    //获取RunTimeService
                    RuntimeService runtimeService = processEngine.getRuntimeService();
                    runtimeService.startProcessInstanceByKey("candidateUsers");
                }
                    /**
                     * 完成提交申请
                     */
                    @Test
                    public void EndTest(){
                        //获取引擎
                        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
                        //获取操作任务的服务 TaskService
                        TaskService taskService = processEngine.getTaskService();
                        //获取jerry 对应的任务
                        Task task = taskService.createTaskQuery()
                                .processDefinitionKey("candidateUsers")
                                .taskAssignee("橘子1")
                                .singleResult();
                        //完成提交申请的任务
                        taskService.complete(task.getId());
                        System.out.println("流程实例id=" + task.getProcessInstanceId());
                        System.out.println("任务Id=" + task.getId());
                        System.out.println("任务负责人=" + task.getAssignee());
                        System.out.println("任务名称=" + task.getName());
                    }
                    //查询任务
                        @Test
                        public void other(){
                         //获取引擎
                        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
                         //获取TaskService
                        TaskService taskService = processEngine.getTaskService();
                        //查询组任务
                        List taskList = taskService.createTaskQuery()
                                .processDefinitionKey("candidateUsers")
                                .taskCandidateUser("wangwu") //根据候选人查询任务
                                .list();
                        for (Task task : taskList) {
                            System.out.println("========================");
                            System.out.println("流程实例ID="+task.getProcessInstanceId());
                            System.out.println("任务id="+task.getId());
                            System.out.println("任务负责人="+task.getAssignee());
                        }
      
        }

    运行完数据库表:

    • ACT_RU_TASK结果(当前负责人为空):
      image_3.png
    • ACT_HI_ACTINST结果(部门经理审批负责人为空):
      Activiti工作流入门筑基圆满_第4张图片
    • ACT_HI_TASKINST结果 (部门经理审批负责人为空):
      Activiti工作流入门筑基圆满_第5张图片
      找到候选人拾取任务
                    /**
                     * wangwu拾取任务
                     */
                    @Test
                    public void finshTest(){
                        //获取引擎
                        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
                        //获取TaskService
                        TaskService taskService = processEngine.getTaskService();
                        //当前任务的id
                        String taskId = "5002";
                        //任务候选人
                        String candidateUsers = "wangwu";
                        //查询任务
                        Task task = taskService.createTaskQuery()
                                .taskId(taskId)
                                .taskCandidateUser(candidateUsers)
                                .singleResult();
                        if(task != null){
                        //拾取任务
                            taskService.claim(taskId,candidateUsers);
                            System.out.println("taskid-"+taskId+"-用户-"+candidateUsers+"-拾取任务完成");
                        }
                    }
    • ACT_RU_TASK结果图(回归正常流程):
      image_6.png
    • ACT_HI_ACTINST结果(回归正常流程):
      image_7.png
    • ACT_HI_TASKINST结果 (回归正常流程):
      image_8.png
      更改负责人:将wangwu改成lisi,简而言之就是ASSIGNEE字段
                          /**
                         * 更改负责人为lisi
                         */
                        @Test
                        public void updata(){
                            //获取引擎
                            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
                            //获取TaskService
                            TaskService taskService = processEngine.getTaskService();
                            //当前任务的id
                            String taskId = "5002";
                            //任务负责人
                            String assignee = "wangwu";
                            //根据key 和负责人来查询任务
                            Task task = taskService.createTaskQuery()
                                    .taskId(taskId)
                                    .taskAssignee(assignee)
                                    .singleResult();
                            if(task != null){
                                //归还任务 ,就是把负责人 设置为空
                                taskService.setAssignee(taskId,null);
                                taskService.setAssignee(taskId,"lisi");
                                System.out.println("taskid-"+taskId+"-归还任务完成");
                            }
    
                        }

    终于圆满了,踏入修真界

你可能感兴趣的:(Activiti工作流入门筑基圆满)