• Activiti:流程网关管理


    排他网关 ExclusiveGateway

    网关主要控制 Activiti 流程分支的流向。

    概念

    排它网关用于对流程中的决策进行建模。

    当流程执行到达此网关时,所有分支都将按定义顺序进行判断,选择判断条件结果为真(true)的分支继续处理。

    注意:

    排它网关时只选择一个条件值为 true 的分支进行处理。如果多个分支的条件计算结果都为true,排他网关会选择id 值较小的一条分支去执行。

    简而言之,就是传递流程变量,排他网关根据流程变量决定该走哪条线路

    基本使用

    bpmn 排他网关符号如下:

    image-20220507095205857

    需求:

    直接领导审批后, 如果小于等于3天的由行政审批;大于3天的由总经理审批, 总经理审批完再由行政审批 .

    修改ModelSaveRestResource类:

    增加:

          String json_xml = values.getFirst("json_xml");
          String key = objectMapper.readTree(json_xml).get("properties").get("process_id").textValue();
          model.setKey(key);
    
    image-20220507102223762

    流程唯一标识key : testExclusiveGateway ,流程名: 排他网关流程模型

    设置条件:

    image-20220507095644685 image-20220507095757144 image-20220507100021870

    流程定义里用户任务节点的办理人分别是: 直接领导审批 zhangsan 行政审批 wj1 总经理 wj2

    保存后,流程定义模型数据会保存到act_re_model表里:

    image-20220507102444047

    保存成功后,直接部署。

    编写测试类,进行测试:

        @Autowired
        RuntimeService runtimeService;    
         /**
         * 启动流程实例
         */
        @Test
        public void startProcess() {
            // 流程变量
            Map<String, Object> variables = new HashMap<>();
            // 天数
            variables.put("duration", 2);
            // 启动流程实例
            runtimeService.startProcessInstanceByKey("testExclusiveGateway", variables);
        }
    

    启动流程实例后,由直接领导进行审批。

    image-20220507102934924

    审批:

        @Test
        public void completeTask() {
            //完成任务(任务id)
            taskService.complete("3ef40b37-cdad-11ec-a0e0-28d0ea3dce6b");
        }
    

    image-20220507103420263

    因为duration小于等于3,所以由行政进行审批。

    并行网关 ParallelGateway

    概念

    并行网关用于对流程中的并发性建模,在流程模型中引入并发性的最简单的网关是并行网关,将流程分成多条分支,然后再多条分支汇聚到一起。

    • 分支(fork):

      并行所有外出顺序流,为每个顺序流都创建一个并发分支。

    • 汇聚(join):

      所有到达并行网关,在此等待的进入分支,只有当所有进入顺序流的分支都到达以后, 流程就会通过汇聚网 关。

    注意:分支 与 汇聚成对出现 。并行网关不会解析条件,即使顺序流中定义了条件,也会被忽略

    并行网关在业务应用中常用于会签任务,会签任务即多个参与者共同办理的任务。

    基本使用

    bpmn 并行网关符号如下:

    image-20220507105517072

    需求:开启流程实例 -> 分成两个分支(部门经理审批,总监审批 ) -> 两个分支任务都完成了 -> 汇聚分支

    流程唯一标识key : testParallelGateway ,流程名: 并行网关流程模型

    image-20220507141628371

    保存:

    image-20220507141737754

    部署并启动实例

        /**
         * 启动流程实例
         */
        @Test
        public void startProcess2() {
            runtimeService.startProcessInstanceByKey("testParallelGateway");
        }
    

    启动后,会出现两条任务:

    image-20220507142146626

    包含网关 InclusiveGateway

    概念

    包含网关可以看做是排他网关和并行网关的结合体。和排他网关一样,你可以在连线上定义条件表达式,定义的表达式会被包含网关解析。但是包含网关主要区别是也可以不指定表达式,同时选择多条分支,这和并行网关是一样的。

    简而言之:

    • 排他网关:解析条件,流向条件为 true的节点,或者报错(没有满足条件的)
    • 并行网关:不解析条件, 不报错, 分支节点都执行。
    • 包含网关:有条件就解析条件,条件成立就流向,不成立就不流向,全都不成立报错;没有条件直接流向。

    基本使用

    bpmn 包含网关符号如下:

    image-20220507143658132

    开启请假流程实例 -> 包含网关分支 -> 如果小于等于3天的部门经理审批,大于3天的由总经理审批,请假都必须经 过行政审批 -> 汇聚分支-> 流程结束

    说明 :

    流程唯一标识key : testInclusiveGateway ,流程名: 包含网关流程模型

    跳转条件需要设置

    image-20220507144311999

    部署并启动实例:

        /**
         * 启动流程实例
         */
        @Test
        public void startProcess3() {
            // 流程变量
            Map<String, Object> variables = new HashMap<>();
            variables.put("duration", 2);
            // 启动流程实例
            runtimeService.startProcessInstanceByKey("testInclusiveGateway", variables);
        }
    

    启动后:我们请假天数是2,流向了行政审批和部门经理审批与预期相同。

    image-20220507144658048

  • 相关阅读:
    java--面向抽象编程
    java--面向接口编程
    一个网页的测试用例
    浏览器Notwork XHR被隐藏了
    在element-ui label中设置空格
    数组对象排序
    js动态替换和插入字符串
    vue-quill-editor回显时移除焦点
    vue中监听页面是否有回车键按下
    vue-quill-edito 字体倾斜加粗无效
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/16242554.html
Copyright © 2020-2023  润新知