当前位置: 首页 > news >正文

Springboot +Flowable,各种历史信息如何查询(二)

一.简介

正在执行的流程信息是保存在以 ACT_RU_ 为前缀的表中,执行完毕的流程信息则保存在以 ACT_HI_ 为前缀的表中,也就是流程历史信息表。

假设有一个流程,流程图如下:
在这里插入图片描述
当这个流程执行完毕后,以 ACT_RU_ 为前缀的表中的数据均已清空,现在如果想查看刚刚执行过的流程信息,就得去以 ACT_HI_ 为前缀的表中。

下面看下各种历史信息如何查询。

二.历史活动查询

历史任务就是各种 Task,历史活动则包括更多的内容,比如:开始/结束节点,连线等等这些信息都算是活动,查询代码如下:

历史流程信息查看,代码如下:

@Test
void test08() {List<HistoricActivityInstance> 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();List<HistoricVariableInstance> 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());List<HistoricData> 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_ asc

includeTasks 对应的 SQL语句如下:

SELECT RES.* from ACT_HI_TASKINST RES WHERE RES.PROC_INST_ID_ = ? order by RES.ID_ asc

includeVariables 对应的 SQL语句如下:

SELECT RES.* from ACT_HI_VARINST RES WHERE RES.PROC_INST_ID_ = ? order by RES.ID_ asc

最终查询完成后,调用 getHistoricData 方法可以查看这些额外的数据,List 集合中存放的 HistoricData 也分为不同的类型:

  1. includeActivities 方法对应最终查询出来的类型是 HistoricActivityInstance。
  2. includeTasks 方法对应最终查询出来的类型是 HistoricTaskInstance。
  3. includeVariables 方法对应最终查询出来的类型是 HistoricVariableInstance。

在遍历的时候通过类型判断去查看具体是哪一种变量类型。

http://www.lryc.cn/news/68023.html

相关文章:

  • DataX下载安装使用
  • PCB多层板 : 磁通对消法有效控制EMC
  • 基于正点原子电机实验的pid调试助手代码解析(速度环控制)
  • 报表设计器Stimulsoft 2023.2提供深色主题和 Monoline 图标包
  • 文本三剑客之——sed编辑器
  • 华为OD机试真题 Java 实现【贪心的商人】【2023Q1 100分】
  • 《数据结构与算法C++版》实验二-链表实验
  • 【2023华为OD笔试必会25题--C语言版】《06 简单的自动曝光》——数组
  • Science Advances:宋艳课题组发现经颅近红外激光刺激可提升人类工作记忆
  • Linux系统crash后定位方法-PCIE举例
  • 瑞吉外卖 - 启用与禁用员工账号功能(8)
  • 【MySQL】索引
  • JavaScript全解析——express
  • 【JavaScript数据结构与算法】字符串类(计算二进制子串)
  • TCP连接不释放,应用产生大量CLOSE_WAIT状态TCP
  • Spring基础核心概念理解(常见面试题:什么是IoC?什么是DI?什么是Spring?)
  • 牛客小白月赛 D.遗迹探险 - DP
  • 前端架构师-week6-require源码解析
  • 作为 IT 行业的过来人,你有什么话想对后辈说的?
  • 表数据编辑(数据库)
  • 考虑多能负荷不确定性的区域综合能源系统鲁棒规划(Python代码实现)
  • RocketMQ整理
  • Springboot +Flowable,会签、或签简单使用(二)
  • 将核心交换机配置为NTP服务器
  • application.properties文件注释
  • MySql查询报错this is incompatible with sql_mode=only_full_group_by
  • VMware Workstation 网络备忘 + 集群规模
  • 被裁现状,给找工作的同学一些建议
  • 编程到底难在哪里?
  • C++ 仿函数(一)