diff --git a/source/java/org/alfresco/rest/workflow/api/impl/TasksImpl.java b/source/java/org/alfresco/rest/workflow/api/impl/TasksImpl.java
index 9420b8e64f..b0fdb878d2 100644
--- a/source/java/org/alfresco/rest/workflow/api/impl/TasksImpl.java
+++ b/source/java/org/alfresco/rest/workflow/api/impl/TasksImpl.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2005-2012 Alfresco Software Limited.
+ * Copyright (C) 2005-2014 Alfresco Software Limited.
*
* This file is part of Alfresco
*
@@ -18,6 +18,7 @@
*/
package org.alfresco.rest.workflow.api.impl;
+import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
@@ -44,6 +45,7 @@ import org.alfresco.repo.workflow.WorkflowModel;
import org.alfresco.repo.workflow.WorkflowObjectFactory;
import org.alfresco.repo.workflow.WorkflowQNameConverter;
import org.alfresco.repo.workflow.activiti.ActivitiConstants;
+import org.alfresco.repo.workflow.activiti.properties.ActivitiPropertyConverter;
import org.alfresco.rest.antlr.WhereClauseParser;
import org.alfresco.rest.framework.core.exceptions.ConstraintViolatedException;
import org.alfresco.rest.framework.core.exceptions.EntityNotFoundException;
@@ -126,7 +128,13 @@ public class TasksImpl extends WorkflowRestImpl implements Tasks
private WorkflowQNameConverter qNameConverter;
private MessageService messageService;
private PersonService personService;
+ private ActivitiPropertyConverter propertyConverter;
+ public void setPropertyConverter(ActivitiPropertyConverter propertyConverter)
+ {
+ this.propertyConverter = propertyConverter;
+ }
+
public void setRestVariableHelper(RestVariableHelper restVariableHelper)
{
this.restVariableHelper = restVariableHelper;
@@ -838,7 +846,6 @@ public class TasksImpl extends WorkflowRestImpl implements Tasks
}
}
}
-
switch (taskAction)
{
case CLAIMED:
@@ -852,6 +859,7 @@ public class TasksImpl extends WorkflowRestImpl implements Tasks
}
break;
case COMPLETED:
+ setOutcome(localVariables, taskId);
if (localVariables.size() > 0)
{
activitiProcessEngine.getTaskService().setVariablesLocal(taskId, localVariables);
@@ -882,6 +890,7 @@ public class TasksImpl extends WorkflowRestImpl implements Tasks
}
break;
case RESOLVED:
+ setOutcome(localVariables, taskId);
if (localVariables.size() > 0)
{
activitiProcessEngine.getTaskService().setVariablesLocal(taskId, localVariables);
@@ -1702,4 +1711,28 @@ public class TasksImpl extends WorkflowRestImpl implements Tasks
}
return workflowFactory;
}
+
+ /**
+ * Set bpm:outcome variable to the local variables of the specified task.
+ *
The variables should be set separately via {@link org.activiti.engine.TaskService}
+ * @param localVariables The variable, that will be set to the task
+ * @param taskId The id of the task
+ */
+ private void setOutcome(Map localVariables, String taskId)
+ {
+ WorkflowQNameConverter qNameConverter = getQNameConverter();
+ org.activiti.engine.task.Task task = activitiProcessEngine.getTaskService().createTaskQuery().taskId(taskId).singleResult();
+ String outcomeValue = ActivitiConstants.DEFAULT_TRANSITION_NAME;
+ Map properties = propertyConverter.getTaskProperties(task);
+ QName outcomePropName = (QName) properties.get(WorkflowModel.PROP_OUTCOME_PROPERTY_NAME);
+ if (outcomePropName != null)
+ {
+ Serializable rawOutcome = properties.get(outcomePropName);
+ if (rawOutcome != null)
+ {
+ outcomeValue = DefaultTypeConverter.INSTANCE.convert(String.class, rawOutcome);
+ }
+ }
+ localVariables.put(qNameConverter.mapQNameToName(WorkflowModel.PROP_OUTCOME), outcomeValue);
+ }
}
diff --git a/source/test-java/org/alfresco/rest/workflow/api/tests/TaskWorkflowApiTest.java b/source/test-java/org/alfresco/rest/workflow/api/tests/TaskWorkflowApiTest.java
index e5d7ab46c9..06fc126941 100644
--- a/source/test-java/org/alfresco/rest/workflow/api/tests/TaskWorkflowApiTest.java
+++ b/source/test-java/org/alfresco/rest/workflow/api/tests/TaskWorkflowApiTest.java
@@ -792,7 +792,7 @@ public class TaskWorkflowApiTest extends EnterpriseWorkflowTestApi
assertEquals(1234, historyTask.getProcessVariables().get("newGlobalVariable"));
assertEquals(5678, historyTask.getTaskLocalVariables().get("newLocalVariable"));
-
+ assertNotNull("The outcome should not be null for completed task.", historyTask.getTaskLocalVariables().get("bpm_outcome"));
JSONObject variables = tasksClient.findTaskVariables(withVariablesTask.getId());
assertNotNull(variables);
JSONObject list = (JSONObject) variables.get("list");
@@ -988,6 +988,12 @@ public class TaskWorkflowApiTest extends EnterpriseWorkflowTestApi
task = activitiProcessEngine.getTaskService().createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
assertEquals(DelegationState.RESOLVED, task.getDelegationState());
assertEquals(initiator, task.getAssignee());
+ HistoricTaskInstance historyTask = activitiProcessEngine.getHistoryService().createHistoricTaskInstanceQuery()
+ .taskId(task.getId())
+ .includeProcessVariables()
+ .includeTaskLocalVariables()
+ .singleResult();
+ assertNotNull("The outcome should not be null for resolved task.", historyTask.getTaskLocalVariables().get("bpm_outcome"));
// Resolving as owner
task.setDelegationState(null);