From 7b6fa2f4b4ed28dbb3035815a4e1d1f0719d357b Mon Sep 17 00:00:00 2001 From: Marc Becker Date: Wed, 12 Mar 2025 14:27:30 +0100 Subject: [PATCH] Restore up__ID for covers Fixes https://github.com/SAP-samples/cloud-cap-samples-java/issues/452 Workaround, that is currently required to restore the up__ID, which is no longer provided through the OData API due to containment. --- srv/pom.xml | 1 + .../java/my/bookshop/handlers/AdminServiceHandler.java | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/srv/pom.xml b/srv/pom.xml index dfbaf573..f0ab50e7 100644 --- a/srv/pom.xml +++ b/srv/pom.xml @@ -234,6 +234,7 @@ cds.gen true + true diff --git a/srv/src/main/java/my/bookshop/handlers/AdminServiceHandler.java b/srv/src/main/java/my/bookshop/handlers/AdminServiceHandler.java index 1b9c32c5..8ffebe54 100644 --- a/srv/src/main/java/my/bookshop/handlers/AdminServiceHandler.java +++ b/srv/src/main/java/my/bookshop/handlers/AdminServiceHandler.java @@ -23,6 +23,7 @@ import com.sap.cds.ql.Update; import com.sap.cds.ql.Upsert; import com.sap.cds.ql.cqn.CqnAnalyzer; +import com.sap.cds.ql.cqn.CqnStructuredTypeRef; import com.sap.cds.reflect.CdsModel; import com.sap.cds.services.ErrorStatuses; import com.sap.cds.services.EventContext; @@ -43,6 +44,7 @@ import cds.gen.adminservice.AdminService_; import cds.gen.adminservice.Books; import cds.gen.adminservice.BooksAddToOrderContext; +import cds.gen.adminservice.BooksCovers; import cds.gen.adminservice.Books_; import cds.gen.adminservice.OrderItems; import cds.gen.adminservice.OrderItems_; @@ -293,6 +295,12 @@ public void addBooksViaCsv(CdsUpdateEventContext context, Upload upload) { context.setResult(Arrays.asList(upload)); } + @Before(event = {CqnService.EVENT_CREATE, CqnService.EVENT_UPDATE, DraftService.EVENT_DRAFT_NEW, DraftService.EVENT_DRAFT_PATCH}) + public void restoreCoversUpId(CqnStructuredTypeRef ref, BooksCovers cover) { + // restore up__ID, which is not provided via OData due to containment + cover.setUpId((String) analyzer.analyze(ref).rootKeys().get(Books.ID)); + } + private Supplier notFound(String message) { return () -> new ServiceException(ErrorStatuses.NOT_FOUND, message); }