Camunda排他网关与并行网关

Camunda排他网关与并行网关_第1张图片

专栏简介

✔️本专栏将从Camunda(卡蒙达) 7中的关键概念到实现中国式工作流相关功能。

✔️文章中只包含演示核心代码及测试数据,完整代码可查看作者的开源项目snail-camunda

✔️请给snail-camunda 点颗星吧

排他网关

流程定义中需要用到排他网关时需要注意两点:

1是必须要有一条默认路线,当其他条件均不满足时走该路线。

Camunda排他网关与并行网关_第2张图片

2是条件表达式要设置正确

Camunda排他网关与并行网关_第3张图片

表单定义如下



  
    
      Flow_0a6p958
    
    
    
      Flow_0a6p958
      Flow_0i294hl
    
    
      Flow_0i294hl
      Flow_07vd7cq
      Flow_19gtn2c
    
    
    
      
      ${day > 3}
    
    
      
    
    
      Flow_1cxwd4c
      Flow_0gnj3ll
    
    
    
    
      Flow_07vd7cq
      Flow_1cxwd4c
    
    
      Flow_19gtn2c
      Flow_0gnj3ll
    
  
  
    
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
        
      
      
        
        
      
      
        
        
        
        
          
        
      
      
        
        
        
      
      
        
        
        
        
      
      
        
        
        
        
      
    
  

发起实例的接口,参数类和之前文章中提到的都一样,不重复贴了

    /**
     * 根据流程定义key发起流程实例
     *
     * @param requestParam 请求参数
     * @return 流程实例id
     */
    @PostMapping("/startProcessInstanceByKey")
    public String startProcessInstanceByKey(@RequestBody StartProcessRequest requestParam) {
        Map paramMap = new HashMap<>(8);
        paramMap.put("initiator", requestParam.getInitiator());
        paramMap.put("day", 4);
        paramMap.put("manager","10087");
        paramMap.put("head", "10088");
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(requestParam.getProcessDefinitionKey(), requestParam.getBusinessKey(), paramMap);
        return processInstance.getProcessInstanceId();
    }

发起后,满足预期来到【部长】节点

Camunda排他网关与并行网关_第4张图片

统一表达式语言

Camunda支持统一表达式语言,使用开源的JUEL来实现的。需要掌握更多可访问如下链接

Unified Expression Language

并行网关

在之前的《认识BPMN2.0》中我们知道并行网关的功能是基于传入和传出序列流:

  • Fork:所有传出序列流并行执行,为每个序列流创建一个并发执行。
  • Join:到达并行网关的所有并发执行在网关等待,直到每个传入序列流的执行到达为止。

流程定义设计如下:



  
    
      Flow_0woj0jt
    
    
    
      Flow_0woj0jt
      Flow_0istezk
    
    
    
      Flow_0istezk
      Flow_1ucnqdb
      Flow_0nvwxww
      Flow_06j90pb
    
    
    
    
      Flow_1ucnqdb
      Flow_11upvwe
    
    
      Flow_0nvwxww
      Flow_1qfv4jz
    
    
      Flow_0rzniwk
    
    
    
      Flow_06j90pb
      Flow_1mymqa7
    
    
      Flow_1mymqa7
      Flow_11upvwe
      Flow_0luwvad
    
    
    
    
      Flow_0luwvad
      Flow_05npw3q
    
    
    
      Flow_05npw3q
      Flow_1qfv4jz
      Flow_0rzniwk
    
    
    
    
  
  
    
      
        
      
      
        
      
      
        
      
      
        
      
      
        
        
      
      
        
        
      
      
        
      
      
        
        
      
      
        
      
      
        
      
      
        
        
      
      
        
        
      
      
        
        
        
      
      
        
        
        
      
      
        
        
        
      
      
        
        
        
      
      
        
        
      
      
        
        
        
      
      
        
        
      
      
        
        
        
      
      
        
        
        
        
      
    
  

发起实例接口:

    /**
     * 根据流程定义key发起流程实例
     *
     * @param requestParam 请求参数
     * @return 流程实例id
     */
    @PostMapping("/startProcessInstanceByKey")
    public String startProcessInstanceByKey(@RequestBody StartProcessRequest requestParam) {
        Map paramMap = new HashMap<>(8);
        paramMap.put("initiator", requestParam.getInitiator());
        paramMap.put("userOne","10087");
        paramMap.put("userTwo","10088");
        paramMap.put("userThree","10089");
        paramMap.put("userFour","10090");
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(requestParam.getProcessDefinitionKey(), requestParam.getBusinessKey(), paramMap);
        return processInstance.getProcessInstanceId();
    }

从下图可见,经过第一个并行网关后三个节点的审批人会同时收到待办任务。

Camunda排他网关与并行网关_第5张图片

所以3号完成后执行会在最后的并行网关等待

Camunda排他网关与并行网关_第6张图片

Camunda排他网关与并行网关_第7张图片

你可能感兴趣的:(Camunda修炼手册,camunda,工作流)