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 18bb6b0ff9..80e0f4c281 100644 --- a/source/java/org/alfresco/rest/workflow/api/impl/TasksImpl.java +++ b/source/java/org/alfresco/rest/workflow/api/impl/TasksImpl.java @@ -869,11 +869,13 @@ public class TasksImpl extends WorkflowRestImpl implements Tasks } break; case COMPLETED: - setOutcome(localVariables, taskId); if (localVariables.size() > 0) { activitiProcessEngine.getTaskService().setVariablesLocal(taskId, localVariables); } + + setOutcome(taskId); + if (globalVariables.size() > 0) { activitiProcessEngine.getTaskService().complete(taskId, globalVariables); @@ -900,11 +902,13 @@ public class TasksImpl extends WorkflowRestImpl implements Tasks } break; case RESOLVED: - setOutcome(localVariables, taskId); if (localVariables.size() > 0) { activitiProcessEngine.getTaskService().setVariablesLocal(taskId, localVariables); } + + setOutcome(taskId); + if (globalVariables.size() > 0) { activitiProcessEngine.getTaskService().resolveTask(taskId, globalVariables); @@ -1728,11 +1732,11 @@ public class TasksImpl extends WorkflowRestImpl implements Tasks * @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) + private void setOutcome(String taskId) { - WorkflowQNameConverter qNameConverter = getQNameConverter(); org.activiti.engine.task.Task task = activitiProcessEngine.getTaskService().createTaskQuery().taskId(taskId).singleResult(); String outcomeValue = ActivitiConstants.DEFAULT_TRANSITION_NAME; + HashMap updates = new HashMap(); Map properties = propertyConverter.getTaskProperties(task); QName outcomePropName = (QName) properties.get(WorkflowModel.PROP_OUTCOME_PROPERTY_NAME); if (outcomePropName != null) @@ -1743,6 +1747,7 @@ public class TasksImpl extends WorkflowRestImpl implements Tasks outcomeValue = DefaultTypeConverter.INSTANCE.convert(String.class, rawOutcome); } } - localVariables.put(qNameConverter.mapQNameToName(WorkflowModel.PROP_OUTCOME), outcomeValue); + updates.put(WorkflowModel.PROP_OUTCOME, outcomeValue); + propertyConverter.updateTask(task, updates, null, null); } } 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 6ab7bc3bca..b7b88acc04 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 @@ -55,6 +55,7 @@ import org.alfresco.rest.api.tests.PersonInfo; import org.alfresco.rest.api.tests.RepoService.TestNetwork; import org.alfresco.rest.api.tests.RepoService.TestPerson; import org.alfresco.rest.api.tests.RepoService.TestSite; +import org.alfresco.rest.api.tests.client.HttpResponse; import org.alfresco.rest.api.tests.client.PublicApiException; import org.alfresco.rest.api.tests.client.RequestContext; import org.alfresco.rest.api.tests.client.data.MemberOfSite; @@ -1055,6 +1056,29 @@ public class TaskWorkflowApiTest extends EnterpriseWorkflowTestApi } } + @Test + @SuppressWarnings("unchecked") + public void testSetOutcome() throws Exception + { + RequestContext requestContext = initApiClientWithTestUser(); + ProcessInfo processInf = startReviewPooledProcess(requestContext); + Task task = activitiProcessEngine.getTaskService().createTaskQuery().processInstanceId(processInf.getId()).singleResult(); + TasksClient tasksClient = publicApiClient.tasksClient(); + activitiProcessEngine.getTaskService().saveTask(task); + Map params = new HashMap(); + params.put("select", "state,variables"); + HttpResponse response = tasksClient.update("tasks", + task.getId(), + null, + null, + "{\"state\":\"completed\",\"variables\":[{\"name\":\"wf_reviewOutcome\",\"value\":\"Approve\",\"scope\":\"local\"},{\"name\":\"bpm_comment\",\"value\":\"approved by me\",\"scope\":\"local\"}]}", + "Failed to update task", params); + assertEquals(200, response.getStatusCode()); + HistoricTaskInstance historyTask = activitiProcessEngine.getHistoryService().createHistoricTaskInstanceQuery().taskId(task.getId()).includeProcessVariables().includeTaskLocalVariables().singleResult(); + String outcome = (String) historyTask.getTaskLocalVariables().get("bpm_outcome"); + assertEquals("Approve", outcome); + } + @Test @SuppressWarnings("unchecked") public void testResolveTask() throws Exception