From ad20ce3a47e8f2873e7b8597bd5c38fcf3036fd9 Mon Sep 17 00:00:00 2001 From: "bernd.ruecker" Date: Thu, 2 Feb 2012 20:10:30 +0000 Subject: [PATCH] ACT-1086: Add "businessKey" query capabilities to TaskQuery and ExecutionQuery --- .../org/activiti/engine/impl/ExecutionQueryImpl.java | 11 ++++++++++- .../java/org/activiti/engine/impl/TaskQueryImpl.java | 11 +++++++++++ .../org/activiti/engine/runtime/ExecutionQuery.java | 3 +++ .../main/java/org/activiti/engine/task/TaskQuery.java | 3 +++ .../resources/org/activiti/db/mapping/entity/Task.xml | 8 +++++++- .../engine/test/api/runtime/ExecutionQueryTest.java | 8 +++++++- .../activiti/engine/test/api/task/TaskQueryTest.java | 11 ++++++++++- 7 files changed, 51 insertions(+), 4 deletions(-) diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/ExecutionQueryImpl.java b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/ExecutionQueryImpl.java index 2e4bcd831d..6d3c1e970d 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/ExecutionQueryImpl.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/ExecutionQueryImpl.java @@ -41,6 +41,7 @@ public class ExecutionQueryImpl extends ExecutionVariableQueryImpl implements Tas protected String processDefinitionKey; protected String processDefinitionId; protected String processDefinitionName; + protected String processInstanceBusinessKey; protected List variables = new ArrayList(); protected Date dueDate; protected Date dueBefore; @@ -216,6 +217,11 @@ public class TaskQueryImpl extends AbstractQuery implements Tas return this; } + public TaskQueryImpl processInstanceBusinessKey(String processInstanceBusinessKey) { + this.processInstanceBusinessKey = processInstanceBusinessKey; + return this; + } + public TaskQueryImpl executionId(String executionId) { this.executionId = executionId; return this; @@ -437,4 +443,9 @@ public class TaskQueryImpl extends AbstractQuery implements Tas public String getProcessDefinitionName() { return processDefinitionName; } + + + public String getProcessInstanceBusinessKey() { + return processInstanceBusinessKey; + } } diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/runtime/ExecutionQuery.java b/modules/activiti-engine/src/main/java/org/activiti/engine/runtime/ExecutionQuery.java index 45cfa71e81..ec337b1cc2 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/runtime/ExecutionQuery.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/runtime/ExecutionQuery.java @@ -35,6 +35,9 @@ public interface ExecutionQuery extends Query{ /** Only select executions which have the given process instance id. **/ ExecutionQuery processInstanceId(String processInstanceId); + /** Only executions with the given business key */ + ExecutionQuery processInstanceBusinessKey(String processInstanceBusinessKey); + /** Only select executions with the given id. **/ ExecutionQuery executionId(String executionId); diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/task/TaskQuery.java b/modules/activiti-engine/src/main/java/org/activiti/engine/task/TaskQuery.java index 44f91dad01..51ee2ee9ea 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/task/TaskQuery.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/task/TaskQuery.java @@ -84,6 +84,9 @@ public interface TaskQuery extends Query{ /** Only select tasks for the given process instance id. */ TaskQuery processInstanceId(String processInstanceId); + + /** Only select tasks foe the given business key */ + TaskQuery processInstanceBusinessKey(String processInstanceBusinessKey); /** Only select tasks for the given execution. */ TaskQuery executionId(String executionId); diff --git a/modules/activiti-engine/src/main/resources/org/activiti/db/mapping/entity/Task.xml b/modules/activiti-engine/src/main/resources/org/activiti/db/mapping/entity/Task.xml index 577be0779f..f76f4e68fe 100644 --- a/modules/activiti-engine/src/main/resources/org/activiti/db/mapping/entity/Task.xml +++ b/modules/activiti-engine/src/main/resources/org/activiti/db/mapping/entity/Task.xml @@ -138,7 +138,10 @@ inner join ACT_RE_PROCDEF D on T.PROC_DEF_ID_ = D.ID_ - + + inner join ACT_RU_EXECUTION E on T.PROC_INST_ID_ = E.ID_ + + T.ID_ = #{taskId} @@ -175,6 +178,9 @@ and T.PROC_INST_ID_ = #{processInstanceId} + + and E.BUSINESS_KEY_ = #{processInstanceBusinessKey} + and T.EXECUTION_ID_ = #{executionId} diff --git a/modules/activiti-engine/src/test/java/org/activiti/engine/test/api/runtime/ExecutionQueryTest.java b/modules/activiti-engine/src/test/java/org/activiti/engine/test/api/runtime/ExecutionQueryTest.java index b6e4a46c68..96e558bdd0 100644 --- a/modules/activiti-engine/src/test/java/org/activiti/engine/test/api/runtime/ExecutionQueryTest.java +++ b/modules/activiti-engine/src/test/java/org/activiti/engine/test/api/runtime/ExecutionQueryTest.java @@ -68,7 +68,7 @@ public class ExecutionQueryTest extends PluggableActivitiTestCase { sequentialProcessInstanceIds = new ArrayList(); for (int i = 0; i < 4; i++) { - concurrentProcessInstanceIds.add(runtimeService.startProcessInstanceByKey(CONCURRENT_PROCESS_KEY).getId()); + concurrentProcessInstanceIds.add(runtimeService.startProcessInstanceByKey(CONCURRENT_PROCESS_KEY, "BUSINESS-KEY-" + i).getId()); } sequentialProcessInstanceIds.add(runtimeService.startProcessInstanceByKey(SEQUENTIAL_PROCESS_KEY).getId()); } @@ -172,6 +172,12 @@ public class ExecutionQueryTest extends PluggableActivitiTestCase { } } + public void testQueryByBusinessKey() { + assertEquals(1, runtimeService.createExecutionQuery().processDefinitionKey(CONCURRENT_PROCESS_KEY).processInstanceBusinessKey("BUSINESS-KEY-1").list().size()); + assertEquals(1, runtimeService.createExecutionQuery().processDefinitionKey(CONCURRENT_PROCESS_KEY).processInstanceBusinessKey("BUSINESS-KEY-2").list().size()); + assertEquals(0, runtimeService.createExecutionQuery().processDefinitionKey(CONCURRENT_PROCESS_KEY).processInstanceBusinessKey("NON-EXISTING").list().size()); + } + @Deployment(resources={ "org/activiti/engine/test/api/oneTaskProcess.bpmn20.xml"}) public void testQueryStringVariable() { diff --git a/modules/activiti-engine/src/test/java/org/activiti/engine/test/api/task/TaskQueryTest.java b/modules/activiti-engine/src/test/java/org/activiti/engine/test/api/task/TaskQueryTest.java index 3166278b42..1952faf516 100644 --- a/modules/activiti-engine/src/test/java/org/activiti/engine/test/api/task/TaskQueryTest.java +++ b/modules/activiti-engine/src/test/java/org/activiti/engine/test/api/task/TaskQueryTest.java @@ -577,7 +577,16 @@ public class TaskQueryTest extends PluggableActivitiTestCase { assertEquals(0, taskService.createTaskQuery().processDefinitionName("unexisting").count()); } - + + @Deployment(resources={"org/activiti/engine/test/api/task/TaskQueryTest.testProcessDefinition.bpmn20.xml"}) + public void testProcessInstanceBusinessKey() throws Exception { + ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess", "BUSINESS-KEY-1"); + + assertEquals(1, taskService.createTaskQuery().processDefinitionName("The One Task Process").processInstanceBusinessKey("BUSINESS-KEY-1").list().size()); + assertEquals(1, taskService.createTaskQuery().processInstanceBusinessKey("BUSINESS-KEY-1").list().size()); + assertEquals(0, taskService.createTaskQuery().processInstanceBusinessKey("NON-EXISTING").count()); + } + @Deployment(resources={"org/activiti/engine/test/api/task/TaskQueryTest.testProcessDefinition.bpmn20.xml"}) public void testTaskDueDate() throws Exception { ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess"); -- GitLab