Springboot +Flowable,设置流程变量的方式(二)

news2024/11/29 8:52:42

一.简介

为什么需要流程变量。
举个例子,假设有如下一个流程,截图如下:
在这里插入图片描述
这是一个请假流程,那么谁请假、请几天、起始时间、请假理由等等,这些都需要说明,不然领导审批的依据是啥?那么如何传递这些数据,我们就需要流程变量。

二.流程变量的分类

目前流程变量可以分为三种类型:

  1. 全局流程变量:在整个流程执行期间,这个流程变量都是有效的。
  2. 本地流程变量:这个只针对流程中某一个具体的 Task(任务)有效,这个任务执行完毕后,这个流程变量就失效了。
  3. 临时流程变量:顾名思义就是临时的,这个不会存入到数据库中。

在接下来学习这些流程变量的用法。

三.本地流程变量

上一篇文章说的全局流程变量是和某一个具体的流程绑定的,而本地流程变量则不同,本地流程变量和某一个 Task 绑定。

1.通过 Task 设置

假设启动流程之后,通过 Task 来设置一个本地流程变量,代码如下:

@Test
void test03() {
    Task task = taskService.createTaskQuery().singleResult();
    taskService.setVariableLocal(task.getId(), "days", 10);
    Map<String, Object> variables = new HashMap<>();
    variables.put("reason", "休息一下");
    variables.put("startTime", new Date());
    taskService.setVariables(task.getId(),variables);
}

上面这段代码中,设置了一个本地变量,两个全局变量,设置完成后,去 ACT_RU_VARIABLE 表中来查看一下具体的效果,截图如下:
在这里插入图片描述
可以看到,由于 days 是本地变量,所以它的 TASK_ID_ 有值,这个好理解,说明 days 这个变量和这个具体的 Task 是有关的。
此时如果完成这个 Task,代码如下:

@Test
void test06() {
    Task task = taskService.createTaskQuery().singleResult();
    taskService.complete(task.getId());
}

完成之后,再来查看 ACT_RU_VARIABLE 表,截图如下:
在这里插入图片描述
可以看到本地变量 days 已经没有了。因为上一个 Task 都已经执行完毕了,这个时候如果还是按照上一篇第三小节介绍的方式去查询变量,就查不到 days 了。此时如果需要查询到曾经的 days 变量,得去历史表中查询了,代码如下:

@Test
void test07() {
    ProcessInstance pi = runtimeService.createProcessInstanceQuery().singleResult();
    List<HistoricVariableInstance> list = historyService.createHistoricVariableInstanceQuery().processInstanceId(pi.getId()).list();
    for (HistoricVariableInstance hvi : list) {
        logger.info("name:{},type:{},value:{}", hvi.getVariableName(), hvi.getVariableTypeName(), hvi.getValue());
    }
}

这是流程本地变量的特点,当然相关的方法还有好几个,代码如下:

org.flowable.engine.TaskService#complete(java.lang.String, java.util.Map<java.lang.String,java.lang.Object>, boolean):在完成一个 Task 的时候,如果传递了变量,则可以通过第三个参数来控制这个变量是全局的还是本地的,true 表示这个变量是本地的。

org.flowable.engine.RuntimeService#setVariableLocal:为某一个执行实例设置本地变量。

org.flowable.engine.RuntimeService#setVariablesLocal:同上,批量设置。

四.临时流程变量

临时流程变量是不存数据库的,一般来说可以在启动流程或者完成任务的时候使用,代码如下:

@Test
void test21() {
    Map<String, Object> variables = new HashMap<>();
    variables.put("reason", "休息一下");
    variables.put("startTime", new Date());
    ProcessInstance pi = runtimeService
            .createProcessInstanceBuilder()
            .transientVariable("days", 10)
            .transientVariables(variables)
            .processDefinitionKey("demo01")
            .start();
    logger.info("id:{},activityId:{}", pi.getId(), pi.getActivityId());
}

上面这段代码涉及到的流程变量就是临时流程变量,它是不会存入到数据库中的。
也可以在完成一个任务的时候设置临时变量,代码如下:

@Test
void test22() {
    Task task = taskService.createTaskQuery().singleResult();
    Map<String, Object> transientVariables = new HashMap<>();
    transientVariables.put("days", 10);
    taskService.complete(task.getId(), null, transientVariables);
}

这个临时变量也是不会存入到数据库中的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/512528.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件测试面试宝典,最常见的7个高频面试题(附答案,建议收藏)

收集了2022年所有黑马学员的面试题后&#xff0c;负责就业的黑马讲师们整理出了7个高频出现的面试题&#xff0c;一起来看看。 高频问题1&#xff1a;请自我介绍下&#xff1f; 高频问题2&#xff1a;请介绍下最近做过的项目&#xff1f; 高频问题3&#xff1a;请介绍下你印象…

2023 年第三届长三角高校数学建模 A 题 快递包裹装箱优化问题

2022 年&#xff0c;中国一年的包裹已经超过 1000 亿件&#xff0c;占据了全球快递事务量的一 半以上。近几年&#xff0c;中国每年新增包裹数量相当于美国整个国家一年的包裹数量&#xff0c; 十年前中国还是物流成本最昂贵的国家&#xff0c;当前中国已经建立起全世界最强大、…

利用jQuery做一个简单的猜数字游戏

目录 利用jQuery做一个简单的猜数字游戏 代码 效果 利用jQuery做一个简单的猜数字游戏 代码 <!DOCTYPE html> <html><head><title>键盘事件-猜数字</title><style>#body_style {background-color: #c7f5db;}#myDiv {position: absolu…

单片机GD32F303RCT6 (Macos环境)开发 (十七)—— i2c1从机中断接收发送数据

i2c1从机中断接收发送数据 1、将i2c1设置为从机模式&#xff0c;与树莓派连接。树莓派发送或者读取数据&#xff0c;gd32中断触发&#xff0c;从而接收数据或者向主机发送数据。 2、关于代码的宏定义配置 Application目录的Makefile中 ENABLE_I2C_TEST yes才会编译I2C1的相关…

为啥马斯克一边反对Open AI,一边又自己另搞AI

这事我过去就说过&#xff0c;我现在再老生常谈一次。 &#xff08;1&#xff09; 我过去说过一个事&#xff1a;汽车自己智能其实还不能做到真正的智能&#xff0c;必须车路人都智能了&#xff0c;智能汽车才能真正智能。 因为车路人智能&#xff0c;这本质是数字世界和数字世…

开源之夏 2023 | 与 Databend 一同探索云数仓的魅力

活动概览 开源之夏是由中科院软件所“开源软件供应链点亮计划”发起并长期支持的一项暑期开源活动&#xff0c;旨在鼓励在校学生积极参与开源软件的开发维护&#xff0c;培养和发掘更多优秀的开发者&#xff0c;促进优秀开源软件社区的蓬勃发展&#xff0c;助力开源软件供应链…

基于AT89C52单片机的交通信号灯设计

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/87772657 源码获取 主要内容&#xff1a; 本次设计所提出的一种基于单片机技术的简易计算器的方案&#xff0c;能更好的解决计算机计算的问题,随着数字生活的到来&…

eSIM-GSMA-1-EID规则定义

规范 SGP.02-v4.0.pdf Official Document SGP.02 - Remote Provisioning Architecture for Embedded UICC Technical Specification eid管理规则-SGP.29-1.0 EID Principles 国家编号机构发布 ICCID 的现有机制&#xff0c;以及后续的用户识别不受影响 EID 的核心目的是唯…

知识管理协同工具:助力企业综合信息规整化发展

随着信息化时代的来临&#xff0c;企业面临的信息越来越庞杂&#xff0c;如何管理和利用这些信息成为了企业发展的关键。知识管理作为一种新型的管理思想和方法&#xff0c;已经被广泛应用于企业管理中。知识管理工具是知识管理的重要手段之一&#xff0c;它可以帮助企业实现信…

STM32的功耗模式

按功耗由高到低排列&#xff0c; STM32 具有运行、睡眠、停止和待机四种工作模式。 低功耗各模式下芯片工作情况&#xff1a; 睡眠模式&#xff1a;仅关闭了内核时钟&#xff0c;内核停止运行&#xff0c;但其片上外设&#xff0c; CM4 核心的外设全都还照常 运行。有两种方式…

一款开源免费、非常好用的的SSH/SFTP客户端Electerm

electerm是一款基于electron开发的SSH/SFTP客户端&#xff0c;同时支持Linux、MAC、Windows操作系统&#xff0c;免费开源。 下载地址 Releases electerm/electerm (github.com) 点击下图箭头所指&#xff0c;下载windwos版本 安装 双击安装&#xff0c;等待安装完成 使用…

Melis4.0[D1s]:8.显示测试:图片格式和透明度

文章目录 1.准备素材图片1.1 测试图片像素格式的软件RawViewer.exe1.1.1 使用方法 1.2 自己生成测试图片 2.D1s显示引擎介绍&#xff08;不保证正确&#xff09;2.1 D1s 可以有2个独立的display device输出&#xff08;可以同时接2个显示器&#xff09;2.2 D1s 的 DISP0 有2个通…

普罗米修斯-docker安装

prometheus 监控原理 1、prometheus &#xff1a;虽然说是监控平台&#xff0c;但是实际上是一套数据库 2、mysql_exporter: 可以理解成程序或者软件&#xff0c;他是工作在我们要监控的目标服务器上&#xff0c;主要是用于监控mysql的数据。 3、node_exporter: 他的作用主要是…

Java 3种IO模型,一次搞懂

大家好&#xff0c;我是老三&#xff0c;上一节我们讨论了Linux的五种IO模型&#xff0c;接下来&#xff0c;我们从Java语言层面&#xff0c;来看看对IO的实现。 在Java中&#xff0c;一共有三种IO模型&#xff0c;分别是阻塞IO(BIO)、非阻塞IO(NIO)和异步IO(AIO)。 Java BIO …

IDEA “Cannot resolve symbol” 解决办法

系列文章目录 文章目录 系列文章目录前言一、Cannot resolve symbol是什么问题&#xff1f;二、第一步&#xff1a;检查Maven配置三、第二步&#xff1a;检查target四、 第三步&#xff1a;检查 project五、第四步&#xff1a;lombok 问题总结 前言 请耐心读完&#xff0c;也许…

FE_Vue框架的重要属性讲解【ref props mixin】

1 ref属性 对于传统的HTML而言&#xff0c;id 和 ref确实没有什么差别&#xff0c;但是对于组件来说就不一样了。给组件加id&#xff0c;打印出获取的结果为组件所对应的完整DOM结构。给组件加ref&#xff0c;打印出获取的结果就是VueComponent实例。 被用来给元素或子组件注册…

【SpringCloud微服务实践】注册与发现(Eureka)

注册与发现(Eureka) 注册与发现初实践&#xff0c;注册中心采用SpringCloud全家桶中的Eureka&#xff0c;并配合RestTemplate从Euraka调用微服务。 在前置章节的电影票-用户服务组的基础上升级&#xff0c;摒弃硬编码微服务地址的方案&#xff0c;使用eureka实现微服务的动态…

计算机毕业论文选题推荐|软件工程|系列三

文章目录 导文题目导文 计算机毕业论文选题推荐|软件工程 (***语言)==使用其他任何编程语言 例如:基于(***语言)门窗账务管理系统的设计与实现 得到:基于JAVA门窗账务管理系统的设计与实现 基于vue门窗账务管理系统的设计与实现 等等 题目 基于(***语言) 一体化智慧停车…

86.qt qml-多种粒子特效按钮实现

截图如下所示: 动图如下所示: 支持黑白模式: 1.实现原理 配合之前我们学习的: 82.qt qml-2D粒子系统、粒子方向、粒子项(一)_诺谦的博客-CSDN博客 83.qt qml-初步学习2D粒子影响器(二)_诺谦的博客-CSDN博客 即可实现出来。 以按钮特效3按钮为例:

Google I/O 2023 - Flutter 3.10 发布,快来看看有什么更新吧

核心部分原文链接&#xff1a;https://medium.com/flutter/whats-new-in-flutter-3-10-b21db2c38c73 虽然本次 I/O 的核心 keynote 主要是 AI &#xff0c;但是按照惯例依然发布了新的 Flutter 稳定版&#xff0c;不过并非大家猜测的 4.0&#xff0c;而是 3.10 &#xff0c;Flu…