流程变量
流程变量在整个工作流中扮演很重要的作用。例如:请假流程中有请假天数、请假原因等一些参数都为流程变量的范围。流程变量的作用域范围是只对应一个流程实例。也就是说各个流程实例的流程变量是不相互影响的。流程实例结束完成以后流程变量还保存在数据库中(存放到流程变量的历史表中)。
package com;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.TaskService;
import org.activiti.engine.history.HistoricActivityInstance;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.history.HistoricVariableInstance;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;
public class DefinitionVaribles {
/**
* this.getClass().getResourceAsStream("diagrams/MyVaribles.bpmn");//从classpath根目录下下载指定文件
* this.getClass().getClassLoader().getResourceAsStream("diagrams/MyProcess.zip");//从classpath根目录下下载指定文件
* this.getClass().getResourceAsStream("MyVaribles.bpmn");//从当前包下下载指定文件
*/
ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();
@Test
/**部署流程*/
public void deploy()throws Exception{
InputStream in= this.getClass().getResourceAsStream("/diagrams/MyVaribles.bpmn");
Deployment deployment=processEngine.getRepositoryService()
.createDeployment()
.name("请假流程")
.addInputStream("Myvaribles.bpmn",in)
.addInputStream("Myvaribles.png", in)
.deploy();
System.out.println("流程定义Id:"+deployment.getId()+" "+"流程名称:"+deployment.getName());
}
@Test
/**开启流程*/
public void startProcess()throws Exception{
String processInstanceKey="myVaribles";
ProcessInstance pi=processEngine.getRuntimeService().startProcessInstanceByKey(processInstanceKey);
System.out.println("流程实例ID:"+pi.getId());
}
@Test
/**设置流程变量*/
public void setVaribles()throws Exception{
//获取执行taskService
TaskService taskService=processEngine.getTaskService();
//指定办理人
String assignee="谢永学";
//指定实例ID
String processInstanceId="2201";
Task task= taskService.createTaskQuery()
.processInstanceId(processInstanceId)
.taskAssignee(assignee)
.singleResult();
taskService.setVariable(task.getId(), "请假人", "谢永学");
taskService.setVariableLocal(task.getId(), "请假天数", 10);
taskService.setVariable(task.getId(), "请假日期", new Date());
Person p=new Person();
p.setId(12345);
p.setName("谢永远");
taskService.setVariable(task.getId(), "人员信息", p);
System.out.println("设置变量完成");
}
@Test
/**得到参数*/
public void getVaribles()throws Exception{
//获取执行taskService
TaskService taskService=processEngine.getTaskService();
//指定办理人
String assignee="谢永学";
//指定实例ID
String processInstanceId="2201";
Task task=taskService.createTaskQuery()
.processInstanceId(processInstanceId)
.taskAssignee(assignee)
.singleResult();
String StringValue=(String)taskService.getVariable(task.getId(),"请假人");
Integer IntValue=(Integer)taskService.getVariableLocal(task.getId(),"请假天数");
Date dateValue=(Date)taskService.getVariable(task.getId(), "请假日期");
System.out.println("StringValue:"+StringValue+"===IntVlue:"+IntValue+"===dateValue"+dateValue);
Person p=(Person)taskService.getVariable(task.getId(), "人员信息");
System.out.println("Id:"+p.getId()+",name:"+p.getName());
}
/**
* 查询历史变量
* @throws Exception
*/
@Test
public void queryHistoryVaribles()throws Exception{
String assignee="谢永学";
String processInstanceId="2201";
List list=processEngine.getHistoryService()
.createHistoricVariableInstanceQuery()
.variableName("请假天数")
.list();
if(list!=null){
for (HistoricVariableInstance historicVariableInstance : list) {
System.out.println(historicVariableInstance.getTaskId()+"name:"+historicVariableInstance.getVariableName());
}
}
}
/**
* 历史流程实例查看,查找按照某个规则一共执行了多少次流程
* @throws Exception
*/
@Test
public void queryHistoricProcessInstance()throws Exception{
List hpiList=processEngine.getHistoryService()
//获取历史流程实例,返回历史流程实例的集合
.createHistoricProcessInstanceQuery()//创建流程实例查询
.processDefinitionKey("myVaribles")//按照流程定义的Key查询
.orderByProcessInstanceStartTime()//按照流程开始时间降序排列
.asc()
.list();
for (HistoricProcessInstance hpi : hpiList) {
System.out.println("pid:"+hpi.getId());
System.out.println("pdid:"+hpi.getProcessDefinitionId());
System.out.println("startTime:"+hpi.getStartTime());
System.out.println("endTime:"+hpi.getEndTime());
System.out.println("duration:"+hpi.getDurationInMillis());
}
}
/**
* 历史活动查看(某一次流程的执行经历了多少步)
* @throws Exception
*/
@Test
public void queryHistoricActivityInstance()throws Exception{
String processInstance="2201";
List haiList= processEngine.getHistoryService()
.createHistoricActivityInstanceQuery()
.processInstanceId(processInstance)
.orderByHistoricActivityInstanceStartTime()
.asc()
.list();
for (HistoricActivityInstance hai : haiList) {
System.out.println("activiId:"+hai.getActivityId()+",");
System.out.println("name:"+hai.getActivityName()+",");
System.out.println("type:"+hai.getProcessInstanceId()+",");
System.out.println("assignee:"+hai.getAssignee()+",");
System.out.println("startTime:"+hai.getStartTime()+",");
System.out.println("endTime:"+hai.getEndTime()+",");
System.out.println("duration:"+hai.getDurationInMillis());
}
}
/**
* 历史任务查看(某一次流程的执行经历了多少次任务节点)
* @throws Exception
*/
@Test
public void queryHistoricTaskInstance()throws Exception{
String processInstance="2201";
List htiList= processEngine.getHistoryService()
.createHistoricTaskInstanceQuery()
.processInstanceId(processInstance)
.orderByHistoricTaskInstanceEndTime()
.asc()
.list();
for(HistoricTaskInstance hti : htiList) {
System.out.println("taskId:"+hti.getId());
System.out.println("name:"+hti.getName()+",");
System.out.println("pdId:"+hti.getProcessDefinitionId());
System.out.println("pId:"+hti.getProcessInstanceId());
System.out.println("assignee:"+hti.getAssignee());
System.out.println("startTime:"+hti.getStartTime());
System.out.println("endTime:"+hti.getEndTime());
System.out.println("duration:"+hti.getDurationInMillis());
}
}
}
Javabean类型设置流程变量,需要这个javabean实现了Serializable接口
package com;
import java.io.Serializable;
public class Person implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private Integer id;
private String name;
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;
}
}