diff --git a/config/alfresco/messages/workflow-interpreter-help.txt b/config/alfresco/messages/workflow-interpreter-help.txt index 86e9889f21..69f2b11ca2 100644 --- a/config/alfresco/messages/workflow-interpreter-help.txt +++ b/config/alfresco/messages/workflow-interpreter-help.txt @@ -277,6 +277,7 @@ task.= e.g. task.bpm:outcome=approve processId= processName= e.g. processName=wf:review + workflowDefinitionName= e.g. workflowDefinitionName=activitiAdhoc processActive=true|false e.g. processActive=true process.= e.g. process.initiator=admin orderBy=* e.g. orderBy=TaskDue_Desc,TaskActor_Asc diff --git a/source/java/org/alfresco/repo/workflow/AbstractWorkflowServiceIntegrationTest.java b/source/java/org/alfresco/repo/workflow/AbstractWorkflowServiceIntegrationTest.java index 31e572b477..232b20b4a4 100644 --- a/source/java/org/alfresco/repo/workflow/AbstractWorkflowServiceIntegrationTest.java +++ b/source/java/org/alfresco/repo/workflow/AbstractWorkflowServiceIntegrationTest.java @@ -961,12 +961,22 @@ public abstract class AbstractWorkflowServiceIntegrationTest extends BaseSpringT { WorkflowTaskQuery taskQuery = createWorkflowTaskQuery(state); + // Test depricated method, using QName taskQuery.setProcessName(getAdhocProcessName()); checkTasksFoundUsingQuery(expectedTaskIds, taskQuery); taskQuery = createWorkflowTaskQuery(state); taskQuery.setProcessName(QName.createQName("dummyProcessName")); checkNoTasksFoundUsingQuery(taskQuery); + + + // Test method, using String + taskQuery.setWorkflowDefinitionName(getAdhocProcessName().toPrefixString()); + checkTasksFoundUsingQuery(expectedTaskIds, taskQuery); + + taskQuery = createWorkflowTaskQuery(state); + taskQuery.setWorkflowDefinitionName("dummyProcessName"); + checkNoTasksFoundUsingQuery(taskQuery); } protected void checkProcessPropsQuery(List expectedTaskIds, WorkflowTaskState state) diff --git a/source/java/org/alfresco/repo/workflow/AlfrescoBpmEngine.java b/source/java/org/alfresco/repo/workflow/AlfrescoBpmEngine.java index ef81f122a1..7d54387013 100644 --- a/source/java/org/alfresco/repo/workflow/AlfrescoBpmEngine.java +++ b/source/java/org/alfresco/repo/workflow/AlfrescoBpmEngine.java @@ -24,7 +24,6 @@ import org.alfresco.repo.tenant.TenantService; import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.workflow.WorkflowException; import org.alfresco.service.namespace.NamespaceService; -import org.alfresco.service.namespace.QNameCache; /** * @since 3.4.e diff --git a/source/java/org/alfresco/repo/workflow/WorkflowInterpreter.java b/source/java/org/alfresco/repo/workflow/WorkflowInterpreter.java index 7faeb61fa6..375e0310ef 100644 --- a/source/java/org/alfresco/repo/workflow/WorkflowInterpreter.java +++ b/source/java/org/alfresco/repo/workflow/WorkflowInterpreter.java @@ -28,7 +28,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import org.springframework.extensions.surf.util.I18NUtil; import org.alfresco.model.ContentModel; import org.alfresco.repo.admin.BaseInterpreter; import org.alfresco.repo.avm.AVMNodeConverter; @@ -69,6 +68,7 @@ import org.alfresco.service.transaction.TransactionService; import org.alfresco.util.GUID; import org.springframework.context.ApplicationEvent; import org.springframework.core.io.ClassPathResource; +import org.springframework.extensions.surf.util.I18NUtil; /** * An interactive console for Workflows. @@ -665,6 +665,10 @@ public class WorkflowInterpreter extends BaseInterpreter { query.setProcessName(QName.createQName(predicate[1], namespaceService)); } + else if (predicate[0].equals("workflowDefinitionName")) + { + query.setWorkflowDefinitionName(predicate[1]); + } else if (predicate[0].equals("processActive")) { Boolean active = Boolean.valueOf(predicate[1]); diff --git a/source/java/org/alfresco/repo/workflow/activiti/ActivitiWorkflowEngine.java b/source/java/org/alfresco/repo/workflow/activiti/ActivitiWorkflowEngine.java index 664b502a52..514d56a26d 100644 --- a/source/java/org/alfresco/repo/workflow/activiti/ActivitiWorkflowEngine.java +++ b/source/java/org/alfresco/repo/workflow/activiti/ActivitiWorkflowEngine.java @@ -1467,6 +1467,12 @@ public class ActivitiWorkflowEngine extends BPMEngine implements WorkflowEngine String processName = getProcessNameMTSafe(query.getProcessName()); taskQuery.processDefinitionKey(processName); } + + if (query.getWorkflowDefinitionName() != null) + { + String processName = getWorkflowDefinitionNameMTSafe(query.getWorkflowDefinitionName()); + taskQuery.processDefinitionKey(processName); + } if (query.getActorId() != null) { @@ -1534,6 +1540,21 @@ public class ActivitiWorkflowEngine extends BPMEngine implements WorkflowEngine } return processName; } + + protected String getWorkflowDefinitionNameMTSafe(String name) + { + String processName = null; + if (tenantService.isEnabled()) + { + String baseName = tenantService.getBaseName(name, true); + processName = tenantService.getName(baseName); + } + else + { + processName = name; + } + return processName; + } private void orderQuery(TaskQuery taskQuery, OrderBy[] orderBy) { for (WorkflowTaskQuery.OrderBy orderByPart : orderBy) @@ -1676,6 +1697,12 @@ public class ActivitiWorkflowEngine extends BPMEngine implements WorkflowEngine String processName = getProcessNameMTSafe(query.getProcessName()); historicQuery.processDefinitionKey(processName); } + + if (query.getWorkflowDefinitionName() != null) + { + String processName = getWorkflowDefinitionNameMTSafe(query.getWorkflowDefinitionName()); + historicQuery.processDefinitionKey(processName); + } if (query.getTaskCustomProps() != null) { @@ -1826,6 +1853,7 @@ public class ActivitiWorkflowEngine extends BPMEngine implements WorkflowEngine } } + // Query by process name deprecated, but still implemented. if(query.getProcessName() != null) { String processName = factory.mapQNameToName(query.getProcessName()); @@ -1834,6 +1862,14 @@ public class ActivitiWorkflowEngine extends BPMEngine implements WorkflowEngine return false; } } + + if(query.getWorkflowDefinitionName() != null) + { + if(!query.getWorkflowDefinitionName().equals(workflowTask.getPath().getInstance().getDefinition().getName())) + { + return false; + } + } if(query.getTaskCustomProps() != null) { diff --git a/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngine.java b/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngine.java index bfcf252667..2d7642257c 100644 --- a/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngine.java +++ b/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngine.java @@ -29,8 +29,8 @@ import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.Map.Entry; +import java.util.Set; import java.util.zip.ZipInputStream; import org.alfresco.model.ContentModel; @@ -1601,6 +1601,11 @@ public class JBPMEngine extends AlfrescoBpmEngine implements WorkflowEngine query.setProcessName(tenantService.getName(query.getProcessName())); } + if ((query.getWorkflowDefinitionName() != null) && (tenantService.isEnabled())) + { + query.setWorkflowDefinitionName(tenantService.getName(query.getWorkflowDefinitionName())); + } + Criteria criteria = createTaskQueryCriteria(session, query); List tasks = criteria.list(); return getWorkflowTasks(tasks); @@ -1915,6 +1920,25 @@ public class JBPMEngine extends AlfrescoBpmEngine implements WorkflowEngine processDef.add(Restrictions.eq("name", processName)); } + // Process definition name + if (query.getWorkflowDefinitionName() != null) + { + process = (process == null) ? root.createCriteria("processInstance") : process; + Criteria processDef = process.createCriteria("processDefinition"); + + String processName = null; + if (tenantService.isEnabled()) + { + String baseProcessName = tenantService.getBaseName(query.getWorkflowDefinitionName(), true); + processName = tenantService.getName(baseProcessName); + } + else + { + processName = query.getWorkflowDefinitionName(); + } + processDef.add(Restrictions.eq("name", processName)); + } + return process; } diff --git a/source/java/org/alfresco/service/cmr/workflow/WorkflowTaskQuery.java b/source/java/org/alfresco/service/cmr/workflow/WorkflowTaskQuery.java index 8c1c65504d..165ae6bf8b 100644 --- a/source/java/org/alfresco/service/cmr/workflow/WorkflowTaskQuery.java +++ b/source/java/org/alfresco/service/cmr/workflow/WorkflowTaskQuery.java @@ -42,6 +42,7 @@ public class WorkflowTaskQuery // process predicates private String processId; private QName processName; + private String workflowDefinitionName; private Boolean active = Boolean.TRUE; private Map processCustomProps; @@ -193,7 +194,10 @@ public class WorkflowTaskQuery } /** - * Filters on the {@link WorkflowDefinition} name. + * Filters on the {@link WorkflowDefinition} name. When using Activiti, + * the method {@link #setWorkflowDefinitionName(String)} should be used + * instead of this method. + * * @param processName */ public void setProcessName(QName processName) @@ -201,6 +205,23 @@ public class WorkflowTaskQuery this.processName = processName; } + /** + * @return + */ + public String getWorkflowDefinitionName() + { + return workflowDefinitionName; + } + + /** + * Filters on the {@link WorkflowDefinition} name. + * @param workflowDefinitionName + */ + public void setWorkflowDefinitionName(String workflowDefinitionName) + { + this.workflowDefinitionName = workflowDefinitionName; + } + /** * @return */