最简单Sptring Boot+Activiti教程 | 第三篇:流程变量设置与获取

一、概述

在流程执行或者任务执行的过程中,用于设置和获取变量,使用流程变量在流程传递的过程中传递业务参数。其作用域范围是只对应一个流程实例,与其他流程互不影响。

二、启动流程并设置流程变量

	/**
	 * 启动流程+设置流程变量
	 */
	@Test
	public void startProcess(){
		Map<String,Object> variables=new HashMap<>();
		variables.put("彩礼", "50W");
		variables.put("嫁妆", "顺义大别墅");
		runtimeService.startProcessInstanceByKey("helloWord",variables);
		System.out.println("启动成功");
	}

三、流程执行过程中设置流程变量

方法一
	/**
	 * 流程执行过程中设置流程变量 1
	 */
	@Test
	public void setVariables() {
		String executionId="62501";
		Map<String,Object> variables=new HashMap<>();
		variables.put("岳母的礼物", "5年老山参");
		variables.put("岳父的礼物", "三边酒");
		runtimeService.setVariables(executionId, variables);
//		runtimeService.setVariable(executionId, "岳母的回礼", "西城学区房");
		System.out.println("变量设置成功");
	}
方法二
	/**
	 * 流程执行过程中设置流程变量 2
	 */
	@Test
	public void setVariables2() {
		String taskId="67502";
		Map<String,Object> variables=new HashMap<>();
		variables.put("岳父的回礼", "兰博基尼跑车");
//		taskService.setVariable(taskId, variableName, value);
		taskService.setVariables(taskId, variables);
		System.out.println("变量设置成功");
	}

四、任务执行进行时设置流程变量

	/**
	 * 处理任务+设置流程变量
	 */
	@Test
	public void completeTask(){
		String taskId="67502";
		Map<String,Object> variables=new HashMap<>();
		variables.put("彩礼", "5W");
		variables.put("钻戒", "5克拉");
		taskService.complete(taskId,variables);
	}

注:设置流程变量时,KEY如果重复,会覆盖之前的数据,【act_ru_variable】表的【REV_ 】字段版本号会+1

五、获取流程变量

	/**
	 * 获取流程变量 1
	 */
	@Test
	public void getVariables1() {
		String executionId="62501";
		Map<String,Object> variables=runtimeService.getVariables(executionId);
		variables.forEach((key, value) -> {
			System.out.println(key + ":" + value);
		});

		String dowry=(String) runtimeService.getVariable(executionId, "嫁妆");
		System.out.println(dowry);
	}
	/**
	 * 获取流程变量 2
	 */
	@Test
	public void getVariables2() {
		String taskId="72503";
		Map<String,Object> variables=taskService.getVariables(taskId);
		variables.forEach((key, value) -> {
			System.out.println(key + ":" + value);
		});

		String dowry=(String) taskService.getVariable(taskId, "嫁妆");
		System.out.println(dowry);
	}

五、扩展:局部变量 setVariableLocal

局部变量只能再该节点设置和使用,其作用域 范围只作用于该活动节点。
如果一个流程中存在2个活动节点,对每个活动节点都设置流程变量,即使流程变量的名称相同,后一次的版本的值也不会替换前一次版本的值,它会使用不同的任务ID作为标识,存放2个流程变量值,而且TASK_ID的字段会存放任务ID。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值