mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Merged DEV/V4.1-BUG-FIX into HEAD
39787: ALF-15259: Prevent endless loop when sequence-flow goes back to another activity, not encountering any user-tasks (workflow details page) git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@39843 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -28,6 +28,7 @@ import java.util.Collection;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -682,9 +683,10 @@ public class ActivitiWorkflowEngine extends BPMEngine implements WorkflowEngine
|
|||||||
{
|
{
|
||||||
// Use a linked hashmap to get the task defs in the right order
|
// Use a linked hashmap to get the task defs in the right order
|
||||||
Map<String, PvmActivity> userTasks = new LinkedHashMap<String, PvmActivity>();
|
Map<String, PvmActivity> userTasks = new LinkedHashMap<String, PvmActivity>();
|
||||||
|
Set<String> processedActivities = new HashSet<String>();
|
||||||
|
|
||||||
// Start finding activities recursively
|
// Start finding activities recursively
|
||||||
findUserTasks(startEvent, userTasks);
|
findUserTasks(startEvent, userTasks, processedActivities);
|
||||||
|
|
||||||
return userTasks.values();
|
return userTasks.values();
|
||||||
}
|
}
|
||||||
@@ -701,11 +703,12 @@ public class ActivitiWorkflowEngine extends BPMEngine implements WorkflowEngine
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void findUserTasks(PvmActivity currentActivity, Map<String, PvmActivity> userTasks)
|
private void findUserTasks(PvmActivity currentActivity, Map<String, PvmActivity> userTasks, Set<String> processedActivities)
|
||||||
{
|
{
|
||||||
// Only process activity if not already present to prevent endless loops
|
// Only process activity if not already processed, to prevent endless loops
|
||||||
if(!userTasks.containsKey(currentActivity.getId()))
|
if(!processedActivities.contains(currentActivity.getId()))
|
||||||
{
|
{
|
||||||
|
processedActivities.add(currentActivity.getId());
|
||||||
if(isUserTask(currentActivity))
|
if(isUserTask(currentActivity))
|
||||||
{
|
{
|
||||||
userTasks.put(currentActivity.getId(), currentActivity);
|
userTasks.put(currentActivity.getId(), currentActivity);
|
||||||
@@ -718,7 +721,7 @@ public class ActivitiWorkflowEngine extends BPMEngine implements WorkflowEngine
|
|||||||
{
|
{
|
||||||
if(transition.getDestination() != null)
|
if(transition.getDestination() != null)
|
||||||
{
|
{
|
||||||
findUserTasks(transition.getDestination(), userTasks);
|
findUserTasks(transition.getDestination(), userTasks, processedActivities);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user