From fd15e6fd8c4bb171de35495b5efa8f0df19a9f34 Mon Sep 17 00:00:00 2001 From: venetrius Date: Tue, 17 Sep 2024 11:19:50 +0200 Subject: [PATCH] feature(engine): add activityIdIn filter to HistoricProcessInstanceQuery related to: #4618 --- .../lib/commons/history-process-instance.ftl | 7 +++ .../HistoricProcessInstanceQueryDto.java | 10 ++++ ...icProcessInstanceRestServiceQueryTest.java | 30 ++++++++++ .../history/HistoricProcessInstanceQuery.java | 5 ++ .../HistoricProcessInstanceQueryImpl.java | 13 +++++ .../entity/HistoricProcessInstance.xml | 43 ++++++++++++--- .../history/HistoricProcessInstanceTest.java | 55 +++++++++++++++++++ 7 files changed, 155 insertions(+), 8 deletions(-) diff --git a/engine-rest/engine-rest-openapi/src/main/templates/lib/commons/history-process-instance.ftl b/engine-rest/engine-rest-openapi/src/main/templates/lib/commons/history-process-instance.ftl index d24f16bb978..a4a9977c80c 100644 --- a/engine-rest/engine-rest-openapi/src/main/templates/lib/commons/history-process-instance.ftl +++ b/engine-rest/engine-rest-openapi/src/main/templates/lib/commons/history-process-instance.ftl @@ -231,6 +231,13 @@ "desc": "Only include historic process instances which belong to no tenant. Value may only be `true`, as `false` is the default behavior." }, + "activityIdIn": { + "type": "array", + "itemType": "string", + "desc": "Restrict to instances that have an active activity or failing activity with one of given ids. It works + similarly to the activityIdIn filter in the runtime query. ${listTypeDescription}" + }, + "executedActivityIdIn": { "type": "array", "itemType": "string", diff --git a/engine-rest/engine-rest/src/main/java/org/camunda/bpm/engine/rest/dto/history/HistoricProcessInstanceQueryDto.java b/engine-rest/engine-rest/src/main/java/org/camunda/bpm/engine/rest/dto/history/HistoricProcessInstanceQueryDto.java index 05fb343e738..3c7dcbc2862 100644 --- a/engine-rest/engine-rest/src/main/java/org/camunda/bpm/engine/rest/dto/history/HistoricProcessInstanceQueryDto.java +++ b/engine-rest/engine-rest/src/main/java/org/camunda/bpm/engine/rest/dto/history/HistoricProcessInstanceQueryDto.java @@ -109,6 +109,7 @@ public class HistoricProcessInstanceQueryDto extends AbstractQueryDto executedActivityIdIn; private List activeActivityIdIn; + private List activityIdIn; private Boolean active; private Boolean suspended; private Boolean completed; @@ -336,6 +337,11 @@ public void setActiveActivityIdIn(List activeActivityIdIn) { this.activeActivityIdIn = activeActivityIdIn; } + @CamundaQueryParam(value = "activityIdIn", converter = StringListConverter.class) + public void setactivityIdIn(List activityIdIn) { + this.activityIdIn = activityIdIn; + } + @CamundaQueryParam(value = "executedJobAfter", converter = DateConverter.class) public void setExecutedJobAfter(Date executedJobAfter) { this.executedJobAfter = executedJobAfter; @@ -539,6 +545,10 @@ protected void applyFilters(HistoricProcessInstanceQuery query) { query.activeActivityIdIn(activeActivityIdIn.toArray(new String[0])); } + if(activityIdIn!= null && !activityIdIn.isEmpty()) { + query.activityIdIn(activityIdIn.toArray(new String[0])); + } + if (executedJobAfter != null) { query.executedJobAfter(executedJobAfter); } diff --git a/engine-rest/engine-rest/src/test/java/org/camunda/bpm/engine/rest/history/HistoricProcessInstanceRestServiceQueryTest.java b/engine-rest/engine-rest/src/test/java/org/camunda/bpm/engine/rest/history/HistoricProcessInstanceRestServiceQueryTest.java index 551be30aa8b..5bfa492bc27 100644 --- a/engine-rest/engine-rest/src/test/java/org/camunda/bpm/engine/rest/history/HistoricProcessInstanceRestServiceQueryTest.java +++ b/engine-rest/engine-rest/src/test/java/org/camunda/bpm/engine/rest/history/HistoricProcessInstanceRestServiceQueryTest.java @@ -73,6 +73,8 @@ public class HistoricProcessInstanceRestServiceQueryTest extends AbstractRestSer protected static final String QUERY_PARAM_EXECUTED_ACTIVITY_AFTER = "executedActivityAfter"; protected static final String QUERY_PARAM_EXECUTED_ACTIVITY_IDS = "executedActivityIdIn"; protected static final String QUERY_PARAM_ACTIVE_ACTIVITY_IDS = "activeActivityIdIn"; + protected static final String QUERY_PARAM_ACTIVE_OR_FAILING_ACTIVITY_IDS = "activityIdIn"; + protected static final String QUERY_PARAM_INCIDENT_IDS = "incidentIdIn"; @ClassRule public static TestContainerRule rule = new TestContainerRule(); @@ -2318,4 +2320,32 @@ public void testQueryByRootProcessInstancesAsPost() { verify(mockedQuery).rootProcessInstances(); } + @Test + public void testQueryByactivityIdIn() { + given() + .queryParam(QUERY_PARAM_ACTIVE_OR_FAILING_ACTIVITY_IDS, "1,2") + .then().expect() + .statusCode(Status.OK.getStatusCode()) + .when() + .get(HISTORIC_PROCESS_INSTANCE_RESOURCE_URL); + + verify(mockedQuery).activityIdIn("1", "2"); + } + + @Test + public void testQueryByactivityIdInAsPost() { + Map> parameters = new HashMap>(); + parameters.put(QUERY_PARAM_ACTIVE_OR_FAILING_ACTIVITY_IDS, Arrays.asList("1", "2")); + + given() + .contentType(POST_JSON_CONTENT_TYPE) + .body(parameters) + .then().expect() + .statusCode(Status.OK.getStatusCode()) + .when() + .post(HISTORIC_PROCESS_INSTANCE_RESOURCE_URL); + + verify(mockedQuery).activityIdIn("1", "2"); + } + } diff --git a/engine/src/main/java/org/camunda/bpm/engine/history/HistoricProcessInstanceQuery.java b/engine/src/main/java/org/camunda/bpm/engine/history/HistoricProcessInstanceQuery.java index 658d3a140dd..14147a7bbb7 100644 --- a/engine/src/main/java/org/camunda/bpm/engine/history/HistoricProcessInstanceQuery.java +++ b/engine/src/main/java/org/camunda/bpm/engine/history/HistoricProcessInstanceQuery.java @@ -435,6 +435,11 @@ public interface HistoricProcessInstanceQuery extends Query + @@ -413,9 +414,13 @@ - + + + + + @@ -425,6 +430,11 @@ LEFT JOIN ${prefix}ACT_HI_ACTINST HAI ON HAI.PROC_INST_ID_ = SELF.ID_ + + + LEFT JOIN ${prefix}ACT_RU_JOB RU_JOB + ON RU_JOB.PROCESS_INSTANCE_ID_ = SELF.PROC_INST_ID_ +