Source:
<code>public EvaluatorResult evaluate(DMNRuntimeEventManager eventManager, DMNResult r) { DMNResultImpl result = (DMNResultImpl) r; DMNRuntimeEventManagerUtils.fireBeforeEvaluateDecisionService(eventManager, dsNode, result); DMNRuntime dmnRuntime = eventManager.getRuntime(); DMNModel dmnModel = result.getModel(); List<String> decisionIDs = dsNode.getDecisionService().getOutputDecision().stream().map(er -> DMNCompilerImpl.getId(er)).collect(Collectors.toList()); DMNResult evaluateById = dmnRuntime.evaluateById(dmnModel, result.getContext().clone(), decisionIDs.toArray(new String[]{})); Map<String, Object> ctx = new HashMap<String, Object>(); for (String id : decisionIDs) { DMNDecisionResult decisionResultById = evaluateById.getDecisionResultById(id); if (decisionResultById.getEvaluationStatus() == DecisionEvaluationStatus.SUCCEEDED) { DecisionNode decisionNode = dmnModel.getDecisionById(id); String decisionName = decisionNode.getName(); ctx.put(decisionName, decisionResultById.getResult()); result.getContext().set(decisionName, decisionResultById.getResult()); } if (transferResult) { result.addDecisionResult(decisionResultById); } } for (DMNMessage m : evaluateById.getMessages()) { result.addMessage(m); } DMNRuntimeEventManagerUtils.fireAfterEvaluateDecisionService(eventManager, dsNode, result); Object evaluatorResultValue = ctx; if (decisionIDs.size() == 1 && coerceSingletonResult) { evaluatorResultValue = ctx.values().iterator().next(); } <START> return new EvaluatorResultImpl(evaluatorResultValue, ResultType.SUCCESS); <END> }</code><technical_language>Please consider other ResultType(s) for cases evaluation fails. Currently return SUCCESS</technical_language>

Target:
public EvaluatorResult evaluate(DMNRuntimeEventManager eventManager, DMNResult r) { DMNResultImpl result = (DMNResultImpl) r; DMNRuntimeEventManagerUtils.fireBeforeEvaluateDecisionService(eventManager, dsNode, result); DMNRuntime dmnRuntime = eventManager.getRuntime(); DMNModel dmnModel = result.getModel(); List<String> decisionIDs = dsNode.getDecisionService().getOutputDecision().stream().map(er -> DMNCompilerImpl.getId(er)).collect(Collectors.toList()); DMNResult evaluateById = dmnRuntime.evaluateById(dmnModel, result.getContext().clone(), decisionIDs.toArray(new String[]{})); Map<String, Object> ctx = new HashMap<String, Object>(); for (String id : decisionIDs) { DMNDecisionResult decisionResultById = evaluateById.getDecisionResultById(id); String decisionName = dmnModel.getDecisionById(id).getName(); ctx.put(decisionName, decisionResultById.getResult()); result.getContext().set(decisionName, decisionResultById.getResult()); if (transferResult) { result.addDecisionResult(decisionResultById); } } boolean errors = false; for (DMNMessage m : evaluateById.getMessages()) { result.addMessage(m); if (m.getSeverity() == Severity.ERROR) { errors = true; } } DMNRuntimeEventManagerUtils.fireAfterEvaluateDecisionService(eventManager, dsNode, result); Object evaluatorResultValue = ctx; if (decisionIDs.size() == 1 && coerceSingletonResult) { evaluatorResultValue = ctx.values().iterator().next(); } ResultType resultType = ResultType.SUCCESS; if (errors) { resultType = ResultType.FAILURE; MsgUtil.reportMessage(LOG, DMNMessage.Severity.ERROR, ((DecisionServiceNodeImpl) dsNode).getSource(), result, null, null, Msg.ERRORS_EVAL_DS_NODE, dsNode.getName()); } return new EvaluatorResultImpl(evaluatorResultValue, resultType); }