activity 设置流程变量,查询流程变量_activity表如何查看变量参数值_Master_slaves的博客-程序员秘密

技术标签: activity  流程变量设置  Activiti  查询流程变量  

1  javaBean 需实现Serializable接口

package entity;

import java.io.Serializable;

public class Person  implements Serializable{
/**  
	* @Description: TODO(用一句话描述该文件做什么)  
	* @author guochao 
	* @date 2018年6月14日  
	* 
	*/ 
	private static final long serialVersionUID = 1L;
private  String  id;
private String  name;
private int  day;
private String res;
public String getId() {
	return id;
}
public void setId(String id) {
	this.id = id;
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public int getDay() {
	return day;
}
public void setDay(int day) {
	this.day = day;
}
public String getRes() {
	return res;
}
public void setRes(String res) {
	this.res = res;
}
@Override
public String toString() {
	return "Person [id=" + id + ", name=" + name + ", day=" + day + ", res=" + res + "]";
}

}

2  流程变量设置 

package activity003;

import java.io.InputStream;
import java.io.Serializable;
import java.util.zip.ZipInputStream;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.RepositoryService;

import org.activiti.engine.TaskService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.DeploymentBuilder;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.activiti.engine.task.TaskQuery;
import org.junit.Test;

import entity.Person;
import utils.DbUtils;

/**
 * 流程变量  设置流程变量
 * 1  部署新流程  从zip文件部署流程
 * @Description: TODO(用一句话描述该文件做什么)  
* @author guochao 
* @date 2018年6月14日  
*
 */
public class Activtity003 {
	/**
	 * 通过zip文件部署流程 设置流程名 
	 * 执行结果  部署流程Id	1401	流程名称	test003
	 * 操作的表为   流程部署act_re_deployment   流程相关文件 act_re_procdef
	* @Description: TODO(用一句话描述该文件做什么)  
	* @author guochao 
	* @date 2018年6月14日  
	*
	 */
	@Test
	public  void deployProcess(){
		// 从类 加载目录下加载zip文件
		InputStream stream = this.getClass().getClassLoader().getResourceAsStream("helloworld.zip");
		//  获取流程引擎
		ProcessEngine processEngine = DbUtils.getProcessEngine();
		//  获取RepositoryService实例对象
		RepositoryService repositoryService = processEngine.getRepositoryService();
		//  获取流程部署对象
		DeploymentBuilder deployment = repositoryService.createDeployment();
		//  部署流程设置流程名称为test003
		 Deployment deploy = deployment.addZipInputStream(new ZipInputStream(stream)).name("test003").deploy();
		 //  获取流程  Id
		System.out.println("部署流程Id"+"\t"+deploy.getId()+"\t"+"流程名称"+"\t"+deploy.getName());
		// 执行结果    		部署流程Id	1401	流程名称	test003
	}
	/**
	 *启动流程实例 
	 *根据字段ID_启动流程
	 *表  act_re_procdef  字段ID_
	 *结果流程实例   1501 
	* @Description: TODO(用一句话描述该文件做什么)  
	* @author guochao 
	* @date 2018年6月14日  
	*
	 */
	@Test
	public  void  startProcess(){
		String processDefinitionId  ="helloworld:4:1404";
			//  获取流程引擎
			ProcessEngine processEngine = DbUtils.getProcessEngine();
			ProcessInstance startProcess = processEngine.getRuntimeService().startProcessInstanceById(processDefinitionId);
			System.out.println(startProcess.getId());
	}
	/**
	 * 设置流程实例的变量
	 *  使用基本类型
	 *  参数 涉及 的表  act_ru_variable
	* @Description: TODO(用一句话描述该文件做什么)  
	* @author guochao 
	* @date 2018年6月14日  
	*
	 */
	@Test
	public  void  setParam(){
	//  获取流程引擎
		ProcessEngine processEngine = DbUtils.getProcessEngine();
		// 获取流程执行Service
		TaskService taskService = processEngine.getTaskService();
		// 指定流程办理人 
		String name ="张三";
		String processInstanceId ="1501";
		// 根据办理人和流程实例Id查询出当前流程正在执行的任务
		TaskQuery taskQuery = taskService.createTaskQuery();
		
		Task singleResult = taskQuery.processInstanceId(processInstanceId).taskAssignee(name).singleResult();
		taskService.setVariable(singleResult.getId(), "请假人", "王麻子");
		taskService.setVariable(singleResult.getId(), "请假天数", 5);
		taskService.setVariable(singleResult.getId(), "请假原因", "回家探亲");
		
		
	}
	/**
	 * 设置流程实例的变量
	 *  使用基JavaBen  bean实现 implements Serializable 接口
	 *  参数 涉及 的表  act_ru_variable
	* @Description: TODO(用一句话描述该文件做什么)  
	* @author guochao 
	* @date 2018年6月14日  
	*
	 */
	@Test
	public  void  setParamByJavaBean(){
	//  获取流程引擎
		ProcessEngine processEngine = DbUtils.getProcessEngine();
		// 获取流程执行Service
		TaskService taskService = processEngine.getTaskService();
		// 指定流程办理人 
		String name ="张三";
		String processInstanceId ="1501";
		// 根据办理人和流程实例Id查询出当前流程正在执行的任务
		TaskQuery taskQuery = taskService.createTaskQuery();
		
		Task singleResult = taskQuery.processInstanceId(processInstanceId).taskAssignee(name).singleResult();
		Person per = new Person();
		per.setDay(1);
		per.setDay(5);
		per.setName("找钱");
		per.setRes("娶媳妇");
		
		taskService.setVariable(singleResult.getId(), "人员信息", per);
	}
	/**
	 * 获取流程变量
	 *结果 王麻子
	 		5
	 	回家探亲

	* @Description: TODO(用一句话描述该文件做什么)  
	* @author guochao 
	* @date 2018年6月14日  
	*
	 */
	@Test
	public void  getParam(){
		//  获取流程引擎
		ProcessEngine processEngine = DbUtils.getProcessEngine();
		// 获取流程执行Service
		TaskService taskService = processEngine.getTaskService();
		// 指定流程办理人 
		String name ="张三";
		String processInstanceId ="1501";
		// 根据办理人和流程实例Id查询出当前流程正在执行的任务
		TaskQuery taskQuery = taskService.createTaskQuery();
		// 根据办理人和流程实例Id查询出当前流程正在执行的任务
		Task singleResult = taskQuery.processInstanceId(processInstanceId).taskAssignee(name).singleResult();
		String personName = (String)taskService.getVariable(singleResult.getId(), "请假人");
		 Integer day =(Integer)taskService.getVariable(singleResult.getId(), "请假天数");
		String  res =(String)taskService.getVariable(singleResult.getId(), "请假原因");
		System.out.println(personName);
		System.out.println(day);
		System.out.println(res);
		
		//获取javaBean对象   从而得到流程变量
		Person p  =(Person)taskService.getVariable(singleResult.getId(), "人员信息");
		System.out.println(p);//Person [id=null, name=找钱, day=5, res=娶媳妇]
	}
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Master_chaoAndQi/article/details/80694093

智能推荐

自动驾驶Apollo6.0源码阅读-感知篇:感知融合 前景融合_apollo shape_fusion_洪山橋嬉皮見習煉丹的博客-程序员秘密

自动驾驶Apollo6.0源码阅读-感知篇:感知融合 前景融合ProbabilisticFusion::FuseForegroundTrackmatcher_->Associatethis->UpdateAssignedTracksthis->UpdateUnassignedTracksthis->CreateNewTracks参考资料ProbabilisticFusion::FuseForegroundTrackmatcher_->Associate(后续更新文章链接

自用复习:动态路由页面刷新之后空白_动态路由刷新页面空白_「已注销」的博客-程序员秘密

添加动态路由页面刷新之后空白,刷新后打印所有路由状态还在。在注册router的时候就将所有的动态路由添加进来。这是最符合业务需求和业务逻辑的并且高效的方式。这里在代码的基础上说思路,不针对技术选型:一般的动态路由流程三件套: 【获取后端数据】【封装格式化路由方法】【调用方法生成路由】【获取后端数据】:这一步获取的是系统的菜单的数据1,作用有两【展示菜单目录】【生成动态路由】。获取成功之后存储在store里头,方便获取。将数据存到storage中。【封装格式化路由方法】:转化的方法和数据的有直接关系这里不做

QT 相关资源(书籍、论坛、博客等。。。)整理..._weixin_38166557的博客-程序员秘密

中文名:《提问的智慧》英文名:How To Ask Questions The Smart Way中文链接1:http://www.beiww.com/doc/oss/smart-questions.html中文链接2:http://community.csdn.net/IndexPage/SmartQuestion.aspx虽然这篇文章与QT没有太大关联,不过我还是放在...

page request session application四种范围_ArthurKingYs的博客-程序员秘密

JSP的四种范围,分别为page,request,session,application可以用setAttribute("",""); getAttribute("","");首先要声明一点,所谓"作用域"就是"信息共享的范围",也就是说一个信息能够在多大的范围内有效。Web交互的最基本单位为HTTP请求。每个用户从进入网站到离开网站这段过程称为一个HTTP会话,一个服务器的运行过

RT1064学习笔记(3)--串口例程(UART Demo)_lpuart4 rt1176_矽芯硬翌的博客-程序员秘密

RT1064之UART例程Ps:本例程主要作用是,展示如何使用UART发送数据主板为:逐飞RT1064 + 母板一,QTMR—四路通道定时器1)简介:RT1052 芯片具有多达 8 个 LPUART 外设用于串口通讯,它是 Low Power UniversalAsynchronous Receiver Transmitter 的缩写,即低功耗异步收发器,它可以灵活地与外部设备进行全双...

JS三元表达式动态改变显示内容_Eal7的博客-程序员秘密

根据后端传的值,来显示不同内容1.条件写在差值作用域中 <view class=""> <text style="margin-left: 95rpx;">{{item.state == 0 ? '提现中' : item.state == 1 ? '提现成功' : item.state == 2 ? '提现失败':''}}</text> </view>2.利用data改变<view class=""

随便推点

The C Programming Language——Exercise solutions of the chapter one (1st)_翱翔云端的博客-程序员秘密

Recently,I have been reading the book The C Progrmming Lanuage(2nd Edition),which written by Dennis M.Ritchie and Brian W.Kernighan.The are many useful and elegant exercises in the book.Here is my s

常用的转义字符_weixin_30613727的博客-程序员秘密

Shell解释器为了能够更好的理解您想表达的意思,还提供了特别丰富的转义符号来帮助程序员处理输入的特殊数据,常见的转义字符包括有:反斜杠(\)的作用就是转义后面的一个字符变为单纯的字符串,单引号('')则是转义其中所有的字符为单纯的字符串,而双引号("")是保留其中的变量属性不转义,反引号(``)则是把其中的命令执行后返回一个结果。例如咱们先定义一个名称为PRICE的变量并赋值为5,然后通过双...

input checkbox 获取选中值和设置选中状态_input的checkbox_圣剑Jay的博客-程序员秘密

获取选中值JS代码:shisssss//nodestr sfunction getValueCB(nodestr){ var node = document.getElementsByName(nodestr); var nodeValue = []; var len = node.length; for (var i = 0; i < len; i++) { if (node[i].checked) { nodeValue.push(node[i].value); }

RecyclerView你需要掌握的高级控件_dev晴天的博客-程序员秘密

Google 在Android 5.0 提出了design系列的控件,其中RecyclerView就是其中的一员。相对于ListView而言,RecyclerView功能强大的一批。之前总是对这个控件的使用模模糊糊,这里便仔西品味下这个控件。知识点一、基础1、基本使用(1)有关依赖引入其实RecyclerView就是design库里面的,我们可以引入design库即可,这时你不...

设计模式-04.01-结构型设计模式-代理模式&桥接模式&装饰器模式&适配器模式_youthlql的博客-程序员秘密

文章目录引言代理模式【常用】静态代理动态代理cglib代理代理模式的原理解析动态代理的原理解析代理模式的应用场景业务系统的非功能性需求开发代理模式在 RPC、缓存中的应用代理模式在缓存中的应用桥接模式【常用】Demo案例-手机操作问题需求传统方案解决手机操作问题分析使用桥接模式的代码Brand【接口】Phone【抽象类】VivoXiaoMiFoldedPhoneUpRightPhoneClient桥接模式的原理解析桥接模式的应用举例桥接模式的注意事项和细节装饰器模式【常用】Demo案例-咖啡订单项目星巴克咖

XML文件的文档类型定义(DTD)_liuyxit的博客-程序员秘密

    一般的XML开头都声明了DTD(Document Type Definition,文档类型定义),它对XML文件语法和格式做了定义。相应的XML解析器将根据DTD来核对XML文件的语法。DTD中特列符号的作用: 符号 含义 无符号

推荐文章

热门文章

相关标签