流程變量
流程變量在整個工作流中扮演很重要的作用。例如:請假流程中有請假天數、請假原因等一些參數都爲流程變量的範圍。流程變量的作用域範圍是只對應一個流程實例。也就是說各個流程實例的流程變量是不相互影響的。流程實例結束完成以後流程變量還保存在數據庫中(存放到流程變量的歷史表中)。
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<HistoricVariableInstance> 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<HistoricProcessInstance> 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<HistoricActivityInstance> 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<HistoricTaskInstance> 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;
}
}