diff --git a/config/alfresco/workflow/parallel-review.bpmn20.xml b/config/alfresco/workflow/parallel-review.bpmn20.xml
index de9a43b5ff..f48f78d24e 100644
--- a/config/alfresco/workflow/parallel-review.bpmn20.xml
+++ b/config/alfresco/workflow/parallel-review.bpmn20.xml
@@ -59,14 +59,14 @@
- ${review_assignee.properties.userName}
+ ${reviewAssignee.properties.userName}
bpm_assignees
-
+
${wf_actualPercent >= wf_requiredApprovePercent}
diff --git a/source/java/org/alfresco/repo/workflow/AbstractWorkflowServiceIntegrationTest.java b/source/java/org/alfresco/repo/workflow/AbstractWorkflowServiceIntegrationTest.java
index 3e218a5976..309577873f 100644
--- a/source/java/org/alfresco/repo/workflow/AbstractWorkflowServiceIntegrationTest.java
+++ b/source/java/org/alfresco/repo/workflow/AbstractWorkflowServiceIntegrationTest.java
@@ -707,6 +707,43 @@ public abstract class AbstractWorkflowServiceIntegrationTest extends BaseSpringT
checkWorkflows(workflows, expectedIds);
}
+ public void testParallelReview() throws Exception
+ {
+ // start pooled review and approve workflow
+ WorkflowDefinition workflowDef = deployDefinition(getParallelReviewDefinitionPath());
+ assertNotNull(workflowDef);
+
+ // Create workflow parameters
+ Map params = new HashMap();
+ Serializable wfPackage = workflowService.createPackage(null);
+ params.put(WorkflowModel.ASSOC_PACKAGE, wfPackage);
+ Date dueDate = new Date();
+ params.put(WorkflowModel.PROP_WORKFLOW_DUE_DATE, dueDate);
+ params.put(WorkflowModel.PROP_WORKFLOW_PRIORITY, 1);
+ NodeRef group = groupManager.get(GROUP);
+ assertNotNull(group);
+
+ List assignees = Arrays.asList(personManager.get(USER2), personManager.get(USER3));
+ params.put(WorkflowModel.ASSOC_ASSIGNEES, (Serializable) assignees);
+
+ // Start a workflow instance
+ WorkflowPath path = workflowService.startWorkflow(workflowDef.getId(), params);
+ assertNotNull(path);
+ assertTrue(path.isActive());
+ String instnaceId = path.getInstance().getId();
+
+ WorkflowTask startTask = workflowService.getStartTask(instnaceId);
+ workflowService.endTask(startTask.getId(), null);
+
+ personManager.setUser(USER2);
+ List tasks = workflowService.getAssignedTasks(USER2, WorkflowTaskState.IN_PROGRESS);
+ assertEquals(1, tasks.size());
+
+ personManager.setUser(USER3);
+ tasks = workflowService.getAssignedTasks(USER3, WorkflowTaskState.IN_PROGRESS);
+ assertEquals(1, tasks.size());
+ }
+
public void checkCompletedWorkflows(String defId, String... expectedIds)
{
List workflows = workflowService.getCompletedWorkflows(defId);
@@ -922,7 +959,6 @@ public abstract class AbstractWorkflowServiceIntegrationTest extends BaseSpringT
assertEquals(expDef.getVersion(), actualDef.getVersion());
}
-
@SuppressWarnings("deprecation")
@Override
protected void onSetUpInTransaction() throws Exception
@@ -979,5 +1015,7 @@ public abstract class AbstractWorkflowServiceIntegrationTest extends BaseSpringT
protected abstract String getPooledReviewDefinitionPath();
+ protected abstract String getParallelReviewDefinitionPath();
+
protected abstract String getTestTimerDefinitionPath();
}
diff --git a/source/java/org/alfresco/repo/workflow/WorkflowQNameConverter.java b/source/java/org/alfresco/repo/workflow/WorkflowQNameConverter.java
index 874240a08e..291f5fe71e 100644
--- a/source/java/org/alfresco/repo/workflow/WorkflowQNameConverter.java
+++ b/source/java/org/alfresco/repo/workflow/WorkflowQNameConverter.java
@@ -20,6 +20,7 @@
package org.alfresco.repo.workflow;
import org.alfresco.service.namespace.NamespacePrefixResolver;
+import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
/**
@@ -69,6 +70,10 @@ public class WorkflowQNameConverter
String qName = name;
if(name.indexOf(QName.NAMESPACE_PREFIX)==-1)
{
+ if(name.indexOf('_')==-1)
+ {
+ return QName.createQName(NamespaceService.DEFAULT_URI, name);
+ }
qName = name.replaceFirst("_", ":");
}
return QName.createQName(qName, prefixResolver);
diff --git a/source/java/org/alfresco/repo/workflow/activiti/ActivitiWorkflowServiceIntegrationTest.java b/source/java/org/alfresco/repo/workflow/activiti/ActivitiWorkflowServiceIntegrationTest.java
index cfe0174a15..45de1b7cec 100644
--- a/source/java/org/alfresco/repo/workflow/activiti/ActivitiWorkflowServiceIntegrationTest.java
+++ b/source/java/org/alfresco/repo/workflow/activiti/ActivitiWorkflowServiceIntegrationTest.java
@@ -107,6 +107,12 @@ public class ActivitiWorkflowServiceIntegrationTest extends AbstractWorkflowServ
{
return "alfresco/workflow/review-pooled.bpmn20.xml";
}
+
+ @Override
+ protected String getParallelReviewDefinitionPath()
+ {
+ return "alfresco/workflow/parallel-review.bpmn20.xml";
+ }
@Override
protected String getTestTimerDefinitionPath()
diff --git a/source/java/org/alfresco/repo/workflow/jbpm/JbpmWorkflowServiceIntegrationTest.java b/source/java/org/alfresco/repo/workflow/jbpm/JbpmWorkflowServiceIntegrationTest.java
index f066fb0647..64f922f6f5 100644
--- a/source/java/org/alfresco/repo/workflow/jbpm/JbpmWorkflowServiceIntegrationTest.java
+++ b/source/java/org/alfresco/repo/workflow/jbpm/JbpmWorkflowServiceIntegrationTest.java
@@ -55,6 +55,12 @@ public class JbpmWorkflowServiceIntegrationTest extends AbstractWorkflowServiceI
return "alfresco/workflow/review_pooled_processdefinition.xml";
}
+ @Override
+ protected String getParallelReviewDefinitionPath()
+ {
+ return "alfresco/workflow/parallelreview_processdefinition.xml";
+ }
+
@Override
protected String getTestTimerDefinitionPath()
{