diff --git a/app/admin/fiori-service.cds b/app/admin/fiori-service.cds index 813afea9..fbb1d930 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: { $Path: '/Info/hideTreeTable' } } } ], FieldGroup #General : {Data : [ diff --git a/srv/admin-service.cds b/srv/admin-service.cds index 1000125e..62676766 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 { + hideTreeTable: 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..da59197e 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.setHideTreeTable(!env.matchesProfiles("cloud")); + return info; + } + private Supplier notFound(String message) { return () -> new ServiceException(ErrorStatuses.NOT_FOUND, message); }