Skip to content

Commit 1b0d115

Browse files
committed
Small improvement to last commit c1adb7b : set completable to false to indicate correct state
1 parent 33a6fed commit 1b0d115

File tree

1 file changed

+15
-9
lines changed

1 file changed

+15
-9
lines changed

modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/agenda/operation/AbstractEvaluationCriteriaOperation.java

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -145,18 +145,24 @@ public boolean evaluateForCompletion(PlanItemInstanceEntity planItemInstanceEnti
145145

146146
} else if (planItem.getPlanItemDefinition() instanceof Stage) {
147147

148-
if (PlanItemInstanceState.ACTIVE.equals(state) && !planItemInstanceEntity.isStateChangeUnprocessed()) {
149-
boolean criteriaChangeOrActiveChildrenForStage = evaluatePlanItemsCriteria(planItemInstanceEntity, null);
150-
if (criteriaChangeOrActiveChildrenForStage) {
151-
evaluationResult.markCriteriaChanged();
152-
planItemInstanceEntity.setCompletable(false); // an active child = stage cannot be completed anymore
153-
} else {
154-
Stage stage = (Stage) planItem.getPlanItemDefinition();
155-
if (isStageCompletable(planItemInstanceEntity, stage)) {
148+
if (PlanItemInstanceState.ACTIVE.equals(state)) {
149+
150+
if (!planItemInstanceEntity.isStateChangeUnprocessed()) { // when the stage plan item instance state is not stable yet, don't evaluate yet
151+
boolean criteriaChangeOrActiveChildrenForStage = evaluatePlanItemsCriteria(planItemInstanceEntity, null);
152+
if (criteriaChangeOrActiveChildrenForStage) {
156153
evaluationResult.markCriteriaChanged();
157-
CommandContextUtil.getAgenda(commandContext).planCompletePlanItemInstanceOperation(planItemInstanceEntity);
154+
planItemInstanceEntity.setCompletable(false); // an active child = stage cannot be completed anymore
155+
} else {
156+
Stage stage = (Stage) planItem.getPlanItemDefinition();
157+
if (isStageCompletable(planItemInstanceEntity, stage)) {
158+
evaluationResult.markCriteriaChanged();
159+
CommandContextUtil.getAgenda(commandContext).planCompletePlanItemInstanceOperation(planItemInstanceEntity);
160+
}
158161
}
162+
} else {
163+
planItemInstanceEntity.setCompletable(false);
159164
}
165+
160166
}
161167
} else if (PlanItemInstanceState.ACTIVE.equals(state)) {
162168
// check, if the plan item can be ignored for further processing and if so, immediately return

0 commit comments

Comments
 (0)