diff --git a/infra/schema/src/main/resources/xml/ns/public/model/scripting/scripting-3.xsd b/infra/schema/src/main/resources/xml/ns/public/model/scripting/scripting-3.xsd index 0ccb1080e7d..9c127048665 100644 --- a/infra/schema/src/main/resources/xml/ns/public/model/scripting/scripting-3.xsd +++ b/infra/schema/src/main/resources/xml/ns/public/model/scripting/scripting-3.xsd @@ -314,6 +314,18 @@ + + + + Whether to aggregate and pass forward the output of expression evaluations that are done + for each object found. (Meaningful only if scriptingExpression is specified.) + Default is true for compatibility reasons. Set to false to optimize memory consumption. + + + 3.7.1 + + + diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/expressions/SearchEvaluator.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/expressions/SearchEvaluator.java index a67bf7fe7f3..41e7251163b 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/expressions/SearchEvaluator.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/expressions/SearchEvaluator.java @@ -44,6 +44,7 @@ import com.evolveum.midpoint.xml.ns._public.model.scripting_3.SearchExpressionType; import org.apache.commons.lang.Validate; import org.apache.commons.lang.mutable.MutableBoolean; +import org.apache.commons.lang3.BooleanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -137,9 +138,12 @@ public PipelineData evaluate(SearchExpressionType searchE } JAXBElement childExpression = searchExpression.getScriptingExpression(); try { - outputData.addAllFrom(scriptingExpressionEvaluator.evaluateExpression( + PipelineData expressionResult = scriptingExpressionEvaluator.evaluateExpression( (ScriptingExpressionType) childExpression.getValue(), - PipelineData.create(object.getValue(), item.getVariables()), context, globalResult)); + PipelineData.create(object.getValue(), item.getVariables()), context, globalResult); + if (!BooleanUtils.isFalse(searchExpression.isAggregateOutput())) { + outputData.addAllFrom(expressionResult); + } globalResult.setSummarizeSuccesses(true); globalResult.summarize(); } catch (ScriptExecutionException e) {