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=娶媳妇]
}
}