一、查询历史流程实例
查找按照某个流程定义的规则一共执行了多少次流程
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
/** 查询历史流程实例 */
@Test
public void findHistoryProcessInstance() {
String processInstanceId = "2101";
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 = "2101";
List 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 = "2101";
List 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 = "2101";
List 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来管理。 这样做的好处在于,加快流程执行的速度,因为正在执行的流程的表中数据不会很大。
演示demo源码下载:http://download.csdn.net/detail/xunzaosiyecao/9623532
本文部分内容整理自itcast讲义,在此表示感谢。 作者:jiankunking 出处:http://blog.csdn.net/jiankunking