项目:cn.itcast.e_historyQuery
一. 工作流的23张表
二. 历史相关表
- 历史流程实例表 act_hi_procinst
- 历史活动节点表 act_hi_actinst
- 历史任务表 act_hi_taskinst
三. 查询历史流程实例
/**查询历史流程实例*/
@Test
public void findHistoryProcessInstance(){
String processInstanceId = "1027";
HistoricProcessInstance hpi = processEngine.getHistoryService()//与历史数据(历史表)相关的Service
.createHistoricProcessInstanceQuery()//创建历史流程实例查询
.processInstanceId(processInstanceId)//使用流程实例ID查询
.orderByProcessInstanceStartTime().asc()
.singleResult();
System.out.println(hpi.getId()+" "+hpi.getProcessDefinitionId()+" "+hpi.getStartTime()+" "+hpi.getEndTime()+" "+hpi.getDurationInMillis());
}
四. 查询历史活动节点
/**查询历史活动实例*/
@Test
public void findHistoryActiviti(){
String processInstanceId = "1005";
List<HistoricActivityInstance> list = processEngine.getHistoryService()//
.createHistoricActivityInstanceQuery()//创建历史活动实例的查询
.processInstanceId(processInstanceId)//
.orderByHistoricActivityInstanceStartTime().asc()//
.list();
if(list!=null && list.size()>0){
for(HistoricActivityInstance hai:list){
System.out.println(hai.getId()+" "+hai.getProcessInstanceId()+" "+hai.getActivityType()+" "+hai.getStartTime()+" "+hai.getEndTime()+" "+hai.getDurationInMillis());
System.out.println("#####################");
}
}
}
五. 查询历史任务实例
/**查询历史任务实例*/
@Test
public void findHistoryTask(){
String processInstanceId = "1027";
List<HistoricTaskInstance> list = processEngine.getHistoryService()//与历史数据(历史表)相关的Service
.createHistoricTaskInstanceQuery()//创建历史任务实例查询
.processInstanceId(processInstanceId)//
.orderByHistoricTaskInstanceStartTime().asc()
.list();
if(list!=null && list.size()>0){
for(HistoricTaskInstance hti:list){
System.out.println(hti.getId()+" "+
hti.getName()+" "+
hti.getProcessInstanceId()+" "+
hti.getStartTime()+" "+
hti.getEndTime()+" "+
hti.getDurationInMillis());
System.out.println("################################");
}
}
}
六. 查询历史流程变量实例
/**查询历史流程变量实例*/
@Test
public void findHistoryProcessVariables(){
String processInstanceId = "1005";
List<HistoricVariableInstance> list = processEngine.getHistoryService()//
.createHistoricVariableInstanceQuery()//创建一个历史的流程变量查询对象
.processInstanceId(processInstanceId)//
.list();
if(list!=null && list.size()>0){
for(HistoricVariableInstance hvi:list){
System.out.println(hvi.getId()+" "+
hvi.getProcessInstanceId()+" "+
hvi.getVariableName()+" "+
hvi.getVariableTypeName()+" "+
hvi.getValue());
System.out.println("###############################################");
}
}
}
七. 最后
由于数据库中保存着历史信息以及正在运行的流程实例信息,在实际项目中对已完成任务的查看频率远不及对代办和可接收任务的查看,所以在activiti采用分开管理,把正在运行的交给RuntimeService、TaskService管理,而历史数据交给HistoryService来管理。
这样做的好处在于,加快流程执行的速度,因为正在执行的流程的表中数据不会很大。