From 5cf2dc2089dd45d90720c7f610530358d9ca2017 Mon Sep 17 00:00:00 2001 From: danrega <16720986+danrega@users.noreply.github.com> Date: Mon, 4 Dec 2023 15:27:14 +0100 Subject: [PATCH] Update --- src/zbp_demo_abap_rap_ro_u.clas.locals_imp.abap | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/zbp_demo_abap_rap_ro_u.clas.locals_imp.abap b/src/zbp_demo_abap_rap_ro_u.clas.locals_imp.abap index d07f01a..1b00e7f 100644 --- a/src/zbp_demo_abap_rap_ro_u.clas.locals_imp.abap +++ b/src/zbp_demo_abap_rap_ro_u.clas.locals_imp.abap @@ -482,6 +482,7 @@ CLASS lhc_root IMPLEMENTATION. "When parent instances are marked for deletion, child instances with the shared key should be marked as well. LOOP AT lcl_buffer=>child_buffer ASSIGNING FIELD-SYMBOL() WHERE instance-key_field = -key_field. + -changed = abap_false. -deleted = abap_true. ENDLOOP. ENDIF. @@ -561,6 +562,9 @@ CLASS lhc_root IMPLEMENTATION. "- If it is true: Sequentially processing the instances in the %target table IF line_exists( lcl_buffer=>root_buffer[ instance-key_field = -key_field deleted = abap_false ] ). + "If it exists, removing instance that is marked for deletion from the child transactional buffer since it gets replaced by a new one. + DELETE lcl_buffer=>child_buffer WHERE instance-key_field = -key_field AND deleted = abap_true. + LOOP AT -%target ASSIGNING FIELD-SYMBOL(). "Adding instance to child buffer if it does not exist there and considering %control values @@ -865,16 +869,14 @@ CLASS lsc_zdemo_abap_rap_ro_u IMPLEMENTATION. "Deleting entries from database table DELETE zdemo_abap_rapt2 FROM TABLE @( CORRESPONDING #( child_keys ) ). "Deleting instances from child buffer - "LOOP AT lcl_buffer=>child_buffer ASSIGNING FIELD-SYMBOL(). - DELETE lcl_buffer=>child_buffer WHERE instance-key_field = -instance-key_field AND deleted = abap_true. - "ENDLOOP. + DELETE lcl_buffer=>child_buffer WHERE instance-key_field = -instance-key_field AND deleted = abap_true. ENDIF. "Processing the saving of create-by-association operations. DATA cba_tab TYPE TABLE OF zdemo_abap_rap_ch_u. IF line_exists( lcl_buffer=>child_buffer[ changed = abap_true ] ). - LOOP AT lcl_buffer=>child_buffer ASSIGNING FIELD-SYMBOL() WHERE changed = abap_true. + LOOP AT lcl_buffer=>child_buffer ASSIGNING FIELD-SYMBOL() WHERE changed = abap_true AND deleted = abap_false. APPEND CORRESPONDING #( -instance ) TO cba_tab. ENDLOOP. MODIFY zdemo_abap_rapt2 FROM TABLE @( CORRESPONDING #( cba_tab ) ).