From 6fd64a85da5ad48ddb8b596501b431369341ada6 Mon Sep 17 00:00:00 2001 From: Marc Becker Date: Wed, 26 Mar 2025 11:42:30 +0100 Subject: [PATCH 1/2] Use singleton to show tree table only on HANA --- app/admin/fiori-service.cds | 7 +++---- srv/admin-service.cds | 5 +++++ .../bookshop/handlers/AdminServiceHandler.java | 18 ++++++++++++++---- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/app/admin/fiori-service.cds b/app/admin/fiori-service.cds index 813afea9..cdb964c6 100644 --- a/app/admin/fiori-service.cds +++ b/app/admin/fiori-service.cds @@ -37,12 +37,11 @@ annotate AdminService.Books with @(UI : { Label : '{i18n>Admin}', Target : '@UI.FieldGroup#Admin' }, - { - // TODO: should work dynamically - @UI.Hidden, + { $Type : 'UI.ReferenceFacet', Label : '{i18n>Contents}', - Target : 'contents/@UI.PresentationVariant' + Target : 'contents/@UI.PresentationVariant', + @UI.Hidden: {$edmJson: { $Not: { $Path: '/Info/treeTableSupport' }}} } ], FieldGroup #General : {Data : [ diff --git a/srv/admin-service.cds b/srv/admin-service.cds index 1000125e..545a05b0 100644 --- a/srv/admin-service.cds +++ b/srv/admin-service.cds @@ -38,6 +38,11 @@ service AdminService @(requires: 'admin') { entity Upload @odata.singleton { csv : LargeBinary @Core.MediaType: 'text/csv'; } + + @cds.persistence.skip + @readonly entity Info @odata.singleton { + treeTableSupport: Boolean; + } } // Deep Search Items diff --git a/srv/src/main/java/my/bookshop/handlers/AdminServiceHandler.java b/srv/src/main/java/my/bookshop/handlers/AdminServiceHandler.java index 8ffebe54..f0465937 100644 --- a/srv/src/main/java/my/bookshop/handlers/AdminServiceHandler.java +++ b/srv/src/main/java/my/bookshop/handlers/AdminServiceHandler.java @@ -16,6 +16,7 @@ import java.util.function.Supplier; import java.util.stream.Stream; +import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; import com.sap.cds.Result; @@ -28,6 +29,7 @@ import com.sap.cds.services.ErrorStatuses; import com.sap.cds.services.EventContext; import com.sap.cds.services.ServiceException; +import com.sap.cds.services.cds.CdsReadEventContext; import com.sap.cds.services.cds.CdsUpdateEventContext; import com.sap.cds.services.cds.CqnService; import com.sap.cds.services.draft.DraftCancelEventContext; @@ -46,6 +48,8 @@ import cds.gen.adminservice.BooksAddToOrderContext; import cds.gen.adminservice.BooksCovers; import cds.gen.adminservice.Books_; +import cds.gen.adminservice.Info; +import cds.gen.adminservice.Info_; import cds.gen.adminservice.OrderItems; import cds.gen.adminservice.OrderItems_; import cds.gen.adminservice.Orders; @@ -64,17 +68,16 @@ class AdminServiceHandler implements EventHandler { private final AdminService.Draft adminService; - private final PersistenceService db; - private final Messages messages; - private final CqnAnalyzer analyzer; + private final Environment env; - AdminServiceHandler(AdminService.Draft adminService, PersistenceService db, Messages messages, CdsModel model) { + AdminServiceHandler(AdminService.Draft adminService, PersistenceService db, Messages messages, CdsModel model, Environment env) { this.adminService = adminService; this.db = db; this.messages = messages; + this.env = env; // model is a tenant-dependant model proxy this.analyzer = CqnAnalyzer.create(model); @@ -301,6 +304,13 @@ public void restoreCoversUpId(CqnStructuredTypeRef ref, BooksCovers cover) { cover.setUpId((String) analyzer.analyze(ref).rootKeys().get(Books.ID)); } + @On(event = CqnService.EVENT_READ, entity = Info_.CDS_NAME) + public Info readInfo(CdsReadEventContext context) { + Info info = Info.create(); + info.setTreeTableSupport(env.matchesProfiles("cloud")); + return info; + } + private Supplier notFound(String message) { return () -> new ServiceException(ErrorStatuses.NOT_FOUND, message); } From 4890545a941b6b985b8d5bbdb242b909ad452976 Mon Sep 17 00:00:00 2001 From: Marc Becker Date: Wed, 26 Mar 2025 11:56:42 +0100 Subject: [PATCH 2/2] Invert property --- app/admin/fiori-service.cds | 2 +- srv/admin-service.cds | 2 +- srv/src/main/java/my/bookshop/handlers/AdminServiceHandler.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/admin/fiori-service.cds b/app/admin/fiori-service.cds index cdb964c6..fbb1d930 100644 --- a/app/admin/fiori-service.cds +++ b/app/admin/fiori-service.cds @@ -41,7 +41,7 @@ annotate AdminService.Books with @(UI : { $Type : 'UI.ReferenceFacet', Label : '{i18n>Contents}', Target : 'contents/@UI.PresentationVariant', - @UI.Hidden: {$edmJson: { $Not: { $Path: '/Info/treeTableSupport' }}} + @UI.Hidden: { $edmJson: { $Path: '/Info/hideTreeTable' } } } ], FieldGroup #General : {Data : [ diff --git a/srv/admin-service.cds b/srv/admin-service.cds index 545a05b0..62676766 100644 --- a/srv/admin-service.cds +++ b/srv/admin-service.cds @@ -41,7 +41,7 @@ service AdminService @(requires: 'admin') { @cds.persistence.skip @readonly entity Info @odata.singleton { - treeTableSupport: Boolean; + hideTreeTable: Boolean; } } diff --git a/srv/src/main/java/my/bookshop/handlers/AdminServiceHandler.java b/srv/src/main/java/my/bookshop/handlers/AdminServiceHandler.java index f0465937..da59197e 100644 --- a/srv/src/main/java/my/bookshop/handlers/AdminServiceHandler.java +++ b/srv/src/main/java/my/bookshop/handlers/AdminServiceHandler.java @@ -307,7 +307,7 @@ public void restoreCoversUpId(CqnStructuredTypeRef ref, BooksCovers cover) { @On(event = CqnService.EVENT_READ, entity = Info_.CDS_NAME) public Info readInfo(CdsReadEventContext context) { Info info = Info.create(); - info.setTreeTableSupport(env.matchesProfiles("cloud")); + info.setHideTreeTable(!env.matchesProfiles("cloud")); return info; }