Activiti7工作流+idea2021筑基的网关仙术

仙术

  • 1、设置变量
    画图
    Activiti7工作流+idea2021筑基的网关仙术_第1张图片

    xml文件:sequenceFlow 就代表了上方的双指向箭头
    双指向箭头在idea插件里面是没有的,需要用前面说的软件,点击指向线点击设置符号就会显示
    Activiti7工作流+idea2021筑基的网关仙术_第2张图片

    
    
        
            
            
                
                    
                    
                
            
            
            
                
                    
                
            
            
            
                
                    
                
            
            
                
                    
                
            
    
            **
                ${evection.num>=3}
            
            
                ${!(evection.num>=3)}
            **
    
    
            
            
            
            
            
            
    
    
    
            
            
            
        
        
            
                
                    
                
                
                    
                
                
                    
                    
                
                
                    
                
                
                    
                    
                
                
                    
                
                
                    
                
                
                    
                    
                
                
                    
                    
                
                
                    
                    
                
                
                    
                
                
                    
                    
                
            
        
    

    然后正常流程启动:

    • 1、定义

          @Test
          public void Expression(){
              ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
              RepositoryService repositoryService = processEngine.getRepositoryService();
              Deployment deploy = repositoryService.createDeployment()
                      .name("出差申请流程-variables")
                      .addClasspathResource("bpmn1/testUpdate.bpmn20.xml")
                      .deploy();
          }
    • 2、启动

      //    启动
          @Test
          public void ExpressionStart(){
              ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
              RuntimeService runtimeService = processEngine.getRuntimeService();
      //流程变量的map
              Map variables = new HashMap();
      //设置流程变量
              Evection evection = new Evection();
      //设置出差日期
              evection.setNum(2d);
      //把流程变量的pojo放入map
              variables.put("evection",evection);
      //设定任务的负责人
              variables.put("assignee0","李四");
              variables.put("assignee1","王经理");
              variables.put("assignee2","杨总经理");
              variables.put("assignee3","张财务");
      //启动流程
              runtimeService.startProcessInstanceByKey("dd",variables);
          }
    • 3、提交任务

          @Test
          public void finshActivity1() {
              //获取引擎
              ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
              //获取操作任务的服务 TaskService
              TaskService taskService = processEngine.getTaskService();
              //完成任务,参数:任务id,
              
              先完成提交任务,在完成经理的初次审批任务,然后看效果会走向总经理还是直接走财务
              taskService.complete("35002");
          }
      
  • 2、网关

    • 1、排他网关
      所有分支都会判断条件是否为true,如果为true就执行该分支
      注意:只会选择一个true的分支执行,如果都满足条件,则走flowid最小的任务。
      与上述条件变量的区别:都不满足条件,则抛出异常。
      (一)创建bpmn文件
      Activiti7工作流+idea2021筑基的网关仙术_第3张图片
      bug坑:

      1如果网关下面只有一条线,就不可以设置条件,因为他自己会把这个线当作默认,如果想只放一条线的话,就需要取消默认,目前我没有找到取消方法,所以只能先这样测试。
      ![image_3.png](/img/bVcYEIg)
      2这个地方必须是true,否则无法加载流程
      **(二)代码:**
      ```Java
          /**
           * 排他网关
           */
           **定义流程**
          @Test
          public void ExclusiveGetWay(){
              ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
              RepositoryService repositoryService = processEngine.getRepositoryService();
              Deployment deployment = repositoryService.createDeployment()
                      .addClasspathResource("bpmn1/getway1.bpmn20.xml")
                      .name("出差申请流程-排他网关")
                      .deploy();
          }
          **启动**
          @Test
          public void ExclusiveStart(){
              ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
              RuntimeService runtimeService = processEngine.getRuntimeService();
              Map map = new HashMap();
              Evection evection = new Evection();
              evection.setNum(3d);
              //定义流程变量,把出差pojo对象放入map
              map.put("evection",evection);
              //启动流程实例,并设置流程变量的值(把map传入)
              ProcessInstance processInstance = runtimeService
                      .startProcessInstanceByKey("定义的流程id", map);
                      如果不知道定义的流程id的可以会看前面的文章
      
      
          }
      **    完成任务**
          @Test
          public void finshActivity2() {
              //获取引擎
              ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
              //获取操作任务的服务 TaskService
              TaskService taskService = processEngine.getTaskService();
              //完成任务,参数:任务id,task表里面,如果不知道看前面文章
              taskService.complete("任务id");
          }
          
          完成任务后,在上方设置不同的天数进行测试看流程
      ​```


      • 2、并行网关
        可以把多条分支汇聚一起,会走所有的分支、还要等多个分支完成才可继续完成。
        注意:并行网关不会解析条件,即使定义了条件也会被忽略。
        图:
        Activiti7工作流+idea2021筑基的网关仙术_第4张图片
        id和name自己填就行
        1和2这两条线表达式相反,判断不同结果
        Activiti7工作流+idea2021筑基的网关仙术_第5张图片
        代码:

            /**
             * 并行网关
              */
        //    流程定义
            @Test
            public void ExclusiveGetWay1(){
                ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
                RepositoryService repositoryService = processEngine.getRepositoryService();
                Deployment deployment = repositoryService.createDeployment()
                        .addClasspathResource("bpmn1/getway2.bpmn20.xml")
                        .name("出差申请流程-并行网关")
                        .deploy();
            }
            @Test
            public void ExclusiveStart1(){
                ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
                RuntimeService runtimeService = processEngine.getRuntimeService();
                Map map = new HashMap();
                Evection evection = new Evection();
                evection.setNum(3d);
                //定义流程变量,把出差pojo对象放入map
                map.put("evection",evection);
                //启动流程实例,并设置流程变量的值(把map传入)
                ProcessInstance processInstance = runtimeService
                        .startProcessInstanceByKey("bingxing", map);
            }
            @Test
            public void finshActivity3() {
                //获取引擎
                ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
                //获取操作任务的服务 TaskService
                TaskService taskService = processEngine.getTaskService();
                //完成任务,参数:任务id
                taskService.complete("105008");
            }

        都在task任务表 定义之后:
        image_6.png
        完成任务后
        image_7.png
        将这两个任务都完成后:
        image_8.png
        总经理任务完成后记录删除;
        如果小于3天的话,不需要总经理审批,技术经理和项目经理任务完成后,记录直接删除。

      • 3、包含网关
        排他网关和并行网关的结合。都为ture的时候,都要执行任务,并且最后汇聚在一起才可以执行下去。
        bpmn文件图
        Activiti7工作流+idea2021筑基的网关仙术_第6张图片
        id和name自己设置,这三条线增设条件
        2和3的条件一样,1的条件是<3
        Activiti7工作流+idea2021筑基的网关仙术_第7张图片
        完成bpmn文件后,开始进行代码流程
          /**
           * 包含网关
           */
          @Test
          public void InclusiveGateway(){
              ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
              RepositoryService repositoryService = processEngine.getRepositoryService();
              Deployment deployment = repositoryService.createDeployment()
                      .addClasspathResource("bpmn1/getway3.bpmn20.xml")
                      .name("出差申请流程-包含网关")
                      .deploy();
          }
          //启动
          @Test
          public void InclusiveStart(){
              ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
              RuntimeService runtimeService = processEngine.getRuntimeService();
              //key可以见bpmn文件标签id
              String key = "InclusiveGateway";
              Map map = new HashMap();
              Evection evection = new Evection();
              evection.setNum(2d);
              //定义流程变量,把出差pojo对象放入map
              map.put("evection",evection);
              //启动流程实例,并设置流程变量的值(把map传入)
              ProcessInstance processInstance = runtimeService
                      .startProcessInstanceByKey(key, map);
          }
      
          @Test
          public void finshActivity4() {
              //获取引擎
              ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
              //获取操作任务的服务 TaskService
              TaskService taskService = processEngine.getTaskService();
              //完成任务,参数:任务id
              taskService.complete("17508");

我个人喜欢看task表来观察流程效果,也可以看execution表和hi_tsakinst表、hi_actinst表看节点效果






到此关于idea2019以上版本的操作activiti7就暂时结束了,我也是刚开始学,尽量的将我遇见的问题都写出来,看了很多文章也没有看到讲的很细致的有时候都是一笔带过,我做的时候会一个地方卡很长时间,所以我就写的尽力的细致,大家看到我的文章时也不会太费力气,先入门。


你可能感兴趣的:(Activiti7工作流+idea2021筑基的网关仙术)