mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-14 17:58:59 +00:00
Performance improvement for GET workflow-instances REST API.
Added "priority" and "dueDate" to WorkflowInstance object, which means a query for the workflow start task is no longer required to retrieve this information. A query was previously being done for every row in the results. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@22210 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -111,8 +111,8 @@
|
||||
"description": "${workflowInstance.description}",
|
||||
"message": "${workflowInstance.message}",
|
||||
"isActive": ${workflowInstance.isActive?string},
|
||||
"priority": ${workflowInstance.priority?c},
|
||||
"startDate": "${workflowInstance.startDate}",
|
||||
"priority": <#if workflowInstance.priority??>${workflowInstance.priority?c}<#else>0</#if>,
|
||||
"endDate": <#if workflowInstance.endDate??>"${workflowInstance.endDate}"<#else>null</#if>,
|
||||
"dueDate": <#if workflowInstance.dueDate??>"${workflowInstance.dueDate}"<#else>null</#if>,
|
||||
"context": <#if workflowInstance.context??>"${workflowInstance.context}"<#else>null</#if>,
|
||||
|
@@ -25,11 +25,9 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.repo.workflow.WorkflowModel;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.cmr.workflow.WorkflowDefinition;
|
||||
import org.alfresco.service.cmr.workflow.WorkflowInstance;
|
||||
import org.alfresco.service.cmr.workflow.WorkflowTask;
|
||||
import org.springframework.extensions.webscripts.Cache;
|
||||
import org.springframework.extensions.webscripts.Status;
|
||||
import org.springframework.extensions.webscripts.WebScriptRequest;
|
||||
@@ -165,8 +163,7 @@ public class WorkflowInstancesGet extends AbstractWorkflowWebscript
|
||||
}
|
||||
else if (key.equals(PARAM_DUE_BEFORE))
|
||||
{
|
||||
WorkflowTask startTask = modelBuilder.getStartTaskForWorkflow(workflowInstance);
|
||||
Date dueDate = (Date)startTask.getProperties().get(WorkflowModel.PROP_WORKFLOW_DUE_DATE);
|
||||
Date dueDate = workflowInstance.getDueDate();
|
||||
|
||||
if (!isDateMatchForFilter(dueDate, filterValue, true))
|
||||
{
|
||||
@@ -176,8 +173,7 @@ public class WorkflowInstancesGet extends AbstractWorkflowWebscript
|
||||
}
|
||||
else if (key.equals(PARAM_DUE_AFTER))
|
||||
{
|
||||
WorkflowTask startTask = modelBuilder.getStartTaskForWorkflow(workflowInstance);
|
||||
Date dueDate = (Date)startTask.getProperties().get(WorkflowModel.PROP_WORKFLOW_DUE_DATE);
|
||||
Date dueDate = workflowInstance.getDueDate();
|
||||
|
||||
if (!isDateMatchForFilter(dueDate, filterValue, false))
|
||||
{
|
||||
@@ -246,9 +242,13 @@ public class WorkflowInstancesGet extends AbstractWorkflowWebscript
|
||||
}
|
||||
else if (key.equals(PARAM_PRIORITY))
|
||||
{
|
||||
WorkflowTask startTask = modelBuilder.getStartTaskForWorkflow(workflowInstance);
|
||||
String priority = "0";
|
||||
if (workflowInstance.getPriority() != null)
|
||||
{
|
||||
priority = workflowInstance.getPriority().toString();
|
||||
}
|
||||
|
||||
if (startTask == null || !filterValue.equals(startTask.getProperties().get(WorkflowModel.PROP_WORKFLOW_PRIORITY).toString()))
|
||||
if (!filterValue.equals(priority))
|
||||
{
|
||||
result = false;
|
||||
break;
|
||||
|
@@ -22,7 +22,6 @@ import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
@@ -236,6 +235,7 @@ public class WorkflowModelBuilder
|
||||
model.put(TASK_WORKFLOW_INSTANCE_TITLE, workflowInstance.getDefinition().getTitle());
|
||||
model.put(TASK_WORKFLOW_INSTANCE_DESCRIPTION, workflowInstance.getDefinition().getDescription());
|
||||
model.put(TASK_WORKFLOW_INSTANCE_IS_ACTIVE, workflowInstance.isActive());
|
||||
model.put(TASK_WORKFLOW_INSTANCE_PRIORITY, workflowInstance.getPriority());
|
||||
model.put(TASK_WORKFLOW_INSTANCE_DEFINITION_URL, getUrl(workflowInstance.getDefinition()));
|
||||
|
||||
if (workflowInstance.getWorkflowPackage() != null)
|
||||
@@ -257,6 +257,15 @@ public class WorkflowModelBuilder
|
||||
model.put(TASK_WORKFLOW_INSTANCE_START_DATE, ISO8601DateFormat.format(workflowInstance.getStartDate()));
|
||||
}
|
||||
|
||||
if (workflowInstance.getDueDate() == null)
|
||||
{
|
||||
model.put(TASK_WORKFLOW_INSTANCE_DUE_DATE, workflowInstance.getDueDate());
|
||||
}
|
||||
else
|
||||
{
|
||||
model.put(TASK_WORKFLOW_INSTANCE_DUE_DATE, ISO8601DateFormat.format(workflowInstance.getDueDate()));
|
||||
}
|
||||
|
||||
if (workflowInstance.getEndDate() == null)
|
||||
{
|
||||
model.put(TASK_WORKFLOW_INSTANCE_END_DATE, workflowInstance.getEndDate());
|
||||
@@ -275,10 +284,6 @@ public class WorkflowModelBuilder
|
||||
model.put(TASK_WORKFLOW_INSTANCE_INITIATOR, getPersonModel(nodeService.getProperty(workflowInstance.initiator, ContentModel.PROP_USERNAME)));
|
||||
}
|
||||
|
||||
// TODO: Try and retrieve these from the workflow instance to save the need to
|
||||
// do an extra query which makes things slow
|
||||
model.put(TASK_WORKFLOW_INSTANCE_PRIORITY, 2);
|
||||
model.put(TASK_WORKFLOW_INSTANCE_DUE_DATE, null);
|
||||
String message = workflowInstance.getDescription();
|
||||
if (message != null && message.length() > 0)
|
||||
{
|
||||
@@ -302,31 +307,11 @@ public class WorkflowModelBuilder
|
||||
{
|
||||
Map<String, Object> model = buildSimple(workflowInstance);
|
||||
|
||||
Serializable dueDate = null;
|
||||
Serializable priority = null;
|
||||
Serializable startTaskId = null;
|
||||
|
||||
WorkflowTask startTask = getStartTaskForWorkflow(workflowInstance);
|
||||
|
||||
if (startTask != null)
|
||||
{
|
||||
startTaskId = startTask.id;
|
||||
dueDate = startTask.properties.get(WorkflowModel.PROP_WORKFLOW_DUE_DATE);
|
||||
priority = startTask.properties.get(WorkflowModel.PROP_WORKFLOW_PRIORITY);
|
||||
}
|
||||
|
||||
if (dueDate != null)
|
||||
{
|
||||
model.put(TASK_WORKFLOW_INSTANCE_DUE_DATE, ISO8601DateFormat.format((Date) dueDate));
|
||||
}
|
||||
else
|
||||
{
|
||||
model.put(TASK_WORKFLOW_INSTANCE_DUE_DATE, dueDate);
|
||||
}
|
||||
|
||||
if (priority != null)
|
||||
{
|
||||
model.put(TASK_WORKFLOW_INSTANCE_PRIORITY, priority);
|
||||
}
|
||||
|
||||
model.put(TASK_WORKFLOW_INSTANCE_START_TASK_INSTANCE_ID, startTaskId);
|
||||
|
Reference in New Issue
Block a user