From de83a62c96da63f9746e188cf04286b9ae38c5dc Mon Sep 17 00:00:00 2001 From: D070615 Date: Fri, 14 Mar 2025 15:22:12 +0100 Subject: [PATCH] test dynamic ui hidden annotation --- app/admin/fiori-service.cds | 5 ++- db/books.cds | 1 + .../bookshop/handlers/SetHiddenHandler.java | 38 +++++++++++++++++++ 3 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 srv/src/main/java/my/bookshop/handlers/SetHiddenHandler.java diff --git a/app/admin/fiori-service.cds b/app/admin/fiori-service.cds index 813afea9..36ccde37 100644 --- a/app/admin/fiori-service.cds +++ b/app/admin/fiori-service.cds @@ -39,10 +39,11 @@ annotate AdminService.Books with @(UI : { }, { // TODO: should work dynamically - @UI.Hidden, $Type : 'UI.ReferenceFacet', Label : '{i18n>Contents}', - Target : 'contents/@UI.PresentationVariant' + Target : 'contents/@UI.PresentationVariant', + ![@UI.Hidden] : contentsHidden + } ], FieldGroup #General : {Data : [ diff --git a/db/books.cds b/db/books.cds index 1d94da29..979d2e04 100644 --- a/db/books.cds +++ b/db/books.cds @@ -23,6 +23,7 @@ entity Books : cuid, managed { on reviews.book = $self; isReviewable : TechnicalBooleanFlag not null default true; contents : Composition of many Contents on contents.book = $self @odata.contained:false; + virtual contentsHidden : Boolean default false; } entity Authors : cuid, managed { diff --git a/srv/src/main/java/my/bookshop/handlers/SetHiddenHandler.java b/srv/src/main/java/my/bookshop/handlers/SetHiddenHandler.java new file mode 100644 index 00000000..3514673d --- /dev/null +++ b/srv/src/main/java/my/bookshop/handlers/SetHiddenHandler.java @@ -0,0 +1,38 @@ +package my.bookshop.handlers; + + +import java.util.List; +import java.util.Map; + +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Component; + +import com.sap.cds.services.EventContext; +import com.sap.cds.services.handler.EventHandler; +import com.sap.cds.services.handler.annotations.After; +import com.sap.cds.services.handler.annotations.On; +import com.sap.cds.services.handler.annotations.ServiceName; + +import cds.gen.adminservice.AdminService_; +import cds.gen.adminservice.Books_; + +@Component +@ServiceName(AdminService_.CDS_NAME) +/** + * Example of a custom handler for nextSiblingAction + */ +@Profile("hybrid") +public class SetHiddenHandler implements EventHandler { + + @After(entity = Books_.CDS_NAME) + void removeUIHidden(EventContext context){ + Object result = context.get("result"); + if (result instanceof Map row) { + row.put("contentsHidden", true); + } else if (result instanceof List rows && rows.size() == 1) { + ((Map)rows.get(0)).put("contentsHidden", true); + } + } +} + + \ No newline at end of file