Merged HEAD-BUG-FIX (5.0/Cloud) to HEAD (5.0/Cloud)

76588: Merged V4.2-BUG-FIX (4.2.4) to HEAD-BUG-FIX (5.0/Cloud)
      76507: Merged V4.2.3 (4.2.3) to V4.2-BUG-FIX (4.2.4)
         76354: MNT-11247 : Additional assignment events triggered at end of workflow
         Added a test to simulate the issue.


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@77655 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Mark Rogers
2014-07-22 15:55:05 +00:00
parent c9ba4bc66e
commit ded1d1a971
2 changed files with 109 additions and 1 deletions

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2005-2011 Alfresco Software Limited. * Copyright (C) 2005-2014 Alfresco Software Limited.
* *
* This file is part of Alfresco * This file is part of Alfresco
* *
@@ -27,6 +27,7 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.security.permissions.AccessDeniedException; import org.alfresco.repo.security.permissions.AccessDeniedException;
import org.alfresco.repo.workflow.AbstractWorkflowServiceIntegrationTest; import org.alfresco.repo.workflow.AbstractWorkflowServiceIntegrationTest;
import org.alfresco.repo.workflow.WorkflowModel; import org.alfresco.repo.workflow.WorkflowModel;
@@ -282,6 +283,37 @@ public class ActivitiWorkflowServiceIntegrationTest extends AbstractWorkflowServ
assertEquals(veryLongTextValue, startTask.getProperties().get(WorkflowModel.PROP_COMMENT)); assertEquals(veryLongTextValue, startTask.getProperties().get(WorkflowModel.PROP_COMMENT));
} }
/**
* Test for MNT-11247
*/
public void testAssignmentListener()
{
WorkflowDefinition definition = deployDefinition(getAssignmentListenerDefinitionPath());
Map<QName, Serializable> params = new HashMap<QName, Serializable>();
params.put(ContentModel.PROP_OWNER, USER1);
NodeRef assignee = personManager.get(USER1);
params.put(WorkflowModel.ASSOC_ASSIGNEE, assignee);
WorkflowPath path = workflowService.startWorkflow(definition.getId(), params);
// end start task
List<WorkflowTask> tasks = workflowService.getTasksForWorkflowPath(path.getId());
workflowService.endTask(tasks.get(0).getId(), null);
// end user task 1
tasks = workflowService.getTasksForWorkflowPath(path.getId());
workflowService.updateTask(tasks.get(0).getId(), params, null, null);
workflowService.endTask(tasks.get(0).getId(), null);
WorkflowTask result = workflowService.getTaskById(tasks.get(0).getId());
Map<QName, Serializable> props = result.getProperties();
Double create1 = (Double) props.get(QName.createQName("http://www.alfresco.org/model/bpm/1.0", "create1"));
assertEquals("Create listener was not triggered", new Double(1), create1);
Double complete1 = (Double) props.get(QName.createQName("http://www.alfresco.org/model/bpm/1.0", "complete1"));
assertEquals("Complete listener was not triggered", new Double(1), complete1);
Double assignment1 = (Double) props.get(QName.createQName("http://www.alfresco.org/model/bpm/1.0", "assignment1"));
assertEquals("Assign listener was not triggered", new Double(1), assignment1);
}
protected String getLongString(int numberOfCharacters) { protected String getLongString(int numberOfCharacters) {
StringBuffer stringBuffer = new StringBuffer(); StringBuffer stringBuffer = new StringBuffer();
for(int i=0; i<numberOfCharacters/10;i++) { for(int i=0; i<numberOfCharacters/10;i++) {
@@ -386,6 +418,11 @@ public class ActivitiWorkflowServiceIntegrationTest extends AbstractWorkflowServ
return "activiti/testTimer.bpmn20.xml"; return "activiti/testTimer.bpmn20.xml";
} }
protected String getAssignmentListenerDefinitionPath()
{
return "activiti/testAssignmentListener.bmn20.xml";
}
@Override @Override
protected QName getAdhocProcessName() protected QName getAdhocProcessName()
{ {

View File

@@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:activiti="http://activiti.org/bpmn"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI"
typeLanguage="http://www.w3.org/2001/XMLSchema"
expressionLanguage="http://www.w3.org/1999/XPath"
targetNamespace="http://www.activiti.org/test">
<process id="testAssignmentListener" name="Test Assignment Listener"
isExecutable="true">
<startEvent id="startevent1" name="Start" activiti:formKey="wf:submitReviewTask"></startEvent>
<userTask id="usertask1" name="User Task 1"
activiti:formKey="bpm_foo">
<extensionElements>
<activiti:taskListener event="assignment"
class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
<activiti:field name="script">
<activiti:string>
var counter = task.getVariableLocal('bpm_assignment1');
if (counter != null)
{
task.setVariableLocal('bpm_assignment1', counter + 1);
}
else
{
task.setVariableLocal('bpm_assignment1', 1);
}
</activiti:string>
</activiti:field>
</activiti:taskListener>
<activiti:taskListener event="create"
class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
<activiti:field name="script">
<activiti:string>
var counter = task.getVariableLocal('bpm_create1');
if (counter != null)
{
task.setVariableLocal('bpm_create1', counter + 1);
}
else
{
task.setVariableLocal('bpm_create1', 1);
}
</activiti:string>
</activiti:field>
</activiti:taskListener>
<activiti:taskListener event="complete"
class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
<activiti:field name="script">
<activiti:string>
var counter = task.getVariableLocal('bpm_complete1');
if (counter != null)
{
task.setVariableLocal('bpm_complete1', counter + 1);
}
else
{
task.setVariableLocal('bpm_complete1', 1);
}
</activiti:string>
</activiti:field>
</activiti:taskListener>
</extensionElements>
</userTask>
<endEvent id="endevent1" name="End"></endEvent>
<sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>
<sequenceFlow id="flow2" sourceRef="usertask1" targetRef="endevent1"></sequenceFlow>
</process>
</definitions>