From 120c26035387581b0700faa4669e649606342ea4 Mon Sep 17 00:00:00 2001 From: Mark Rogers Date: Mon, 26 Oct 2015 12:04:40 +0000 Subject: [PATCH] ACE-4493 - [Upgrade] Workflow Type filter is not applying for some activiti workflows after upgrade from 4.1.10 git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@115157 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../workflow/WorkflowInstancesGet.java | 74 +++++++++++++++---- 1 file changed, 58 insertions(+), 16 deletions(-) diff --git a/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowInstancesGet.java b/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowInstancesGet.java index d5172cab8f..4fff634e10 100644 --- a/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowInstancesGet.java +++ b/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowInstancesGet.java @@ -30,6 +30,7 @@ import java.util.Map; import javax.servlet.http.HttpServletResponse; import org.alfresco.repo.workflow.WorkflowModel; +import org.alfresco.service.cmr.workflow.WorkflowDefinition; import org.alfresco.service.cmr.workflow.WorkflowInstance; import org.alfresco.service.cmr.workflow.WorkflowInstanceQuery; import org.alfresco.service.cmr.workflow.WorkflowInstanceQuery.DatePosition; @@ -125,13 +126,6 @@ public class WorkflowInstancesGet extends AbstractWorkflowWebscript if (workflowDefinitionId == null) { workflowDefinitionId = req.getParameter(PARAM_DEFINITION_ID); - if (workflowDefinitionId == null) - { - if (req.getParameter(PARAM_DEFINITION_NAME) != null) - { - workflowDefinitionId = workflowService.getDefinitionByName(req.getParameter(PARAM_DEFINITION_NAME)).getId(); - } - } } // default workflow state to ACTIVE if not supplied @@ -144,19 +138,67 @@ public class WorkflowInstancesGet extends AbstractWorkflowWebscript workflowInstanceQuery.setCustomProps(filters); List workflows = new ArrayList(); - - if (workflowDefinitionId != null) - { - workflowInstanceQuery.setWorkflowDefinitionId(workflowDefinitionId); - } - + + int total = 0; // MNT-9074 My Tasks fails to render if tasks quantity is excessive int maxItems = getIntParameter(req, PARAM_MAX_ITEMS, DEFAULT_MAX_ITEMS); int skipCount = getIntParameter(req, PARAM_SKIP_COUNT, DEFAULT_SKIP_COUNT); - workflows.addAll(workflowService.getWorkflows(workflowInstanceQuery, maxItems, skipCount)); + if (workflowDefinitionId == null && req.getParameter(PARAM_DEFINITION_NAME) != null) + { + /** + * If we are searching by workflow definition name then there may be many workflow definition instances. + */ + int workingSkipCount = skipCount; + + /** + * Yes there could be multiple process definitions with that definition name + */ + String definitionName = req.getParameter(PARAM_DEFINITION_NAME); + + List defs = workflowService.getAllDefinitionsByName(definitionName); + + int itemsToQuery = maxItems; + + for(WorkflowDefinition def : defs) + { + workflowDefinitionId = def.getId(); + workflowInstanceQuery.setWorkflowDefinitionId(workflowDefinitionId); + if(maxItems < 0 || itemsToQuery > 0) + { + workflows.addAll(workflowService.getWorkflows(workflowInstanceQuery, itemsToQuery, workingSkipCount)); + } + if(maxItems > 0) + { + itemsToQuery = maxItems - workflows.size(); + } + + total += (int) workflowService.countWorkflows(workflowInstanceQuery); + + if(workingSkipCount > 0) + { + workingSkipCount = skipCount - total; + + if(workingSkipCount < 0) + { + workingSkipCount = 0; + } + } + } + } + else + { + /** + * This is the old single task implementation + */ + if (workflowDefinitionId != null) + { + workflowInstanceQuery.setWorkflowDefinitionId(workflowDefinitionId); + } + workflows.addAll(workflowService.getWorkflows(workflowInstanceQuery, maxItems, skipCount)); - int total = (int) workflowService.countWorkflows(workflowInstanceQuery); + total = (int) workflowService.countWorkflows(workflowInstanceQuery); + } List> results = new ArrayList>(total); @@ -170,7 +212,7 @@ public class WorkflowInstancesGet extends AbstractWorkflowWebscript skipCount++; } - + // create and return results, paginated if necessary return createResultModel(req, "workflowInstances", results); }