Flowable歷史查詢實例分析
介紹
歷史是記錄流程執(zhí)行過程中發(fā)生的事情,并將其永久存儲的組件。與運行時數(shù)據(jù)不同,歷史數(shù)據(jù)在流程實例完成以后仍保存在數(shù)據(jù)庫中。
有6個歷史實體:
- HistoricProcessInstance保存當前及已結(jié)束流程實例的信息。
- HistoricVariableInstance保存流程變量或任務(wù)變量的最新值。
- HistoricActivityInstance保存活動(流程中的節(jié)點)的一次執(zhí)行的信息。
- HistoricTaskInstance保存當前與歷史(完成及刪除的)任務(wù)實例的信息。
- HistoricIdentityLink保存任務(wù)及流程實例、當前及歷史的身份關(guān)聯(lián)的信息。
- HistoricDetail保存與歷史流程實例、活動實例或任務(wù)實例等有關(guān)的多種信息。
歷史與當前進行中的流程實例都在數(shù)據(jù)庫中保存歷史實體,因此可以選擇直接查詢歷史表,以減少對運行時流程實例數(shù)據(jù)的訪問,并提高運行時執(zhí)行的性能。
歷史流程實例查詢
獲取所有流程中,完成所花費時間(持續(xù)時間)排名前10的、流程定義為XXX的、已完成的HistoricProcessInstances(歷史流程實例)。
historyService.createHistoricProcessInstanceQuery()
.finished()
.processDefinitionId("XXX")
.orderByProcessInstanceDuration().desc()
.listPage(0, 10);
@Test
public void QueryHistoryProcess() {
// 獲取流程引擎對象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
HistoryService historyService = processEngine.getHistoryService();
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
.processInstanceId("2c495021-55bf-11ed-a800-005056c00001")
.orderByProcessInstanceStartTime().asc()
.singleResult();
System.out.println("流程實例ID:" + historicProcessInstance.getId());
System.out.println("流程定義ID:" + historicProcessInstance.getProcessDefinitionId());
System.out.println("流程開始時間:" + historicProcessInstance.getStartTime());
System.out.println("流程結(jié)束時間:" + historicProcessInstance.getEndTime());
}==> Preparing: select distinct 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 RES.PROC_INST_ID_ = ? order by RES.START_TIME_ asc
==> Parameters: 2c495021-55bf-11ed-a800-005056c00001(String)
<== Total: 1流程實例ID:2c495021-55bf-11ed-a800-005056c00001
流程定義ID:MyLeave:1:8c16935c-5544-11ed-b9df-005056c00001
流程開始時間:Thu Oct 27 14:18:28 CST 2022
流程結(jié)束時間:Thu Oct 27 16:40:51 CST 2022
歷史變量實例查詢
獲取已完成的、id為’XXX’的流程實例中,所有的HistoricVariableInstances(歷史變量實例),并以變量名排序。
historyService.createHistoricVariableInstanceQuery()
.processInstanceId("XXX")
.orderByVariableName.desc()
.list();@Test
public void QueryHistoryVariables() {
// 獲取流程引擎對象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
HistoryService historyService = processEngine.getHistoryService();
List<HistoricVariableInstance> list = historyService.createHistoricVariableInstanceQuery()
.processInstanceId("2c495021-55bf-11ed-a800-005056c00001")
.list();
if (list != null && list.size() > 0) {
for (HistoricVariableInstance hvi : list) {
System.out.println("流程變量ID:" + hvi.getId());
System.out.println("流程實例ID:" + hvi.getProcessInstanceId());
System.out.println("變量名稱:" + hvi.getVariableName());
System.out.println("變量的值:" + hvi.getValue());
System.out.println("變量的創(chuàng)建時間:" + DateUtil.format(hvi.getCreateTime(), "yyyy-MM-dd HH:mm:ss"));
System.out.println("###############################################");
}
}
}流程變量ID:2c499e42-55bf-11ed-a800-005056c00001
流程實例ID:2c495021-55bf-11ed-a800-005056c00001
變量名稱:nrOfHolidays
變量的值:3
變量的創(chuàng)建時間:2022-10-27 14:18:28
###############################################
流程變量ID:2c49ec63-55bf-11ed-a800-005056c00001
流程實例ID:2c495021-55bf-11ed-a800-005056c00001
變量名稱:description
變量的值:工作累了,想出去玩玩
變量的創(chuàng)建時間:2022-10-27 14:18:28
###############################################
流程變量ID:2c49ec64-55bf-11ed-a800-005056c00001
流程實例ID:2c495021-55bf-11ed-a800-005056c00001
變量名稱:employee
變量的值:小王
變量的創(chuàng)建時間:2022-10-27 14:18:28
###############################################
流程變量ID:45f4b054-55c7-11ed-80ee-005056c00001
流程實例ID:2c495021-55bf-11ed-a800-005056c00001
變量名稱:executeType
變量的值:YES
變量的創(chuàng)建時間:2022-10-27 15:16:27
###############################################
歷史活動實例查詢
獲取最新的、已完成的、流程定義的id為XXX的、服務(wù)任務(wù)類型的HistoricActivityInstance(歷史活動實例)。
historyService.createHistoricActivityInstanceQuery()
.activityType("serviceTask")
.processDefinitionId("XXX")
.finished()
.orderByHistoricActivityInstanceEndTime().desc()
.listPage(0, 1);@Test
public void QueryHistoryActivity() {
// 獲取流程引擎對象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
HistoryService historyService = processEngine.getHistoryService();
List<HistoricActivityInstance> list = historyService.createHistoricActivityInstanceQuery()
.processInstanceId("2c495021-55bf-11ed-a800-005056c00001")
.orderByHistoricActivityInstanceStartTime().asc()
.list();
if (list != null && list.size() > 0) {
for (HistoricActivityInstance hai : list) {
System.out.println("歷史活動ID:" + hai.getId());
System.out.println("流程定義ID:" + hai.getProcessDefinitionId());
System.out.println("流程開始時間:" + DateUtil.format(hai.getStartTime(), "yyyy-MM-dd HH:mm:ss"));
System.out.println("流程結(jié)束時間:" + DateUtil.format(hai.getEndTime(), "yyyy-MM-dd HH:mm:ss"));
System.out.println("流程的處理人是:" + hai.getAssignee());
System.out.println("#####################");
}
}
}==> Preparing: select RES.* from ACT_HI_ACTINST RES WHERE RES.PROC_INST_ID_ = ? order by START_TIME_ asc
==> Parameters: 2c495021-55bf-11ed-a800-005056c00001(String)
<== Total: 11歷史活動ID:2c4a1376-55bf-11ed-a800-005056c00001
流程定義ID:MyLeave:1:8c16935c-5544-11ed-b9df-005056c00001
流程開始時間:2022-10-27 14:18:28
流程結(jié)束時間:2022-10-27 14:18:28
流程的處理人是:null
#####################
歷史活動ID:2c4cd298-55bf-11ed-a800-005056c00001
流程定義ID:MyLeave:1:8c16935c-5544-11ed-b9df-005056c00001
流程開始時間:2022-10-27 14:18:28
流程結(jié)束時間:2022-10-27 15:16:27
流程的處理人是:張主管
#####################
歷史活動ID:4608ad88-55c7-11ed-80ee-005056c00001
流程定義ID:MyLeave:1:8c16935c-5544-11ed-b9df-005056c00001
流程開始時間:2022-10-27 15:16:28
流程結(jié)束時間:2022-10-27 16:40:51
流程的處理人是:李經(jīng)理
#####################
歷史詳情查詢
下面的的例子獲取id為123的流程中所有的變量更新記錄。這個查詢只會返回HistoricVariableUpdate(歷史變量更新)。請注意一個變量名可能會有多個HistoricVariableUpdate實體,這代表了流程中的每一次變量更新。可以使用orderByTime(按變量更新的時間)或orderByVariableRevision(按變量更新的版本號)對這些更新記錄進行排序。
historyService.createHistoricDetailQuery()
.variableUpdates()
.processInstanceId("123")
.orderByVariableName().asc()
.list()下面的例子獲取流程id為"123"的、啟動時提交或任何任務(wù)中提交的所有表單參數(shù)。這個查詢只會返回HistoricFormProperties(歷史表單參數(shù))。
historyService.createHistoricDetailQuery()
.formProperties()
.processInstanceId("123")
.orderByVariableName().asc()
.list()最后一個例子獲取id為"123"的任務(wù)進行的所有變量更新操作。將返回該任務(wù)設(shè)置的所有變量(任務(wù)局部變量)的HistoricVariableUpdates,而不會返回流程實例中設(shè)置的變量。
historyService.createHistoricDetailQuery()
.variableUpdates()
.taskId("123")
.orderByVariableName().asc()
.list()歷史任務(wù)實例查詢
獲取所有任務(wù)中,完成所花費時間(持續(xù)時間)排名前10的、已完成的HistoricTaskInstance(歷史任務(wù)實例)。
historyService.createHistoricTaskInstanceQuery() .finished() .orderByHistoricTaskInstanceDuration().desc() .listPage(0, 10);
獲取刪除原因包含"invalid"的、最終指派給kermit用戶的HistoricTaskInstance。
historyService.createHistoricTaskInstanceQuery()
.finished()
.taskDeleteReasonLike("%invalid%")
.taskAssignee("kermit")
.listPage(0, 10);@Test
public void QueryHistoryTask() {
// 獲取流程引擎對象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
HistoryService historyService = processEngine.getHistoryService();
List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery()
.processInstanceId("2c495021-55bf-11ed-a800-005056c00001")
.orderByHistoricTaskInstanceStartTime().asc()
.list()
if (list != null && list.size() > 0) {
for (HistoricTaskInstance hti : list) {
System.out.println("歷史任務(wù)ID:" + hti.getId());
System.out.println("流程定義ID:" + hti.getProcessDefinitionId());
System.out.println("流程執(zhí)行實例ID:" + hti.getExecutionId());
System.out.println("流程結(jié)束時間:" + DateUtil.format(hti.getEndTime(), "yyyy-MM-dd HH:mm:ss"));
System.out.println("流程的處理人是:" + hti.getAssignee());
System.out.println("################################");
}
}
}==> Preparing: select distinct RES.* from ACT_HI_TASKINST RES WHERE RES.PROC_INST_ID_ = ? order by RES.START_TIME_ asc
==> Parameters: 2c495021-55bf-11ed-a800-005056c00001(String)
<== Total: 2歷史任務(wù)ID:2c5277e9-55bf-11ed-a800-005056c00001
流程定義ID:MyLeave:1:8c16935c-5544-11ed-b9df-005056c00001
流程執(zhí)行實例ID:2c4a1375-55bf-11ed-a800-005056c00001
流程結(jié)束時間:2022-10-27 15:16:27
流程的處理人是:張主管
################################
歷史任務(wù)ID:4608d499-55c7-11ed-80ee-005056c00001
流程定義ID:MyLeave:1:8c16935c-5544-11ed-b9df-005056c00001
流程執(zhí)行實例ID:2c4a1375-55bf-11ed-a800-005056c00001
流程結(jié)束時間:2022-10-27 16:40:51
流程的處理人是:李經(jīng)理
################################
到此這篇關(guān)于Flowable歷史查詢實例分析的文章就介紹到這了,更多相關(guān)Flowable歷史查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實現(xiàn)級聯(lián)下拉結(jié)構(gòu)的示例代碼
在開發(fā)過程中,會遇到很多的實體需要將查出的數(shù)據(jù)處理為下拉或者級聯(lián)下拉的結(jié)構(gòu),提供給前端進行展示。本文為大家介紹了java封裝下拉和級聯(lián)下拉的通用工具類,需要的可以參考一下2022-06-06
Spring Boot2與Spring Boot3的區(qū)別小結(jié)
SpringBoot2和SpringBoot3之間有一些重要的區(qū)別,本文就來探討SpringBoot2和SpringBoot3之間的區(qū)別,具有一定的參考價值,感興趣的可以了解一下2023-10-10
java實現(xiàn)ThreadLocal線程局部變量的實現(xiàn)
本文主要介紹了java實現(xiàn)ThreadLocal線程局部變量的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-07-07

