diff --git a/src/main/java/de/metas/ui/web/window/descriptor/factory/standard/GridTabVOBasedDocumentEntityDescriptorFactory.java b/src/main/java/de/metas/ui/web/window/descriptor/factory/standard/GridTabVOBasedDocumentEntityDescriptorFactory.java index 100edf841..0a5dd5d70 100644 --- a/src/main/java/de/metas/ui/web/window/descriptor/factory/standard/GridTabVOBasedDocumentEntityDescriptorFactory.java +++ b/src/main/java/de/metas/ui/web/window/descriptor/factory/standard/GridTabVOBasedDocumentEntityDescriptorFactory.java @@ -43,6 +43,7 @@ import de.metas.ui.web.window.model.IDocumentFieldValueProvider; import de.metas.ui.web.window.model.lookup.LabelsLookup; import de.metas.ui.web.window.model.sql.SqlDocumentsRepository; +import lombok.NonNull; /* * #%L @@ -388,7 +389,7 @@ else if (actionType == ButtonFieldActionType.genericZoomInto) // .setReadonlyLogic(readonlyLogic) .setAlwaysUpdateable(alwaysUpdateable) - .setMandatoryLogic(gridFieldVO.isMandatory() ? ConstantLogicExpression.TRUE : gridFieldVO.getMandatoryLogic()) + .setMandatoryLogic(extractMandatoryLogic(gridFieldVO)) .setDisplayLogic(gridFieldVO.getDisplayLogic()) // .setDefaultFilterField(gridFieldVO.isSelectionColumn()) @@ -631,6 +632,13 @@ private static boolean extractAlwaysUpdateable(final GridFieldVO gridFieldVO) return gridFieldVO.isAlwaysUpdateable(); } + private static ILogicExpression extractMandatoryLogic(@NonNull final GridFieldVO gridFieldVO) + { + final ILogicExpression mandatoryLogic = gridFieldVO.getMandatoryLogic(); + + return mandatoryLogic.isNullExpression() ? ConstantLogicExpression.of(gridFieldVO.isMandatory()) : mandatoryLogic; + } + private final void collectSpecialField(final DocumentFieldDescriptor.Builder field) { if (_specialFieldsCollector == null) diff --git a/src/main/java/de/metas/ui/web/window/model/Document.java b/src/main/java/de/metas/ui/web/window/model/Document.java index d12e85a32..1c3d00b26 100644 --- a/src/main/java/de/metas/ui/web/window/model/Document.java +++ b/src/main/java/de/metas/ui/web/window/model/Document.java @@ -1707,7 +1707,7 @@ public DocumentValidStatus checkAndGetValidStatus() continue; } - final DocumentValidStatus validState = documentField.updateStatusIfInvalidAndGet(changesCollector); + final DocumentValidStatus validState = documentField.updateStatusIfInitialInvalidAndGet(changesCollector); if (!validState.isValid()) { logger.trace("Considering document invalid because {} is not valid: {}", documentField, validState); diff --git a/src/main/java/de/metas/ui/web/window/model/DocumentField.java b/src/main/java/de/metas/ui/web/window/model/DocumentField.java index 9d1b61372..36b414524 100644 --- a/src/main/java/de/metas/ui/web/window/model/DocumentField.java +++ b/src/main/java/de/metas/ui/web/window/model/DocumentField.java @@ -490,7 +490,7 @@ public DocumentValidStatus getValidStatus() } @Override - public DocumentValidStatus updateStatusIfInvalidAndGet(final IDocumentChangesCollector changesCollector) + public DocumentValidStatus updateStatusIfInitialInvalidAndGet(final IDocumentChangesCollector changesCollector) { if (_validStatus.isInitialInvalid()) { diff --git a/src/main/java/de/metas/ui/web/window/model/IDocumentField.java b/src/main/java/de/metas/ui/web/window/model/IDocumentField.java index f270e24c0..dd0fb9766 100644 --- a/src/main/java/de/metas/ui/web/window/model/IDocumentField.java +++ b/src/main/java/de/metas/ui/web/window/model/IDocumentField.java @@ -86,7 +86,11 @@ default DocumentPath getDocumentPath() @Override DocumentValidStatus getValidStatus(); - DocumentValidStatus updateStatusIfInvalidAndGet(IDocumentChangesCollector changesCollector); + /** + * Note: it's not clear why it is enough to only evaluate the while the initial status is invalid..
+ * Yet I keep it that way for now, because it works as far as we see. And changing it might result in a performance degradation. + */ + DocumentValidStatus updateStatusIfInitialInvalidAndGet(IDocumentChangesCollector changesCollector); IDocumentField copy(Document document, CopyMode copyMode); }