From e42049210d48cb5be1e751b4d0a8c3f814fb59be Mon Sep 17 00:00:00 2001 From: Francisco Javier Tirado Sarti Date: Fri, 17 May 2024 18:55:51 +0200 Subject: [PATCH] [JBPM-10230] Fix multiple ForEachNodeInstances --- .../impl/WorkflowProcessInstanceImpl.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/WorkflowProcessInstanceImpl.java b/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/WorkflowProcessInstanceImpl.java index 4ced5937be..0ad682b9b3 100644 --- a/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/WorkflowProcessInstanceImpl.java +++ b/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/WorkflowProcessInstanceImpl.java @@ -823,16 +823,16 @@ public VariableResolver getVariableResolver(String varName) { return (varExpression) -> { try { // for each can have multiple outcomes 1 per item of the list so it should be computed like that - ForEachNodeInstance forEachNodeInstance = (ForEachNodeInstance) getNodeInstanceByNodeId(node.getId(), true); - if(forEachNodeInstance == null) { - return new Object[0]; - } - List data = forEachNodeInstance.getNodeInstances().stream().filter(e -> e instanceof CompositeContextNodeInstance).map(e -> (CompositeContextNodeInstance) e).collect(Collectors.toList()); List outcome = new ArrayList<>(); - for(CompositeContextNodeInstance nodeInstance : data) { - Object resolvedValue = resolveExpressionVariable(varExpression, new NodeInstanceResolverFactory(nodeInstance)).orElse(null); - if(resolvedValue != null) { - outcome.add(resolvedValue); + for (NodeInstance item : getNodeInstances(true)) { + if (item.getNodeId() == node.getId() && item instanceof ForEachNodeInstance) { + List data = ((ForEachNodeInstance) item).getNodeInstances() + .stream().filter(e -> e instanceof CompositeContextNodeInstance) + .map(e -> (CompositeContextNodeInstance) e).collect(Collectors.toList()); + for (CompositeContextNodeInstance nodeInstance : data) { + resolveExpressionVariable(varExpression, new NodeInstanceResolverFactory(nodeInstance)) + .ifPresent(outcome::add); + } } } return outcome.toArray();