activiti7的网关

2023-11-05

工作流 —activiti7网关

1. 排他网关

    排他网关(也叫异或(XOR)网关,或叫基于数据的排他网关),用来在流程中实现决策。 

  当流程执行到这个网关,所有分支都会判断条件是否为true,如果为 true 则执行该分支,

  注意,排他网关只会选择一个为 true 的分支执行。(即使有两个分支条件都为 true,排他网关也会只选择一条分支去执行)

 

  1.1 定义流程

  

 

 

   1.2 部署流程  

/**
     * 流程部署的方法
     */
    @Test
    public void deployment() {
        //获取ProcessEngine对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //获取RepositoryService对象
        RepositoryService repositoryService = processEngine.getRepositoryService();
        //流程部署
        Deployment deploy = repositoryService.createDeployment()
                .addClasspathResource("holiday/holidayOld.bpmn")
                .name("请假流程-排他网关")
                .deploy();
        System.out.println("流程部署成功:" + deploy.getName());
    }

  1.3 启动流程  当前给的流程变量是5 两个条件都符合

/**
     * 启动流程实例,设置流程变量的值
     */
    @Test
    public void startInstance() {
        //获取ProcessEngine对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //获取RuntimeService
        RuntimeService runtimeService = processEngine.getRuntimeService();
        //设置流程变量
        Holiday holiday = new Holiday();
        holiday.setNum(5);
        Map<String, Object> assMap = new HashMap<>();
        assMap.put("holiday", holiday);
        //启动流程实例
        ProcessInstance holidayGroup = runtimeService.startProcessInstanceByKey("holidaygetway", assMap);
        System.out.println("流程实例:" + holidayGroup.getId());
    }

  1.4 处理任务

/**
     * 处理任务
     */
    @Test
    public void commitTask() {
        //获取ProcessEngine对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //获取TaskService对象
        TaskService taskService = processEngine.getTaskService();
        //查询到自己的任务,然后通过任务ID进行提交
        Task task = taskService.createTaskQuery().processDefinitionKey("holidaygetway").taskAssignee("zhangsan").singleResult();
        //处理任务
        taskService.complete(task.getId());
    }

  1.5  处理lisi的任务

/**
     * 处理任务
     */
    @Test
    public void commitTask() {
        //获取ProcessEngine对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //获取TaskService对象
        TaskService taskService = processEngine.getTaskService();
        //查询到自己的任务,然后通过任务ID进行提交
        Task task = taskService.createTaskQuery().processDefinitionKey("holidaygetway").taskAssignee("lisi").singleResult();
        //处理任务
        taskService.complete(task.getId());
    }

 

  1.6 处理完lisi的任务时条件两者都符合时选择ID最小的分支

 

   1.7 查看数据库任务表 

 

2. 并行网关

  并行网关允许将流程分成多条分支,也可以把多条分支汇聚到一起,并行网关的功能是基于进 入和外出顺序流的:

   fork 分支:

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

   join 汇聚:

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

 

  注意,如果同一个并行网关有多个进入和多个外出顺序流, 它就同时具有分支和汇聚功能。

  这时, 网关会先汇聚所有进入的顺序流,然后再切分成多个并行分支。 与其他网关的主要区别是,

  并行网关不会解析条件。 即使顺序流中定义了条件,也会被忽略。

  
  2.1 定义流程图

  

 

   2.2 部署流程

 /**
     * 流程部署
     */
    @Test
    public void deployment(){
        //获取ProcessEngine对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //获取RepositoryService对象
        RepositoryService repositoryService = processEngine.getRepositoryService();
        //流程部署
        Deployment deploy = repositoryService.createDeployment()
                .addClasspathResource("holiday/holidayPar.bpmn")
                .name("请假流程-并行网关")
                .deploy();
        System.out.println("流程部署成功:" + deploy.getName());
    }

  2.3 启动流程

 /**
     * 启动流程实例
     */
    @Test
    public void startInstance() {
        //获取ProcessEngine对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //获取RuntimeService
        RuntimeService runtimeService = processEngine.getRuntimeService();
        //设置流程变量

        Map<String, Object> assMap = new HashMap<>();
        assMap.put("num", 3);
        //启动流程实例
        ProcessInstance holidayGroup = runtimeService.startProcessInstanceByKey("holidayPar", assMap);
        System.out.println("流程实例:" + holidayGroup.getId());
    }

  2.4 执行流程zhangsan

/**
     * 执行流程
     */
    @Test
    public void commitTask() {
        //获取ProcessEngine对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //获取TaskService对象
        TaskService taskService = processEngine.getTaskService();
        //查询到自己的任务,然后通过任务ID进行提交
        Task task = taskService.createTaskQuery().processDefinitionKey("holidayPar").taskAssignee("zhangsan").singleResult();
        //处理任务
        taskService.complete(task.getId());
    }

  2.5 执行lisi任务因为天数为3所以直接到人事存档zhaoliu

/**
     * 执行流程
     */
    @Test
    public void commitTask() {
        //获取ProcessEngine对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //获取TaskService对象
        TaskService taskService = processEngine.getTaskService();
        //查询到自己的任务,然后通过任务ID进行提交
        Task task = taskService.createTaskQuery().processDefinitionKey("holidayPar").taskAssignee("lisi").singleResult();
        //处理任务
        taskService.complete(task.getId());
    }

  2.6 执行zhaoliu任务后进入并行网关 会有两个待执行任务

/**
     * 执行流程
     */
    @Test
    public void commitTask() {
        //获取ProcessEngine对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //获取TaskService对象
        TaskService taskService = processEngine.getTaskService();
        //查询到自己的任务,然后通过任务ID进行提交
        Task task = taskService.createTaskQuery().processDefinitionKey("holidayPar").taskAssignee("zhaoliu").singleResult();
        //处理任务
        taskService.complete(task.getId());
    }

  2.7 查看数据库任务表

 

   2.8 查看数据库历史表

 

   2.9 执行sunqi任务

 /**
     * 执行流程
     */
    @Test
    public void commitTask() {
        //获取ProcessEngine对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //获取TaskService对象
        TaskService taskService = processEngine.getTaskService();
        //查询到自己的任务,然后通过任务ID进行提交
        Task task = taskService.createTaskQuery().processDefinitionKey("holidayPar").taskAssignee("sunqi").singleResult();
        //处理任务
        taskService.complete(task.getId());
    }

  2.10 查看数据库任务表

 

   2.11 查看数据库历史表

 

   2.12 执行sunba任务

/**
     * 执行流程
     */
    @Test
    public void commitTask() {
        //获取ProcessEngine对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //获取TaskService对象
        TaskService taskService = processEngine.getTaskService();
        //查询到自己的任务,然后通过任务ID进行提交
        Task task = taskService.createTaskQuery().processDefinitionKey("holidayPar").taskAssignee("zhouba").singleResult();
        //处理任务
        taskService.complete(task.getId());
    }

  2.13 查看数据库任务表

 

  2.14 查看数据库历史表  当并行网关的所有任务都执行完毕后才会进入下一个任务

 

 

3. 包含网关 

    包含网关可以看做是排他网关和并行网关的结合体。 和排他网关一样,你可以在外出顺序流上定义条件,

  包含网关会解析它们。 但是主要的区别是包含网关可以选择多于一条顺序流,这和并行网关一样。

  包含网关的功能是基于进入和外出顺序流的

  3.1 流程定义

  

 

 

  3.2 部署流程

/**
     * 流程部署
     */
    @Test
    public void deployment(){
        //获取ProcessEngine对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //获取RepositoryService对象
        RepositoryService repositoryService = processEngine.getRepositoryService();
        //流程部署
        Deployment deploy = repositoryService.createDeployment()
                .addClasspathResource("medical/medical.bpmn")
                .name("体检流程-包含网关")
                .deploy();
        System.out.println("流程部署成功:" + deploy.getName());
    }

  3.3 启动流程实例   当前流程变量为1

 /**
     * 启动流程实例
     */
    @Test
    public void startInstance() {
        //获取ProcessEngine对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //获取RuntimeService
        RuntimeService runtimeService = processEngine.getRuntimeService();
        //设置流程变量

        Map<String, Object> assMap = new HashMap<>();
        assMap.put("userType", 1);
        //启动流程实例
        ProcessInstance holidayGroup = runtimeService.startProcessInstanceByKey("medical", assMap);
        System.out.println("流程实例:" + holidayGroup.getId());
    }

  3.4 执行zhangsan任务

/**
     * 执行流程
     */
    @Test
    public void commitTask() {
        //获取ProcessEngine对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //获取TaskService对象
        TaskService taskService = processEngine.getTaskService();
        //查询到自己的任务,然后通过任务ID进行提交
        Task task = taskService.createTaskQuery().processDefinitionKey("medical").taskAssignee("zhangsan").singleResult();
        //处理任务
        taskService.complete(task.getId());
    }

  3.5 查看数据库任务表

 

   3.6 执行lisi任务

    /**
     * 执行流程
     */
    @Test
    public void commitTask() {
        //获取ProcessEngine对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //获取TaskService对象
        TaskService taskService = processEngine.getTaskService();
        //查询到自己的任务,然后通过任务ID进行提交
        Task task = taskService.createTaskQuery().processDefinitionKey("medical").taskAssignee("lisi").singleResult();
        //处理任务
        taskService.complete(task.getId());
    }

  3.7 查看数据库任务表

 

   3.8 执行wangwu任务

 /**
     * 执行流程
     */
    @Test
    public void commitTask() {
        //获取ProcessEngine对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //获取TaskService对象
        TaskService taskService = processEngine.getTaskService();
        //查询到自己的任务,然后通过任务ID进行提交
        Task task = taskService.createTaskQuery().processDefinitionKey("medical").taskAssignee("wangwu").singleResult();
        //处理任务
        taskService.complete(task.getId());
    }

  3.9 查看数据库任务表 包含网关任务

 

   3.10 查看数据库历史表  都已经执行完毕

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

activiti7的网关 的相关文章

  • Python使用腾讯云-短信服务发送手机短信

    目前 腾讯云短信 为客户提供 国内短信 国内语音 和 海外短信 三大服务 腾讯云短信SDK支持以下操作 国内短信 国内短信支持操作 指定模板单发短信 指定模板群发短信 拉取短信回执和短信回复状态 海外短信 海外短信支持操作 指定模板单发短信
  • 机器学习-分类模型-逻辑分类(2)

    逻辑分类简要概念 逻辑分类实际上是基于线性回归 sigmoid的一个分类器 二分类代码 import numpy as np import matplotlib pyplot as plt import sklearn linear mod
  • 一场时代的挑战与转变

    在我们的社会中 有一种现象引起了人们广泛的关注 那就是 年轻人存款 的问题 据最近的一项调查显示 大概五分之一的年轻人存款在一万元以内 10万元存款是一个 坎 存款超过10万就会超过53 7 的人 这样的数据 无疑引发了人们对于年轻人与存款
  • QT之动态库的创建、及测试代码编写

    1 新建文件和目录 在项目中选择library 右侧选择C library 如下图所示 2 按choose后 出现下面如图所示 添加库工程名字 3 选择共享库 并最好修改类名 头文件 源文件的名称 如下图所示 4 选择编译器 这里需要跟需要
  • 正则表达式之匹配字符串双引号

    字符串中可以出现转义的双引号 那么一般的正则表达式就不行了 譬如 无法正确匹配 word1 word2 word3 其结果是 word2 这里我用非获取匹配 则结果是 word2 word3 表示贪婪策略 非贪婪 pattern 非获取匹配

随机推荐

  • 最新Navicat Premium 16 激活中文版 适用于win和mac版

    Navicat Premium 16这是十分知名且专业的数据库开发管理工具 利用它不仅为用户提供完善的工具 可以轻松完美的帮助用户构建 管理和维护您的数据库 还与市面上主流的云数据库兼容 从而可以很好的满足不同用户们的各种使用需求 同时就算
  • element el-table 设置行高

  • Python从零开始学大概需要多久时间才能达到自主接单赚钱水平?

    我能也是学Python将近六七年的时间了 就来给大家讲讲Python吧 Python作为现在行业最受欢迎的编程语言 也是一门相对于其他的编程语言 Java C C 要更加简单 狗头保命 这是有目共睹的 那么因为Python的简单 所以现在学
  • router的使用

    路由和线路 路由router 表示当前项目全局的路由实例对象 跳转方法 push replace go back 线路route 表示当前路由页面的信息对象 获取动态路由的参数 params router跳转的两种方式 js跳转叫 编程式跳
  • 如何搭建VPN?

    搭建VPN的方法可以分为两个主要步骤 设置服务器和配置客户端 下面是一般的步骤 设置服务器 1 选择适合你需求的服务器 你可以租用云服务器 自行搭建服务器或者使用第三方VPN服务提供商 2 安装操作系统并进行基本配置 常用的操作系统有Lin
  • 如何安装黑苹果双系统

    title 黑苹果Win10双系统安装教程 小白也能秒掌握 装机装了一天 看了很多教程 踩了无数坑 终于成功了 写一篇教程防止后人踩坑吧 关于黑苹果 折腾过的人应该不陌生 自从苹果采用 Intel 的处理器 被解锁后可以安装在 Intel
  • 【前端兼容性】常见的浏览器兼容问题及解决方案

    常见浏览器兼容 前言 一 常见浏览器内核 1 Trident内核 2 Gecko内核 3 Blink内核 4 Webkit内核 5 Presto内核 已废弃 二 常见兼容性问题 1 不同浏览器的默认margin和padding不一致 2 图
  • PyQty5—第四课:GUI小程序界面设计(附完整代码)

    在第一节课中我们已经学会了PyQty5的安装 以及配置好了两个环境 如果还没有看到的小伙伴可以前去考古 点我 今天我们将会继续学习PyQty5的设计界面的认识 也会带领大家一步一步设计出一个小GUI作品 首先我们创建一个py文件 然后右击
  • OpenGL学习日记-2015.3.13——多实例渲染

    实例化 instancing 或者多实例渲染 instancd rendering 是一种连续执行多条相同渲染命令的方法 并且每个命令的所产生的渲染结果都会有轻微的差异 是一种非常有效的 实用少量api调用来渲染大量几何体的方法 OpenG
  • activiti在运行时报错:couldn‘t find a variable type that is able to serialize XXX

    activiti在启动流程实例的时候报错信息如下 Exception in thread main org activiti engine ActivitiException couldn t find a variable type th
  • 【精品源码】C#20个经典小游戏集合!

    大家好 这里是小伙整理的C 20个经典小游戏集合系列 需要的可自取下载包 C 20个经典小游戏集合项目包含内容 小游戏源码目录如下 01 21点小游戏 02 百变方块小游戏 03 打字小游戏 04 单机坦克小游戏 05 对对碰小游戏 06
  • pybind11学习

    本文主要记录官方文档中 FUNCTIONS 一章的学习笔记 对于C 函数的Python绑定 在前面的学习中已经有所涉及了 详见 pybind11学习 迈出第一步 本文主要是记录一些更加深入的知识 文章目录 1 返回值策略 2 调用策略 2
  • vue中,实现锚点定位及跳转(url不发生变化)

    直接上代码 lt div class footer click returnTop gt methods returnTop function document querySelector header scrollIntoView tru
  • 大学生数学建模优秀论文发表

    大学生数学建模优秀论文篇1 浅谈大学生数学建模的意义 摘 要 本文重点分析了数学建模对当前数学教育教学改革的现实意义 探讨了数学建模对学生应用数学能力的培养 阐述了计算机在数学建模竞赛中的作用和地位 最后介绍了数学建模对数学教学改革的启示意
  • 微信小程序-weUI组件库

    微信小程序的开发过程中 常常会出现很多重复性的功能翻来覆去地使用 那么直接用一套封装好的组件库 就能大大提升开发速度 微信小程序的UI组件库有很多 可以参考下面这个内容 微信小程序UI组件库合集 微信开放社区 qq com https de
  • 英伟达GPU驱动和CUDA的版本对应关系

    CUDA Toolkit Toolkit Driver Version Linux x86 64 Driver Version Windows x86 64 Driver Version CUDA 11 6 GA gt 510 39 01
  • 深入研究java.lang.ThreadLocal类

    深入研究java lang ThreadLocal类 一 概述 ThreadLocal是什么呢 其实ThreadLocal并非是一个线程的本地实现版本 它并不是一个Thread 而是threadlocalvariable 线程局部变量 也许
  • matlab的损失函数mse,MSELoss损失函数

    MSELoss损失函数中文名字就是 均方损失函数 公式如下所示 这里 loss x y 的维度是一样的 可以是向量或者矩阵 i 是下标 很多的 loss 函数都有 size average 和 reduce 两个布尔类型的参数 因为一般损失
  • 消费者与生产者模式(管程法、消息队列的方法)

    生产者和消费者模式 管程法SynContainer 我们知道wait notify notifyAll 方法都是java lang Object类的 native方法 如果我们要在某个线程中的synchronized块中调用 wait no
  • activiti7的网关

    工作流 activiti7网关 1 排他网关 排他网关 也叫异或 XOR 网关 或叫基于数据的排他网关 用来在流程中实现决策 当流程执行到这个网关 所有分支都会判断条件是否为true 如果为 true 则执行该分支 注意 排他网关只会选择一