mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-31 17:39:05 +00:00
Fixed a problem where the Activiti Parallel Review workflow was throwing exceptions because it contained a variable 'review_assignee'.
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@26255 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -59,14 +59,14 @@
|
|||||||
|
|
||||||
<humanPerformer>
|
<humanPerformer>
|
||||||
<resourceAssignmentExpression>
|
<resourceAssignmentExpression>
|
||||||
<formalExpression>${review_assignee.properties.userName}</formalExpression>
|
<formalExpression>${reviewAssignee.properties.userName}</formalExpression>
|
||||||
</resourceAssignmentExpression>
|
</resourceAssignmentExpression>
|
||||||
</humanPerformer>
|
</humanPerformer>
|
||||||
|
|
||||||
<!-- For each assignee, task is created -->
|
<!-- For each assignee, task is created -->
|
||||||
<multiInstanceLoopCharacteristics isSequential="false">
|
<multiInstanceLoopCharacteristics isSequential="false">
|
||||||
<loopDataInputRef>bpm_assignees</loopDataInputRef>
|
<loopDataInputRef>bpm_assignees</loopDataInputRef>
|
||||||
<inputDataItem name="review_assignee" />
|
<inputDataItem name="reviewAssignee" />
|
||||||
<completionCondition>${wf_actualPercent >= wf_requiredApprovePercent}</completionCondition>
|
<completionCondition>${wf_actualPercent >= wf_requiredApprovePercent}</completionCondition>
|
||||||
</multiInstanceLoopCharacteristics>
|
</multiInstanceLoopCharacteristics>
|
||||||
</userTask>
|
</userTask>
|
||||||
|
@@ -707,6 +707,43 @@ public abstract class AbstractWorkflowServiceIntegrationTest extends BaseSpringT
|
|||||||
checkWorkflows(workflows, expectedIds);
|
checkWorkflows(workflows, expectedIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testParallelReview() throws Exception
|
||||||
|
{
|
||||||
|
// start pooled review and approve workflow
|
||||||
|
WorkflowDefinition workflowDef = deployDefinition(getParallelReviewDefinitionPath());
|
||||||
|
assertNotNull(workflowDef);
|
||||||
|
|
||||||
|
// Create workflow parameters
|
||||||
|
Map<QName, Serializable> params = new HashMap<QName, Serializable>();
|
||||||
|
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<NodeRef> 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<WorkflowTask> 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)
|
public void checkCompletedWorkflows(String defId, String... expectedIds)
|
||||||
{
|
{
|
||||||
List<WorkflowInstance> workflows = workflowService.getCompletedWorkflows(defId);
|
List<WorkflowInstance> workflows = workflowService.getCompletedWorkflows(defId);
|
||||||
@@ -922,7 +959,6 @@ public abstract class AbstractWorkflowServiceIntegrationTest extends BaseSpringT
|
|||||||
assertEquals(expDef.getVersion(), actualDef.getVersion());
|
assertEquals(expDef.getVersion(), actualDef.getVersion());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
@Override
|
@Override
|
||||||
protected void onSetUpInTransaction() throws Exception
|
protected void onSetUpInTransaction() throws Exception
|
||||||
@@ -979,5 +1015,7 @@ public abstract class AbstractWorkflowServiceIntegrationTest extends BaseSpringT
|
|||||||
|
|
||||||
protected abstract String getPooledReviewDefinitionPath();
|
protected abstract String getPooledReviewDefinitionPath();
|
||||||
|
|
||||||
|
protected abstract String getParallelReviewDefinitionPath();
|
||||||
|
|
||||||
protected abstract String getTestTimerDefinitionPath();
|
protected abstract String getTestTimerDefinitionPath();
|
||||||
}
|
}
|
||||||
|
@@ -20,6 +20,7 @@
|
|||||||
package org.alfresco.repo.workflow;
|
package org.alfresco.repo.workflow;
|
||||||
|
|
||||||
import org.alfresco.service.namespace.NamespacePrefixResolver;
|
import org.alfresco.service.namespace.NamespacePrefixResolver;
|
||||||
|
import org.alfresco.service.namespace.NamespaceService;
|
||||||
import org.alfresco.service.namespace.QName;
|
import org.alfresco.service.namespace.QName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -69,6 +70,10 @@ public class WorkflowQNameConverter
|
|||||||
String qName = name;
|
String qName = name;
|
||||||
if(name.indexOf(QName.NAMESPACE_PREFIX)==-1)
|
if(name.indexOf(QName.NAMESPACE_PREFIX)==-1)
|
||||||
{
|
{
|
||||||
|
if(name.indexOf('_')==-1)
|
||||||
|
{
|
||||||
|
return QName.createQName(NamespaceService.DEFAULT_URI, name);
|
||||||
|
}
|
||||||
qName = name.replaceFirst("_", ":");
|
qName = name.replaceFirst("_", ":");
|
||||||
}
|
}
|
||||||
return QName.createQName(qName, prefixResolver);
|
return QName.createQName(qName, prefixResolver);
|
||||||
|
@@ -108,6 +108,12 @@ public class ActivitiWorkflowServiceIntegrationTest extends AbstractWorkflowServ
|
|||||||
return "alfresco/workflow/review-pooled.bpmn20.xml";
|
return "alfresco/workflow/review-pooled.bpmn20.xml";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getParallelReviewDefinitionPath()
|
||||||
|
{
|
||||||
|
return "alfresco/workflow/parallel-review.bpmn20.xml";
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getTestTimerDefinitionPath()
|
protected String getTestTimerDefinitionPath()
|
||||||
{
|
{
|
||||||
|
@@ -55,6 +55,12 @@ public class JbpmWorkflowServiceIntegrationTest extends AbstractWorkflowServiceI
|
|||||||
return "alfresco/workflow/review_pooled_processdefinition.xml";
|
return "alfresco/workflow/review_pooled_processdefinition.xml";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getParallelReviewDefinitionPath()
|
||||||
|
{
|
||||||
|
return "alfresco/workflow/parallelreview_processdefinition.xml";
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getTestTimerDefinitionPath()
|
protected String getTestTimerDefinitionPath()
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user