From 7ccfa3162ffbca3dc0c0c250b8f82fa9d7a67cb1 Mon Sep 17 00:00:00 2001 From: Rishi Kunnath <82925475+rishikunnath2747@users.noreply.github.com> Date: Wed, 21 Jan 2026 15:38:54 +0530 Subject: [PATCH 1/3] bug fix This fix involves modifying the read only context to recursively search through nested entities which was throwing error before --- pom.xml | 2 +- .../SDMCreateAttachmentsHandler.java | 42 +++++++++++++++++- .../SDMUpdateAttachmentsHandler.java | 43 ++++++++++++++++++- .../com/sap/cds/sdm/utilities/SDMUtils.java | 18 -------- 4 files changed, 83 insertions(+), 22 deletions(-) diff --git a/pom.xml b/pom.xml index 4e0361fe..d5a84cfb 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ - 1.6.3-SNAPSHOT + 1.0.0-RC1 17 ${java.version} ${java.version} diff --git a/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/SDMCreateAttachmentsHandler.java b/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/SDMCreateAttachmentsHandler.java index f1f7d2ca..690210ab 100644 --- a/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/SDMCreateAttachmentsHandler.java +++ b/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/SDMCreateAttachmentsHandler.java @@ -72,9 +72,8 @@ public void processBefore(CdsCreateEventContext context, List data) thr logger.info("Attachment compositions present in CDS Model : " + attachmentCompositionDetails); updateName(context, data, attachmentCompositionDetails); // Remove uploadStatus from attachment data to prevent validation errors - + cleanupReadonlyContextsForAttachments(context, entityData, attachmentCompositionDetails); } - SDMUtils.cleanupReadonlyContexts(data); } @After @@ -536,6 +535,45 @@ private void appendWithSpace(StringBuilder sb) { } } + private void cleanupReadonlyContextsForAttachments( + CdsCreateEventContext context, + Map entityData, + Map> attachmentCompositionDetails) { + String targetEntity = context.getTarget().getQualifiedName(); + + for (Map.Entry> entry : attachmentCompositionDetails.entrySet()) { + String attachmentCompositionName = entry.getValue().get("name"); + + logger.info( + "Cleaning up SDM_READONLY_CONTEXT for composition: {}", attachmentCompositionName); + + // Fetch attachments for this specific composition + List> attachments = + AttachmentsHandlerUtils.fetchAttachments( + targetEntity, entityData, attachmentCompositionName); + + if (attachments != null && !attachments.isEmpty()) { + logger.info( + "Found {} attachments in composition: {}", + attachments.size(), + attachmentCompositionName); + + for (int i = 0; i < attachments.size(); i++) { + Map attachment = attachments.get(i); + if (attachment.containsKey(SDM_READONLY_CONTEXT)) { + logger.info( + " Removing SDM_READONLY_CONTEXT from attachment [{}] in {}", + i, + attachmentCompositionName); + attachment.remove(SDM_READONLY_CONTEXT); + } + } + } else { + logger.info("No attachments found for composition: {}", attachmentCompositionName); + } + } + } + private static class SDMAttachmentData { final String fileNameInSDM; final String descriptionInSDM; diff --git a/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/SDMUpdateAttachmentsHandler.java b/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/SDMUpdateAttachmentsHandler.java index df13018f..05c90c2c 100644 --- a/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/SDMUpdateAttachmentsHandler.java +++ b/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/SDMUpdateAttachmentsHandler.java @@ -122,8 +122,10 @@ public void processBefore(CdsUpdateEventContext context, List data) thr logger.info("Attachment compositions present in CDS Model : " + attachmentCompositionDetails); updateName(context, data, attachmentCompositionDetails); + + // Remove uploadStatus from attachment data to prevent validation errors + cleanupReadonlyContextsForAttachments(context, entityData, attachmentCompositionDetails); } - SDMUtils.cleanupReadonlyContexts(data); } public void updateName( @@ -582,4 +584,43 @@ private void handleWarnings( + contextInfo); } } + + private void cleanupReadonlyContextsForAttachments( + CdsUpdateEventContext context, + Map entityData, + Map> attachmentCompositionDetails) { + String targetEntity = context.getTarget().getQualifiedName(); + + for (Map.Entry> entry : attachmentCompositionDetails.entrySet()) { + String attachmentCompositionName = entry.getValue().get("name"); + + logger.info( + "Cleaning up SDM_READONLY_CONTEXT for composition: {}", attachmentCompositionName); + + // Fetch attachments for this specific composition + List> attachments = + AttachmentsHandlerUtils.fetchAttachments( + targetEntity, entityData, attachmentCompositionName); + + if (attachments != null && !attachments.isEmpty()) { + logger.info( + "Found {} attachments in composition: {}", + attachments.size(), + attachmentCompositionName); + + for (int i = 0; i < attachments.size(); i++) { + Map attachment = attachments.get(i); + if (attachment.containsKey(SDM_READONLY_CONTEXT)) { + logger.info( + " Removing SDM_READONLY_CONTEXT from attachment [{}] in {}", + i, + attachmentCompositionName); + attachment.remove(SDM_READONLY_CONTEXT); + } + } + } else { + logger.info("No attachments found for composition: {}", attachmentCompositionName); + } + } + } } diff --git a/sdm/src/main/java/com/sap/cds/sdm/utilities/SDMUtils.java b/sdm/src/main/java/com/sap/cds/sdm/utilities/SDMUtils.java index 7ef74693..a40cb355 100644 --- a/sdm/src/main/java/com/sap/cds/sdm/utilities/SDMUtils.java +++ b/sdm/src/main/java/com/sap/cds/sdm/utilities/SDMUtils.java @@ -67,24 +67,6 @@ public static Set FileNameContainsWhitespace( return filenamesWithWhitespace; } - public static void cleanupReadonlyContexts(List data) { - for (CdsData entityData : data) { - // Remove SDM_READONLY_CONTEXT from all attachments in the data - entityData.forEach( - (key, value) -> { - if (value instanceof List) { - List list = (List) value; - for (Object item : list) { - if (item instanceof Map) { - Map attachment = (Map) item; - attachment.remove(SDM_READONLY_CONTEXT); - } - } - } - }); - } - } - public static Set FileNameDuplicateInDrafts( List data, String composition, String targetEntity, String upIdKey) { Set uniqueFilenames = new HashSet<>(); From cec285f570bdc5505574409f4d5f26905795f601 Mon Sep 17 00:00:00 2001 From: Rashmi Date: Wed, 21 Jan 2026 16:03:26 +0530 Subject: [PATCH 2/3] Update pom.xml --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d5a84cfb..4e0361fe 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ - 1.0.0-RC1 + 1.6.3-SNAPSHOT 17 ${java.version} ${java.version} From 8aac6d11abb969ad27740256ab10ecf3472de49a Mon Sep 17 00:00:00 2001 From: Rishi Kunnath <82925475+rishikunnath2747@users.noreply.github.com> Date: Wed, 21 Jan 2026 18:46:56 +0530 Subject: [PATCH 3/3] adding changelog --- CHANGELOG.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d05cb05..21e0d540 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,18 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). The format is based on [Keep a Changelog](http://keepachangelog.com/). +## Version 1.7.0 + +### Added +- ChangeLog support +- MoveAttachments support +- Upload Status support in Attachments +- Internationalization support for error messages + +### Fixed +- Prevent unwanted update calls on edit without changes +- Heap Out of Memory error in Large file upload + ## Version 1.6.2 ### Fixed