Activiti工作流+idea2021入门筑基圆满

这篇博客介绍了如何在idea2021中结合Activiti工作流进行入门实践,包括关联业务表、使用UEL表达式设置负责人、数据库表信息的更改,以及详细的操作步骤。通过示例展示了从基础内容学习到候选人实例的创建,最后展示了任务负责人变更的流程,并附带了各个阶段的数据库查询结果。
  • 第十一步:关联业务表

     //关联业务表
        @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());
    
        }
    

    运行截图:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GWgrirFl-1647571689009)(image/image.png "")]

  • 第十二步:使用uel表达式创建负责人
    (一)重新创建bpmn文件
    png图片和bpmn文件见上面的步骤

    流程部署
    //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);
    ​```
    
    
    

    数据库表信息更改:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TxrO0HAk-1647571689012)(image/image_1.png "")]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m4rdLsJn-1647571689014)(image/image_2.png "")]

  • 第十三步:候选人实例
    创建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结果(当前负责人为空):
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-82wyaE9G-1647571689018)(image/image_3.png "")]

    • ACT_HI_ACTINST结果(部门经理审批负责人为空):
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zn47Yw7j-1647571689019)(image/image_4.png "")]

    • ACT_HI_TASKINST结果 (部门经理审批负责人为空):
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8ibJPCke-1647571689021)(image/image_5.png "")]

      找到候选人拾取任务

                    /**
                     * 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结果图(回归正常流程):
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SKSOeWQr-1647571689023)(image/image_6.png "")]

    • ACT_HI_ACTINST结果(回归正常流程):
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wl62Szm0-1647571689024)(image/image_7.png "")]

    • ACT_HI_TASKINST结果 (回归正常流程):
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UuLnI8JD-1647571689024)(image/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+"-归还任务完成");
                            }
    
                        }
    

    到此筑基就结束了,基础的内容学会了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值