private boolean shouldBeSkipped(ApprovalStageDefinitionType stage) { if (!stage.getApproverRelation().isEmpty()) { throw new IllegalStateException("Schema stage was not prepared correctly; contains unresolved approver relations: " + stage); } return stage.getOutcomeIfNoApprovers() == ApprovalLevelOutcomeType.SKIP && stage.getApproverRef().isEmpty() && stage.getApproverExpression().isEmpty(); } }
public void prepareStage(ApprovalStageDefinitionType stageDef, RelationResolver relationResolver, ReferenceResolver referenceResolver) { try { // resolves filters in approvers List<ObjectReferenceType> resolvedApprovers = new ArrayList<>(); for (ObjectReferenceType ref : stageDef.getApproverRef()) { resolvedApprovers.addAll(referenceResolver.resolveReference(ref, "approver ref")); } // resolves approver relations resolvedApprovers.addAll(relationResolver.getApprovers(stageDef.getApproverRelation())); stageDef.getApproverRef().clear(); stageDef.getApproverRef().addAll(resolvedApprovers); stageDef.getApproverRelation().clear(); // default values if (stageDef.getOutcomeIfNoApprovers() == null) { stageDef.setOutcomeIfNoApprovers(ApprovalLevelOutcomeType.REJECT); } if (stageDef.getGroupExpansion() == null) { stageDef.setGroupExpansion(GroupExpansionType.BY_CLAIMING_WORK_ITEMS); } } catch (ExpressionEvaluationException | ObjectNotFoundException | SchemaException | CommunicationException | ConfigurationException | SecurityViolationException e) { throw new SystemException("Couldn't prepare approval schema for execution: " + e.getMessage(), e); // todo propagate these exceptions? } }
if (stageDef.getOutcomeIfNoApprovers() != null) { // should be always the case (default is REJECT) rv.predeterminedOutcome = stageDef.getOutcomeIfNoApprovers(); rv.automatedCompletionReason = NO_ASSIGNEES_FOUND;
LOGGER.debug("No approvers at the stage '{}' for process {} (id {}) - response is {}", stageDef.getName(), execution.getVariable(CommonProcessVariableNames.VARIABLE_PROCESS_INSTANCE_NAME), execution.getProcessInstanceId(), stageDef.getOutcomeIfNoApprovers());