mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Merged V4.0-BUGFIX into HEAD
36714: ALF-14224: WorkflowTaskDefinition form-key fetching fixed for multi-instance UserTasks git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@36719 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -48,6 +48,7 @@ import org.activiti.engine.history.HistoricProcessInstanceQuery;
|
||||
import org.activiti.engine.history.HistoricTaskInstance;
|
||||
import org.activiti.engine.history.HistoricTaskInstanceQuery;
|
||||
import org.activiti.engine.impl.RepositoryServiceImpl;
|
||||
import org.activiti.engine.impl.bpmn.behavior.MultiInstanceActivityBehavior;
|
||||
import org.activiti.engine.impl.bpmn.behavior.ReceiveTaskActivityBehavior;
|
||||
import org.activiti.engine.impl.bpmn.behavior.UserTaskActivityBehavior;
|
||||
import org.activiti.engine.impl.bpmn.deployer.BpmnDeployer;
|
||||
@@ -62,6 +63,7 @@ import org.activiti.engine.impl.pvm.PvmActivity;
|
||||
import org.activiti.engine.impl.pvm.PvmTransition;
|
||||
import org.activiti.engine.impl.pvm.ReadOnlyProcessDefinition;
|
||||
import org.activiti.engine.impl.pvm.process.ActivityImpl;
|
||||
import org.activiti.engine.impl.task.TaskDefinition;
|
||||
import org.activiti.engine.repository.Deployment;
|
||||
import org.activiti.engine.repository.ProcessDefinition;
|
||||
import org.activiti.engine.runtime.Execution;
|
||||
@@ -617,14 +619,14 @@ public class ActivitiWorkflowEngine extends BPMEngine implements WorkflowEngine
|
||||
Collection<PvmActivity> taskActivities = findUserTasks(startEvent);
|
||||
for(PvmActivity act : taskActivities)
|
||||
{
|
||||
String formKey = getFormKey(act);
|
||||
String formKey = getFormKey(act, processDefinition);
|
||||
defs.add(typeConverter.getTaskDefinition(act, formKey, processDefinition.getId(), false));
|
||||
}
|
||||
|
||||
return defs;
|
||||
}
|
||||
|
||||
private String getFormKey(PvmActivity act)
|
||||
private String getFormKey(PvmActivity act, ReadOnlyProcessDefinition processDefinition)
|
||||
{
|
||||
if(act instanceof ActivityImpl)
|
||||
{
|
||||
@@ -632,15 +634,33 @@ public class ActivitiWorkflowEngine extends BPMEngine implements WorkflowEngine
|
||||
if (actImpl.getActivityBehavior() instanceof UserTaskActivityBehavior)
|
||||
{
|
||||
UserTaskActivityBehavior uta = (UserTaskActivityBehavior) actImpl.getActivityBehavior();
|
||||
TaskFormHandler handler = uta.getTaskDefinition().getTaskFormHandler();
|
||||
return getFormKey(uta.getTaskDefinition());
|
||||
}
|
||||
else if(actImpl.getActivityBehavior() instanceof MultiInstanceActivityBehavior)
|
||||
{
|
||||
// Get the task-definition from the process-definition
|
||||
if(processDefinition instanceof ProcessDefinitionEntity)
|
||||
{
|
||||
// Task definition id is the same the the activity id
|
||||
TaskDefinition taskDef = ((ProcessDefinitionEntity) processDefinition).getTaskDefinitions().get(act.getId());
|
||||
if(taskDef != null)
|
||||
{
|
||||
return getFormKey(taskDef);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private String getFormKey(TaskDefinition taskDefinition)
|
||||
{
|
||||
TaskFormHandler handler = taskDefinition.getTaskFormHandler();
|
||||
if(handler != null && handler instanceof DefaultTaskFormHandler)
|
||||
{
|
||||
// We cast to DefaultTaskFormHandler since we do not configure our own
|
||||
return ((DefaultTaskFormHandler)handler).getFormKey();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@@ -33,6 +33,7 @@ import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.cmr.workflow.WorkflowDefinition;
|
||||
import org.alfresco.service.cmr.workflow.WorkflowPath;
|
||||
import org.alfresco.service.cmr.workflow.WorkflowTask;
|
||||
import org.alfresco.service.cmr.workflow.WorkflowTaskDefinition;
|
||||
import org.alfresco.service.cmr.workflow.WorkflowTaskQuery;
|
||||
import org.alfresco.service.cmr.workflow.WorkflowTaskState;
|
||||
import org.alfresco.service.namespace.NamespaceService;
|
||||
@@ -132,6 +133,21 @@ public class ActivitiWorkflowServiceIntegrationTest extends AbstractWorkflowServ
|
||||
assertEquals(props.get(WorkflowModel.PROP_PRIORITY),Integer.valueOf(priorDef.getDefaultValue()));
|
||||
}
|
||||
}
|
||||
|
||||
public void testGetWorkflowTaskDefinitionsWithMultiInstanceTask()
|
||||
{
|
||||
// Test added to validate fix for ALF-14224
|
||||
WorkflowDefinition definition = deployDefinition(getParallelReviewDefinitionPath());
|
||||
String workflowDefId = definition.getId();
|
||||
List<WorkflowTaskDefinition> taskDefs = workflowService.getTaskDefinitions(workflowDefId);
|
||||
assertEquals(4, taskDefs.size());
|
||||
|
||||
// The first task is the start-task, the second one is a multi-instance UserTask. This should have the right form-key
|
||||
WorkflowTaskDefinition taskDef = taskDefs.get(1);
|
||||
assertEquals("wf:activitiReviewTask", taskDef.getId());
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void checkTaskQueryStartTaskCompleted(String workflowInstanceId, WorkflowTask startTask)
|
||||
{
|
||||
|
Reference in New Issue
Block a user