流程变量的设置和获取

流程变量在整个工作流中扮演很重要的作用。例如:请假流程中有请假天数、请假原因等一些参数都为流程变量的范围。流程变量的作用域范围是只对应一个流程实例。也就是说各个流程实例的流程变量是不相互影响的。这篇博文就简单的为大家介绍下流程变量的设置和获取。

一、设置流程变量
流程变量的设置方式有两种,一是通过基本类型设置,第二种是通过JavaBean类型设置。

1.基本类型

    /**设置流程变量*/@Testpublic void setProcessVariables(){String processInstanceId = "1301";//流程实例IDString assignee = "张三";//任务办理人TaskService taskService = processEngine.getTaskService();//获取任务的Service,设置和获取流程变量//查询当前办理人的任务IDTask task = taskService.createTaskQuery().processInstanceId(processInstanceId)//使用流程实例ID.taskAssignee(assignee)//任务办理人.singleResult();//设置流程变量【基本类型】taskService.setVariable(task.getId(), "请假人", assignee);taskService.setVariableLocal(task.getId(), "请假天数",3);taskService.setVariable(task.getId(), "请假日期", new Date());}

在这里插入图片描述
2.JavaBean类型

首先,定义JavaBean类。

package cn.gome.d_processVariables;public class Person implements java.io.Serializable{private static final long serialVersionUID = 8379071759772449529L;private Integer id;private String name;private String education;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}

然后,通过JavaBean设置流程变量。这里要注意的是,Javabean类型设置获取流程变量,除了需要这个javabean实现了Serializable接口外,还要求流程变量对象的属性不能发生编号,否则抛出异常。

  /**设置流程变量?去哪个表里查*/@Testpublic void setProcessVariables(){String processInstanceId = "1301";//流程实例IDString assignee = "张三";//任务办理人TaskService taskService = processEngine.getTaskService();//获取任务的Service,设置和获取流程变量//查询当前办理人的任务IDTask task = taskService.createTaskQuery().processInstanceId(processInstanceId)//使用流程实例ID.taskAssignee(assignee)//任务办理人.singleResult();//设置流程变量【javabean类型】Person p = new Person();p.setId(1);p.setName("周江霄");taskService.setVariable(task.getId(), "人员信息", p);System.out.println("流程变量设置成功~~");}
  数据库对应表:act_ru_variable,细心的你可以看到,通过JavaBean设置的流程变量,在act_ru_variable中存储的类型为serializable,变量真正存储的地方在act_ge_bytearray中。

在这里插入图片描述
二、获取流程变量
1.基本类型

/**获取流程变量*/
@Test
public void getProcessVariables(){String processInstanceId = "1301";//流程实例IDString assignee = "张三";//任务办理人TaskService taskService = processEngine.getTaskService();//获取当前办理人的任务IDTask task = taskService.createTaskQuery().processInstanceId(processInstanceId).taskAssignee(assignee).singleResult();//获取流程变量【基本类型】String person = (String) taskService.getVariable(task.getId(), "请假人");Integer day = (Integer) taskService.getVariableLocal(task.getId(), "请假天数");Date date = (Date) taskService.getVariable(task.getId(), "请假日期");System.out.println(person+"  "+day+"   "+date);}
       2.JavaBean类型    
/**获取流程变量*/
@Test
public void getProcessVariables(){String processInstanceId = "1301";//流程实例IDString assignee = "张三";//任务办理人TaskService taskService = processEngine.getTaskService();//获取当前办理人的任务IDTask task = taskService.createTaskQuery().processInstanceId(processInstanceId).taskAssignee(assignee).singleResult();//获取流程变量【javaBean类型】Person p = (Person) taskService.getVariable(task.getId(), "人员信息");System.out.println(p.getId()+"  "+p.getName());System.out.println("获取成功~~");
}
 三、查询历史流程变量    
/**查询历史的流程变量*/
@Test
public void getHistoryProcessVariables(){List<HistoricVariableInstance> list = processEngine.getHistoryService().createHistoricVariableInstanceQuery()//创建一个历史的流程变量查询.variableName("请假天数").list();if(list != null && list.size()>0){for(HistoricVariableInstance hiv : list){System.out.println(hiv.getTaskId()+"  "+hiv.getVariableName()+"        "+hiv.getValue()+"        "+hiv.getVariableTypeName());}}                
}

在这里插入图片描述

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

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

相关文章

【路径最全用法】python代码讲解os.path包的最全用法

目录 概览 &#x1f697;&#x1f697;os.getcwd() &#x1f697;&#x1f697;os.chdir() &#x1f697;&#x1f697;os.path.abspath(path) &#x1f697;&#x1f697;os.path.basename(path) &#x1f697;​​​​​​​&#x1f697;os.path.dirname(path) &#…

细节决定成败——我的日志去哪了?

概述 编写本文档的目的有两点。 本周遇到了一个日志丢失的问题&#xff0c;经过分析&#xff0c;觉得挺有意思的。向大家分享一下我的分析及解决思路。应该在很多项目中都会有该问题。领导和我私下讨论过多次&#xff0c;当前的autodomain代码对文件读取的频率太高了,如何去避…

Spring框架学习 -- 核心思想

目录 (1) Spring是什么? (2) 什么是IOC容器? (3) 从传统开发认识spring (4) 这种传统开发的缺陷 (5)解决传统开发中的缺陷 (6) 对比总结规律 (7) 理解IOC 创作不易多多支持 (1) Spring是什么? 我们常说的Spring的全称是: Spring Framework(Spring框架), 它是一个开源…

使用 Core Tools 在本地开发 Azure Functions

学习模块 使用 Core Tools 在本地创建和运行 Azure Functions - Training | Microsoft Learn 文档 使用 Core Tools 在本地开发 Azure Functions | Microsoft Learn GitHub - Azure/azure-functions-core-tools: Command line tools for Azure Functions 其它 安装适用于 A…

纯css实现边界检测小球动画

文章目录 前言实现环境话不多说直接上代码后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;css实现炫酷的动画 &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出现错…

北醒携全球首款256线车规量产激光雷达亮相广州国际车展

11月17日&#xff0c;北醒携全球首款256线车规量产激光雷达亮相广州国际车展。在车展期间&#xff0c;北醒还公布了与广州花都区人民政府达成投资合作&#xff0c;获滴滴自动驾驶投资以及与捷普联合打造的全球首条量产256线级别车规激光雷达的生产线即将贯通的等多条利好信息&a…

2023-11-20 LeetCode每日一题(最大子数组和)

2023-11-20每日一题 一、题目编号 53. 最大子数组和二、题目链接 点击跳转到题目位置 三、题目描述 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的…

使用dlopenC++动态库的函数符号的常规做法

文章目录 一、Name Mangling二、extern "C"三、Loading Functions四、Loading Classes参考 一、Name Mangling 在 C 中&#xff0c;符号名称与函数名称相同&#xff1a;strcpy 的符号将是 strcpy&#xff0c;因为在 C 中没有两个非静态函数可以具有相同的名称。 因…

C语言童年生活二三事(ZZULIOJ1091:童年生活二三事(多实例测试))

题目描述 Redraiment小时候走路喜欢蹦蹦跳跳&#xff0c;他最喜欢在楼梯上跳来跳去。 但年幼的他一次只能走上一阶或者一下子蹦上两阶。 现在一共有N阶台阶&#xff0c;请你计算一下Redraiment从第0阶到第N阶共有几种走法。 输入&#xff1a;输入包括多组数据。 每组数据包括一…

antd design 5 版本 文件上传

<UploadcustomRequest{customRequest}accept".csv" showUploadList{false}><Button icon{<UploadOutlined />}>上传 CSV 文件</Button></Upload> accept 代表限制的上传类型 也可设置 .excel // 文件上传 ( CSV ) const customReques…

Python开源自动化工具Playwright安装及介绍

一个非常强大的自动化项目叫 playwright-python 它支持主流的浏览器&#xff0c;包含&#xff1a;Chrome、Firefox、Safari、Microsoft Edge 等&#xff0c;同时支持以无头模式、有头模式运行&#xff0c;并提供了同步、异步的 API&#xff0c;可以结合 Pytest 测试框架 使用&…

Kafka(四)消费者消费消息

文章目录 如何确保不重复消费消息&#xff1f;消费者业务逻辑重试消费者提交自定义反序列化类消费者参数配置及其说明重要的参数session.time.ms和heartbeat.interval.ms和group.instance.id增加消费者的吞吐量消费者消费的超时时间和poll()方法的关系 消费者消费逻辑启动消费者…

万宾科技智能井盖传感器,提升市政井盖健康

市政井盖就是城市里不可或缺的基础设施之一&#xff0c;关于它的监测工作可马虎不得。它承载着保护市民的交通安全以及城市正常运转的重要使命。虽然现在城市化的速度很快&#xff0c;但是传统的市政井盖管理方式变得有些力不从心了。井盖的覆盖范围很广&#xff0c;如果单单依…

Python 安装win32com失败

今天进行服务器迁移&#xff0c; 中间有用的python调用win32com组件让docx转换成pdf。不出意外的话出意外了&#xff0c;pip安装win32com的时候各种安装不上&#xff0c; 今天处理完问题之后&#xff0c;记录一下&#xff0c;与人方便与己方便。 在cmd上面&#xff0c;一开始…

【0235】修改私有内存(private memory)中的MyBEEntry时,st_changecount值前后变化

上一篇: 【0234】PgBackendStatus 记录当前postgres进程的活动状态 1. pg_stat_activity中xxx实时信息如何实现? 客户端(eg:psql)在连接上postmaster之后,postmaster守护进程会fork()一个后端进场(backend process),之后此客户端的所有操作、交互均有此对应的Backen…

智慧安防监控系统EasyCVR(v3.4)开放协议的介绍及使用

安防视频监控系统EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台可拓展性强、视频能力灵活&#xff0c;能…

2023最新软件测试20个基础面试题及答案

什么是软件测试&#xff1f; 答案&#xff1a;软件测试是指在预定的环境中运行程序&#xff0c;为了发现软件存在的错误、缺陷以及其他不符合要求的行为的过程。 软件测试的目的是什么&#xff1f; 答案&#xff1a;软件测试的主要目的是保证软件的质量&#xff0c;并尽可能大…

Kotlin 核心语法,为什么选择Kotlin ?

Kotlin 是一个基于 JVM 的新的编程语言&#xff0c;由 JetBrains 开发。与Java相比&#xff0c;Kotlin的语法更简洁、更具表达性&#xff0c;而且提供了更多的特性。 Kotlin是使用Java开发者的思维被创建的&#xff0c;Intellij作为它主要的开发IDE。对于 Android开发者&#…

Docker基础知识总结

文章目录 1.Docker介绍2.Docker版本3.为什么要使用Docker4.Docker基础组件4.1 镜像&#xff08;Images&#xff09;4.2 容器&#xff08;Container&#xff09;和仓库&#xff08;Repository&#xff09; 5.Docker安装6.Docker run7.Dockerfile8.Docker commit9.镜像发布到镜像…

第三天 - 列表推导式详解

python 中列表推导式&#xff0c;主要完成快速赋值&#xff0c;快速生成列表、元组、字典等应用场景。是一个非常好用的工具。在一些排序过程还可以做为参数传入函数。 1.先来一个尝试一下 alist [x for x in range(1,10)]print(alist) # [1, 2, 3, 4, 5, 6, 7, 8, 9] 2. …