自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何查詢已經執(zhí)行過的流程信息?

數據庫 其他數據庫
一個流程中的每一個節(jié)點都是一個活動,當一個流程執(zhí)行結束的時候,如果我們還想查看每一個活動執(zhí)行的細節(jié),就得通過查詢歷史活動來實現了。

今天我們就來看看 HistoryService 的使用。

本文使用的流程圖依然是上篇文章中使用過的,如下:

圖片

1. 查詢歷史流程

查詢歷史流程的方式很簡答,如下:

@SpringBootTest
public class HiTest {

@Autowired
HistoryService historyService;
private static final Logger logger = LoggerFactory.getLogger(HiTest.class);

@Test
void test01() {
List<HistoricProcessInstance> list = historyService.createHistoricProcessInstanceQuery().list();
for (HistoricProcessInstance hi : list) {
logger.info("==={},{},{},{},{},{}",hi.getId(),hi.getName(),hi.getStartActivityId(),hi.getStartTime(),hi.getEndActivityId(),hi.getEndTime());
}
}
}

由于我們這是 Spring Boot 項目,所以基本上不需要什么額外的配置,直接注入 HistoryService 實例即可。

test01 方法中的代碼就是查詢出來目前所有的流程實例,包括正在執(zhí)行的和已經執(zhí)行完畢的都可以查詢到。查詢之后,控制臺打印結果如下:

==>  Preparing: 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_ order by RES.ID_ asc
==> Parameters:
<== Total: 1
Flushing dbSqlSession
flush summary: 0 insert, 0 update, 0 delete.
now executing flush...
--- HistoricProcessInstanceQueryImpl finished --------------------------------------------------------
===a3786614-38eb-11ed-afc8-acde48001122,null,startEvent1,Tue Sep 20 21:53:42 CST 2022,null,null

首先大家看到,這里查詢的 SQL,查詢的表是 ACT_HI_PROCINST,簡單截個圖大家看下:

圖片

大家看到,這張表中記錄了流程實例 ID,流程定義 ID,流程開始的時間,流程結束的時間,流程執(zhí)行耗時,流程開始的節(jié)點,流程發(fā)起人,流程結束的節(jié)點等等。

同時大家也可以看到,在打印出來的查詢結果中,getEndActivityId 和 getEndTime 這兩個字段的值都為 null,這就說明這個流程目前還在執(zhí)行中,還沒執(zhí)行完畢,當一個流程執(zhí)行完畢的時候,這兩個字段就不會為 null 了,小伙伴們可以根據這個特點去判斷一個流程是否執(zhí)行完畢。

現在根據我們上篇文章中介紹的知識點,我將流程這個流程中的任務都執(zhí)行完畢,執(zhí)行完畢之后,ACT_RU_EXECUTION 表中關于流程的記錄就會被刪除掉,也就是執(zhí)行如下代碼現在是查詢不到上面這個流程了:

@Autowired
RuntimeService runtimeService;
@Test
void test02() {
ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId("a3786614-38eb-11ed-afc8-acde48001122").singleResult();
logger.info("pi:{}",pi);
}

這個方法執(zhí)行返回的 pi 對象現在為 null。

現在我們想查詢剛剛執(zhí)行的流程,得去查詢歷史流程,也就是去 ACT_HI_PROCINST 表中去查詢,執(zhí)行我們最上面那個方法:

@Test
void test01() {
List<HistoricProcessInstance> list = historyService.createHistoricProcessInstanceQuery().list();
for (HistoricProcessInstance hi : list) {
logger.info("==={},{},{},{},{},{}",hi.getId(),hi.getName(),hi.getStartActivityId(),hi.getStartTime(),hi.getEndActivityId(),hi.getEndTime());
}
}

現在去查詢,返回的結果中就可以看到 EndActivityId 以及 EndTime 這兩個字段了,因為流程已經執(zhí)行結束了。

通過上面的介紹,大家應該也發(fā)現了,在流程執(zhí)行的過程中,ACT_HI_PROCINST 表中的流程記錄和 ACT_RU_EXECUTION 表中的流程記錄是一一對應的。

2. 查詢歷史活動

一個流程中的每一個節(jié)點都是一個活動,當一個流程執(zhí)行結束的時候,如果我們還想查看每一個活動執(zhí)行的細節(jié),就得通過查詢歷史活動來實現了。

在查詢之前,小伙伴們先來了解下跟歷史活動相關的兩張表。

ACT_HI_ACTINST

這張表中保存一個流程中的所有活動細節(jié)。包括流程的啟動節(jié)點、結束節(jié)點、各種 Task 甚至節(jié)點之間的連線,大家來看下這張表中的信息:

圖片

大家看到,這剛好是一個流程的完整記錄,從上往下,分別是:

  1. 啟動流程。
  2. 連線
  3. 提交請假申請這個 UserTask
  4. 連線
  5. 主管審批這個 UserTask
  6. 連線
  7. 經理審批這個 UserTask
  8. 連線
  9. 結束

事無巨細,全部都記錄下來了。

ACT_HI_TASKINST

這個表看名字就知道只記錄下來了 Task 的信息,我截個圖大家來看下:

圖片

小伙伴們看下,這張表記錄下來了每一個 Task 的具體信息,包括這個 Task 是由誰處理的,Task 的名字,開始時間、結束時間、耗時等信息。

那么針對這兩張表,也有不同的查詢方式。

首先來看查詢歷史活動:

@Test
void test03() {
List<HistoricActivityInstance> list = historyService.createHistoricActivityInstanceQuery().orderByHistoricActivityInstanceStartTime().asc().list();
for (HistoricActivityInstance hai : list) {
logger.info("流程ID:{},活動名稱:{},活動ID:{},活動處理人:{}",hai.getProcessInstanceId(),hai.getActivityName(),hai.getActivityId(),hai.getAssignee());
}
}

查詢結果如下圖:

圖片

小伙伴們看查詢 SQL 也印證我們說的沒有問題。由于我這里目前只執(zhí)行了一個流程,所以這里就只顯示了一個流程的所有活動,大家看打印出來的流程 ID 都是一樣的。

再來看查詢歷史 Task:

@Test
void test04() {
List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery().orderByHistoricTaskInstanceStartTime().asc().list();
for (HistoricTaskInstance hti : list) {
logger.info("流程ID:{},Task 開始時間:{},Task 結束時間:{},Task 處理人:{}",hti.getProcessInstanceId(),hti.getCreateTime(),hti.getEndTime(),hti.getAssignee());
}
}

查詢結果如下:

圖片

查詢 SQL 也如我們所預料的。

責任編輯:武曉燕 來源: 江南一點雨
相關推薦

2022-10-31 10:41:02

Flowable流程前綴

2013-10-29 16:27:23

MySQLSQL語句

2024-09-14 14:18:43

2009-07-08 10:30:57

WebWork

2017-08-22 21:51:07

2010-04-19 09:37:22

Oracle查詢語句

2022-07-28 09:13:30

MySQL數據庫

2018-09-21 16:13:01

數據庫MySQLSQL

2019-09-05 08:25:15

Oraclesidsql

2022-02-11 14:43:53

SQL語句C/S架構

2017-05-04 11:09:21

互聯網

2010-04-26 16:23:52

Oracle dele

2011-12-06 13:30:45

2022-03-30 08:54:21

線程 Thread判斷線程池任務Java

2011-08-30 16:55:29

Ubuntu

2020-06-20 14:09:01

信息安全數據技術

2010-08-04 13:23:29

Flex事件

2010-04-26 14:43:17

Oracle遞歸條件查

2009-06-01 09:30:51

JSF2.0FaceletsAjax4JSF

2010-09-09 16:26:51

SQL循環(huán)For
點贊
收藏

51CTO技術棧公眾號