河南专业网站建设公司排名,群辉装wordpress,网站建设好了怎么发布,wordpress去除更新提示一.简介
正在执行的流程信息是保存在以 ACT_RU_ 为前缀的表中#xff0c;执行完毕的流程信息则保存在以 ACT_HI_ 为前缀的表中#xff0c;也就是流程历史信息表。
假设有一个流程#xff0c;流程图如下#xff1a; 当这个流程执行完毕后#xff0c;以 ACT_RU_ 为前缀的…一.简介
正在执行的流程信息是保存在以 ACT_RU_ 为前缀的表中执行完毕的流程信息则保存在以 ACT_HI_ 为前缀的表中也就是流程历史信息表。
假设有一个流程流程图如下 当这个流程执行完毕后以 ACT_RU_ 为前缀的表中的数据均已清空现在如果想查看刚刚执行过的流程信息就得去以 ACT_HI_ 为前缀的表中。
下面看下各种历史信息如何查询。
二.历史活动查询
历史任务就是各种 Task历史活动则包括更多的内容比如开始/结束节点连线等等这些信息都算是活动查询代码如下
历史流程信息查看代码如下
Test
void test08() {ListHistoricActivityInstance list historyService.createHistoricActivityInstanceQuery().list();for (HistoricActivityInstance hai : list) {logger.info(name:{},startTime:{},assignee:{},type:{},hai.getActivityName(),hai.getStartTime(),hai.getAssignee(),hai.getActivityType());}
}这个查询对应的 SQL语句如下
SELECT RES.* from ACT_HI_ACTINST RES order by RES.ID_ asc可以看到ACT_HI_ACTINST 表中保存了历史活动信息。
三.历史变量查询
查询流程执行的历史变量代码如下
Test
void test09() {HistoricProcessInstance pi historyService.createHistoricProcessInstanceQuery().singleResult();ListHistoricVariableInstance list historyService.createHistoricVariableInstanceQuery().processInstanceId(pi.getId()).list();for (HistoricVariableInstance hvi : list) {logger.info(name:{},type:{},value:{}, hvi.getVariableName(), hvi.getVariableTypeName(), hvi.getValue());}
}这个查询对应的 SQL语句如下
SELECT RES.* from ACT_HI_VARINST RES WHERE RES.PROC_INST_ID_ ? order by RES.ID_ asc可以看到流程的历史变量信息保存在 ACT_HI_VARINST 表中。
四.历史日志查询
历史日志查询代码如下
Test
void test10() {HistoricProcessInstance pi historyService.createHistoricProcessInstanceQuery().singleResult();ProcessInstanceHistoryLog historyLog historyService.createProcessInstanceHistoryLogQuery(pi.getId())//包括历史活动.includeActivities()//包括历史任务.includeTasks()//包括历史变量.includeVariables().singleResult();logger.info(id:{},startTime:{},endTime:{}, historyLog.getId(), historyLog.getStartTime(), historyLog.getEndTime());ListHistoricData historicData historyLog.getHistoricData();for (HistoricData data : historicData) {if (data instanceof HistoricActivityInstance) {HistoricActivityInstance hai (HistoricActivityInstance) data;logger.info(name:{},type:{}, hai.getActivityName(), hai.getActivityType());}if (data instanceof HistoricTaskInstance) {HistoricTaskInstance hti (HistoricTaskInstance) data;logger.info(name:{},assignee:{}, hti.getName(), hti.getAssignee());}if (data instanceof HistoricVariableInstance) {HistoricVariableInstance hvi (HistoricVariableInstance) data;logger.info(name:{},type:{},value:{}, hvi.getVariableName(), hvi.getVariableTypeName(), hvi.getValue());}}
}这个里边首先是查询基本的流程日志信息这个本质上就是查询历史流程实例信息对应的 SQL语句如下
select RES.*, DEF.KEY_ as PROC_DEF_KEY_, DEF.NAME_ as PROC_DEF_NAME_, DEF.VERSION_ as PROC_DEF_VERSION_, DEF.DEPLOYMENT_ID_ as DEPLOYMENT_ID_ from ACT_HI_PROCINST RES left outer join ACT_RE_PROCDEF DEF on RES.PROC_DEF_ID_ DEF.ID_ where PROC_INST_ID_ ?接下来三个 include每一个 include 都对应一句 SQL。
includeActivities 对应的 SQL语句如下
SELECT RES.* from ACT_HI_ACTINST RES WHERE RES.PROC_INST_ID_ ? order by RES.ID_ ascincludeTasks 对应的 SQL语句如下
SELECT RES.* from ACT_HI_TASKINST RES WHERE RES.PROC_INST_ID_ ? order by RES.ID_ ascincludeVariables 对应的 SQL语句如下
SELECT RES.* from ACT_HI_VARINST RES WHERE RES.PROC_INST_ID_ ? order by RES.ID_ asc最终查询完成后调用 getHistoricData 方法可以查看这些额外的数据List 集合中存放的 HistoricData 也分为不同的类型
includeActivities 方法对应最终查询出来的类型是 HistoricActivityInstance。includeTasks 方法对应最终查询出来的类型是 HistoricTaskInstance。includeVariables 方法对应最终查询出来的类型是 HistoricVariableInstance。
在遍历的时候通过类型判断去查看具体是哪一种变量类型。