乐趣区

关于工作流: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());
    
        }

    运行截图:

  • 第十二步:应用 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<String,Object> assigneeMap = new HashMap();
        assigneeMap.put("assignee0","张三");
        assigneeMap.put("assignee1","李经理");
        assigneeMap.put("assignee2","王总经理");
        assigneeMap.put("assignee3","赵财务");
// 启动流程实例
        runtimeService.startProcessInstanceByKey("myEvection",assigneeMap);
​```

数据库表信息更改:

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

        <sequenceFlow id="sid-6d79513c-9c03-4877-b998-6e587f5c182d" sourceRef="testCandateStart" targetRef="_3"/>
        <userTask id="_4" name="部门经理审批"  **activiti:candidateUsers="lisi,wangwu"**>
          <extensionElements>
            <activiti:formProperty id="Property 1"/>
            <activiti:formProperty id="Property 2"/>
            <activiti:formProperty id="Property 3"/>
            <activiti:formProperty id="Property 4"/>
          </extensionElements>

    代码步骤:

     /**
                     * 创立候选人实例
                     * 第一步部署定义
                     */
                    @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<Task> 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 后果(以后负责人为空):
    • ACT_HI_ACTINST 后果(部门经理审批负责人为空):
    • ACT_HI_TASKINST 后果(部门经理审批负责人为空):

      找到候选人拾取工作
                    /**
                     * 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 后果图(回归失常流程):
    • ACT_HI_ACTINST 后果(回归失常流程):
    • ACT_HI_TASKINST 后果(回归失常流程):

      更改负责人:将 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+"- 偿还工作实现");
                            }
    
                        }

    终于圆满了,踏入修真界

退出移动版