第四章:activiti流程中,变量的传递和获取流程变量 ,设置和获取多个流程变量,设置和获取局部流程变量「建议收藏」

第四章:activiti流程中,变量的传递和获取流程变量 ,设置和获取多个流程变量,设置和获取局部流程变量「建议收藏」第四章:activiti流程中,变量的传递和获取流程变量 ,设置和获取多个流程变量,设置和获取局部流程变量

大家好,又见面了,我是你们的朋友全栈君。

上一章我们介绍了部署流程实例,启动流程,查看任务,完成任务的service和实例,下面我们介绍下怎么获取流程中需要传递的变量。

开始前,先撸一遍流程的任务节点名和任务委派人:

第四章:activiti流程中,变量的传递和获取流程变量 ,设置和获取多个流程变量,设置和获取局部流程变量「建议收藏」

流程图如上,三个任务节点名分别是leave001,leave002,leave003,因为我的Navicat不能看流程中的汉字所以可以简单理解为三个请假流程,请假001,请假002,请假003. 

然后看任务委派人:

第四章:activiti流程中,变量的传递和获取流程变量 ,设置和获取多个流程变量,设置和获取局部流程变量「建议收藏」

分别是xiaoliu001,xiaoliu002,xiaoliu003;

好了,下面开始介绍流程变量的传递了:

承接上一章:

/**
	 * 设置流程变量数据
	 */
	@Test
	public void setVariableValues(){
		TaskService taskService=processEngine.getTaskService();//获取任务
		String taskId="";//更加任务id知道是哪个人物,设置流程变量。可以更加查看任务方法查看任务的id,可以到数据库直接看
		//下面设置任务的内容,比如请假流程,任务的第一节点也就是申请人要写请节哀的原因
		taskService.setVariable(taskId, "days", 2);//请假天数
		taskService.setVariable(taskId, "date", new Date());//请假日期
		taskService.setVariable(taskId, "reason", "发烧");//请假原因
		
		//下面我们再测试一个额外的知识点,就是流程传输变量,这里我们再新建一个student对象,对象有id 和name两个属性,还有就是序列化传输
		Student student=new Student();
		student.setId(1);
		student.setName("zhangsan");
		taskService.setVariable(taskId, "student",student);//序列化对象
		
	}

上面是设置流程变量。

下面获取流程变量:

/**
	 * 获取流程变量数据
	 */
	@Test
	public void getVariableValues(){
		TaskService taskService=processEngine.getTaskService();//获取任务
		String taskId="";
		Integer day=(Integer) taskService.getVariable(taskId, "days");//获取请假天数
		Date date=(Date) taskService.getVariable(taskId, "date");//请假日期
		String reason=(String) taskService.getVariable(taskId, "reason");//请假原因
		
		Student student2=(Student) taskService.getVariable(taskId, "student");//序列化对象
		System.out.println("请假天数:"+day);
		System.out.println("请假日期:"+date);
		System.out.println("请假原因:"+reason);
		System.err.println("请假对象:"+student2.getId()+",,,"+student2.getName());
	}

然后,就启动流程了,启动前我们先打开数据库,可以先看看act_ru_task任务表,此时没有任务,这个表应该是空的。

下面启动流程:

这运行start方法:

第四章:activiti流程中,变量的传递和获取流程变量 ,设置和获取多个流程变量,设置和获取局部流程变量「建议收藏」

此时任务表有了一条数据,

然后执行查看任务方法,看看任务id:

第四章:activiti流程中,变量的传递和获取流程变量 ,设置和获取多个流程变量,设置和获取局部流程变量「建议收藏」

结果如下:

任务ID:12504
任务名称:leave001
任务创建时间:Sun Apr 22 12:40:52 CST 2018
任务委派人:xiaoliu001
任务流程实例Id:12501

也可看任务表的ID_字段值。

第四章:activiti流程中,变量的传递和获取流程变量 ,设置和获取多个流程变量,设置和获取局部流程变量「建议收藏」

然后把这个值放到刚才我们写的设置流程变量的方法中:

第四章:activiti流程中,变量的传递和获取流程变量 ,设置和获取多个流程变量,设置和获取局部流程变量「建议收藏」

执行上面的方法,成功后我们看看数据库的act_ru_variable表会有我们设置的几个变量:

第四章:activiti流程中,变量的传递和获取流程变量 ,设置和获取多个流程变量,设置和获取局部流程变量「建议收藏」

然后我们继续往下走,执行完成任务方法,注意修改任务id哦

第四章:activiti流程中,变量的传递和获取流程变量 ,设置和获取多个流程变量,设置和获取局部流程变量「建议收藏」

完成后任务到了leave002节点,

这里我们直接看数据的任务id是多少:

第四章:activiti流程中,变量的传递和获取流程变量 ,设置和获取多个流程变量,设置和获取局部流程变量「建议收藏」

17502,然后我们那这个任务id去执行我们刚才写的获取流程变量的方法:

第四章:activiti流程中,变量的传递和获取流程变量 ,设置和获取多个流程变量,设置和获取局部流程变量「建议收藏」

执行结果是:

请假天数:2
请假日期:Sun Apr 22 12:47:58 CST 2018
请假原因:faShao
请假对象:1,,,zhangsan

结果是我们设进去的值。说明没问题。

然后再执行完成方法,流程到leave003任务节点,然后再获取流程变量数据。

结果:

请假天数:2
请假日期:Sun Apr 22 12:47:58 CST 2018
请假原因:faShao
请假对象:1,,,zhangsan

也是同样能获得的。

最后再complete完成方法,执行完流程,流程结束:

任务表清空。

下面再介绍一种可以设置多个变量的方法:

	/**
	 * 设置多个流程变量数据
	 */
	@Test
	public void setVariableValue1(){
		TaskService taskService=processEngine.getTaskService();//获取任务
		String taskId="25004";//更加任务id知道是哪个人物,设置流程变量。可以更加查看任务方法查看任务的id,可以到数据库直接看
		//下面设置任务的内容,比如请假流程,任务的第一节点也就是申请人要写请节哀的原因
//		taskService.setVariable(taskId, "days", 2);//请假天数
//		taskService.setVariable(taskId, "date", new Date());//请假日期
//		taskService.setVariable(taskId, "reason", "faShao");//请假原因
		
		//下面我们再测试一个额外的知识点,就是流程传输变量,这里我们再新建一个student对象,对象有id 和name两个属性,还有就是序列化传输
		Student student2=new Student();
		student2.setId(1);
		student2.setName("zhangsan");
		taskService.setVariable(taskId, "student",student2);//序列化对象
		
		Map<String, Object> variables=new HashMap<String,Object>();
		variables.put("days", 3);
		variables.put("date",new Date());
		variables.put("reason", "faShao2");
		variables.put("student", student2);
		taskService.setVariables(taskId, variables);
		
	}
	

	/**
	 * 获取多个流程变量数据
	 */
	@Test
	public void getVariableValue(){
		TaskService taskService=processEngine.getTaskService();//获取任务
		String taskId="25004";
		
		Map<String, Object> variables=taskService.getVariables(taskId);
		Integer day=(Integer) variables.get("days");//获取请假天数
		Date date=(Date) variables.get("date");//请假日期
		String reason=(String) variables.get("reason");//请假原因
		
		Student student2=(Student) variables.get("student");//序列化对象
		System.out.println("请假天数:"+day);
		System.out.println("请假日期:"+date);
		System.out.println("请假原因:"+reason);
		System.err.println("请假对象:"+student2.getId()+",,,"+student2.getName());
	}

测试过程跟之前的一样,最后获取的结果是:

请假天数:3
请假日期:Sun Apr 22 13:09:22 CST 2018
请假原因:faShao2
请假对象:1,,,zhangsan

跟设置的一样。

下面再介绍一个局部变量,就是设置的变量值只在当前节点有效,当流程走到下一个节点时,是获取不到这个值的。

/**
	 * 设置流程局部变量数据
	 */
	@Test
	public void setVariableLocalValue(){
		TaskService taskService=processEngine.getTaskService();//获取任务
		String taskId="25004";//更加任务id知道是哪个人物,设置流程变量。可以更加查看任务方法查看任务的id,可以到数据库直接看
		//下面设置任务的内容,比如请假流程,任务的第一节点也就是申请人要写请节哀的原因
		taskService.setVariableLocal(taskId, "days", 2);//请假天数
		taskService.setVariable(taskId, "date", new Date());//请假日期
		taskService.setVariable(taskId, "reason", "faShao");//请假原因
		
		//下面我们再测试一个额外的知识点,就是流程传输变量,这里我们再新建一个student对象,对象有id 和name两个属性,还有就是序列化传输
		Student student=new Student();
		student.setId(1);
		student.setName("zhangsan");
		taskService.setVariable(taskId, "student",student);//序列化对象
		
	}
	
	/**
	 * 获取流程变量数据
	 */
	@Test
	public void getVariableLocalValues(){
		TaskService taskService=processEngine.getTaskService();//获取任务
		String taskId="32502";
		Integer day=(Integer) taskService.getVariableLocal(taskId, "days");//获取请假天数
		Date date=(Date) taskService.getVariable(taskId, "date");//请假日期
		String reason=(String) taskService.getVariable(taskId, "reason");//请假原因
		
		Student student2=(Student) taskService.getVariable(taskId, "student");//序列化对象
		System.out.println("请假天数:"+day);
		System.out.println("请假日期:"+date);
		System.out.println("请假原因:"+reason);
		System.err.println("请假对象:"+student2.getId()+",,,"+student2.getName());
	}
	

这里代码值改了请假天数的值,并使用了setVariablesLocal()方法。先运行设置局部流程变量方法,发现数据库的变量表会多出一个请假天数的数据:

第四章:activiti流程中,变量的传递和获取流程变量 ,设置和获取多个流程变量,设置和获取局部流程变量「建议收藏」

然后执行获取方法:

请假对象:1,,,zhangsan
请假天数:2
请假日期:Sun Apr 22 13:24:02 CST 2018
请假原因:faShao

请假的天数是2覆盖了数据库中另一个请假天数的值。然后执行complete()方法完成任务。

再次执行获取方法,结果:

请假天数:null
请假日期:Sun Apr 22 13:24:02 CST 2018
请假原因:faShao
请假对象:1,,,zhangsan

请假天数变成了空。

第四章:activiti流程中,变量的传递和获取流程变量 ,设置和获取多个流程变量,设置和获取局部流程变量「建议收藏」

数据库的变量表也少了一条数据。

好了,这就是流程局部变量了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/106144.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • U3D场景制作规范(转)「建议收藏」

    U3D场景制作规范(转)「建议收藏」本文提到的所有数字模型制作,全部是用3DMAX建立的模型,即使是不同的驱动引擎,对模型的要求基本是相同的。当一个VR模型制作完成时,它所包含的基本内容包括:场景尺寸、单位,模型归类塌陷、命名、节点编辑,纹理、坐标、纹理尺寸、纹理格式、材质球等必须是符合制作规范的。一个归类清晰、面数节省、制作规范的模型文件对于程序控制管理是十分必要的。首先对制作流程作简单介绍:素材采集-模型制作-贴图制作

  • k3s集群安装_hadoop跨集群配置

    k3s集群安装_hadoop跨集群配置文章目录一、k3s离线部署准备工作1.准备节点2.安装Docker3.[k3s官网](https://github.com/k3s-io/k3s/releases/tag/v1.18.6%2Bk3s1)中下载部署文件。部署步骤1.导入镜像:2.修改文件权限:3.安装4.检查是否安装成功:5.卸载k3s问题解决:1.出现kubernetesclusterunreachable:2.出现Theconnectiontotheserverlocalhost:8080wasrefu

  • pda手持终端软件下载_成为pda

    pda手持终端软件下载_成为pdaPDAF点亮主要参考《MT6763_MT6757_PDAF_Driver_and_Buf_mgr_Porting_Guide.pdf》1、什么是PDAF1.1PDAF的原理在了解相位对焦PDAF,PhaseDetectionAutoFocus之前,在网上肯定会搜到其他对焦方式。比如对比度对焦(反差对焦)CDAF,ContrastDetectionAutoFocus、激光对焦LDAF,LaserDetectionAutoFocus、双核对焦等。…

  • 海量数据处理分析

    海量数据处理分析 笔者在实际工作中,有幸接触到海量的数据处理问题,对其进行处理是一项艰巨而复杂的任务。原因有以下几个方面:一、数据量过大,数据中什么情况都可能存在。如果说有10条数据,那么大不了每条去逐一检查,人为处理,如果有上百条数据,也可以考虑,如果数据上到千万级别,甚至过亿,那不是手工能解决的了,必须通过工具或者程序进行处理,尤其海量的数据中,什么情况都可能存在,例如,数据中某处格式出了问题

  • matlab初学者入门_什么一闻就能睡2小时

    matlab初学者入门_什么一闻就能睡2小时目录零基础入门matlab前言1.界面认识2.变量命名3.数据类型4.元胞数组和结构体5.矩阵操作6.程序结构7.基本绘图操作7.1.二维平面绘图7.2.三维立体绘图8.图形的保存与导出9.补充零基础入门matlab前言这篇文章很适合MATLAB的入门学习,这也是我在入门时学习的笔记。虽然说是”零基础“入门matlab,但是如果有其它编程语言基础的话,学起来自然会更轻松。特别鸣谢:B站UP主——爱研究的小阿楠1.界面认识2.变量命名注:Matlab中的注释%%独占一行的注释(有上下横线

  • 在线学习Java的几个网站,别再盲目学习java了![通俗易懂]

    在线学习Java的几个网站,别再盲目学习java了![通俗易懂]LearnJava在线这是一个非常不错的学习Java的在线网站,纯免费。这是一个个人项目,旨在通过简单有效的在浏览器中进行练习让你快速掌握Java编程语言。通过直接从网络浏览器运行实际代码,你无需在本地安装和执行代码就可以尝试编码,这无疑提高了编程效率和上手效率。你可以根据目录进行练习,有基础部分和高级部分,首先有例子代码,告诉你需要注意的事项以及详细的讲解,旨在把你教会后再让你进行练习。下面就是练习部分,练习部分没有固定在底部边框,可以自由滑动,能够让你编写代码的同时能够查看示例代码详解

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号