diff --git a/src/objects/zcl_abapgit_object_dtel.clas.abap b/src/objects/zcl_abapgit_object_dtel.clas.abap index fc73e7e9a..824045d23 100644 --- a/src/objects/zcl_abapgit_object_dtel.clas.abap +++ b/src/objects/zcl_abapgit_object_dtel.clas.abap @@ -190,6 +190,13 @@ CLASS ZCL_ABAPGIT_OBJECT_DTEL IMPLEMENTATION. io_xml->read( EXPORTING iv_name = 'DD04V' CHANGING cg_data = ls_dd04v ). + " DDIC Step: Replace REF TO class/interface with generic reference to avoid cyclic dependency + IF iv_step = zif_abapgit_object=>gc_step_id-ddic AND ls_dd04v-datatype = 'REF'. + ls_dd04v-rollname = 'OBJECT'. + ELSEIF iv_step = zif_abapgit_object=>gc_step_id-late AND ls_dd04v-datatype <> 'REF'. + RETURN. " already active + ENDIF. + corr_insert( iv_package = iv_package ig_object_class = 'DICT' ). @@ -241,6 +248,7 @@ CLASS ZCL_ABAPGIT_OBJECT_DTEL IMPLEMENTATION. METHOD zif_abapgit_object~get_deserialize_steps. APPEND zif_abapgit_object=>gc_step_id-ddic TO rt_steps. + APPEND zif_abapgit_object=>gc_step_id-late TO rt_steps. ENDMETHOD. diff --git a/src/objects/zcl_abapgit_object_shlp.clas.abap b/src/objects/zcl_abapgit_object_shlp.clas.abap index 7f49e0690..7c6793b42 100644 --- a/src/objects/zcl_abapgit_object_shlp.clas.abap +++ b/src/objects/zcl_abapgit_object_shlp.clas.abap @@ -60,6 +60,13 @@ CLASS ZCL_ABAPGIT_OBJECT_SHLP IMPLEMENTATION. io_xml->read( EXPORTING iv_name = 'DD30V' CHANGING cg_data = ls_dd30v ). + + IF iv_step = zif_abapgit_object=>gc_step_id-ddic AND NOT ls_dd30v-selmexit IS INITIAL. + ls_dd30v-selmexit = 'RS_DD_SELMEXIT'. + ELSEIF iv_step = zif_abapgit_object=>gc_step_id-late AND ls_dd30v-selmexit IS INITIAL. + RETURN. " already active + ENDIF. + io_xml->read( EXPORTING iv_name = 'DD31V_TABLE' CHANGING cg_data = lt_dd31v ). io_xml->read( EXPORTING iv_name = 'DD32P_TABLE' @@ -116,6 +123,7 @@ CLASS ZCL_ABAPGIT_OBJECT_SHLP IMPLEMENTATION. METHOD zif_abapgit_object~get_deserialize_steps. APPEND zif_abapgit_object=>gc_step_id-ddic TO rt_steps. + APPEND zif_abapgit_object=>gc_step_id-late TO rt_steps. ENDMETHOD. diff --git a/src/objects/zcl_abapgit_object_tabl.clas.abap b/src/objects/zcl_abapgit_object_tabl.clas.abap index 2bc75b116..f11227d16 100644 --- a/src/objects/zcl_abapgit_object_tabl.clas.abap +++ b/src/objects/zcl_abapgit_object_tabl.clas.abap @@ -471,7 +471,10 @@ CLASS ZCL_ABAPGIT_OBJECT_TABL IMPLEMENTATION. lt_secondary LIKE lt_dd17v, lt_dd35v TYPE TABLE OF dd35v, lt_dd36m TYPE dd36mttyp, - ls_dd12v LIKE LINE OF lt_dd12v. + ls_dd12v LIKE LINE OF lt_dd12v, + lv_refs TYPE abap_bool. + + FIELD-SYMBOLS: TYPE dd03p. IF deserialize_idoc_segment( io_xml = io_xml iv_package = iv_package ) = abap_false. @@ -482,6 +485,16 @@ CLASS ZCL_ABAPGIT_OBJECT_TABL IMPLEMENTATION. CHANGING cg_data = ls_dd09l ). io_xml->read( EXPORTING iv_name = 'DD03P_TABLE' CHANGING cg_data = lt_dd03p ). + + " DDIC Step: Replace REF TO class/interface with generic reference to avoid cyclic dependency + LOOP AT lt_dd03p ASSIGNING WHERE datatype = 'REF'. + IF iv_step = zif_abapgit_object=>gc_step_id-ddic. + -rollname = 'OBJECT'. + ELSE. + lv_refs = abap_true. + ENDIF. + ENDLOOP. + io_xml->read( EXPORTING iv_name = 'DD05M_TABLE' CHANGING cg_data = lt_dd05m ). io_xml->read( EXPORTING iv_name = 'DD08V_TABLE' @@ -495,6 +508,15 @@ CLASS ZCL_ABAPGIT_OBJECT_TABL IMPLEMENTATION. io_xml->read( EXPORTING iv_name = 'DD36M' CHANGING cg_data = lt_dd36m ). + " DDIC Step: Remove referenced to search helps + IF iv_step = zif_abapgit_object=>gc_step_id-ddic. + CLEAR: lt_dd35v, lt_dd36m. + ENDIF. + + IF iv_step = zif_abapgit_object=>gc_step_id-late AND lv_refs = abap_false AND lines( lt_dd35v ) = 0. + RETURN. " already active + ENDIF. + corr_insert( iv_package = iv_package ig_object_class = 'DICT' ). @@ -608,6 +630,7 @@ CLASS ZCL_ABAPGIT_OBJECT_TABL IMPLEMENTATION. METHOD zif_abapgit_object~get_deserialize_steps. APPEND zif_abapgit_object=>gc_step_id-ddic TO rt_steps. + APPEND zif_abapgit_object=>gc_step_id-late TO rt_steps. ENDMETHOD. diff --git a/src/objects/zcl_abapgit_object_ttyp.clas.abap b/src/objects/zcl_abapgit_object_ttyp.clas.abap index 9ac47f856..adb8a601b 100644 --- a/src/objects/zcl_abapgit_object_ttyp.clas.abap +++ b/src/objects/zcl_abapgit_object_ttyp.clas.abap @@ -62,6 +62,14 @@ CLASS ZCL_ABAPGIT_OBJECT_TTYP IMPLEMENTATION. io_xml->read( EXPORTING iv_name = 'DD40V' CHANGING cg_data = ls_dd40v ). + + " DDIC Step: Replace REF TO class/interface with generic reference to avoid cyclic dependency + IF iv_step = zif_abapgit_object=>gc_step_id-ddic AND ls_dd40v-datatype = 'REF'. + ls_dd40v-rowtype = 'OBJECT'. + ELSEIF iv_step = zif_abapgit_object=>gc_step_id-late AND ls_dd40v-datatype <> 'REF'. + RETURN. " already active + ENDIF. + io_xml->read( EXPORTING iv_name = 'DD42V' CHANGING cg_data = lt_dd42v ). io_xml->read( EXPORTING iv_name = 'DD43V' @@ -132,6 +140,7 @@ CLASS ZCL_ABAPGIT_OBJECT_TTYP IMPLEMENTATION. METHOD zif_abapgit_object~get_deserialize_steps. APPEND zif_abapgit_object=>gc_step_id-ddic TO rt_steps. + APPEND zif_abapgit_object=>gc_step_id-late TO rt_steps. ENDMETHOD. diff --git a/src/objects/zcl_abapgit_objects.clas.abap b/src/objects/zcl_abapgit_objects.clas.abap index b72466897..057b0d304 100644 --- a/src/objects/zcl_abapgit_objects.clas.abap +++ b/src/objects/zcl_abapgit_objects.clas.abap @@ -771,7 +771,16 @@ CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION. ENDLOOP. - zcl_abapgit_objects_activation=>activate( is_step-is_ddic ). + CASE is_step-step_id. + WHEN zif_abapgit_object=>gc_step_id-ddic. + zcl_abapgit_objects_activation=>activate( is_step-is_ddic ). + WHEN zif_abapgit_object=>gc_step_id-abap. + zcl_abapgit_objects_activation=>activate( is_step-is_ddic ). + WHEN zif_abapgit_object=>gc_step_id-late. + " late can have both DDIC (like TABL with REF TO) and non-DDIC objects + zcl_abapgit_objects_activation=>activate( abap_true ). + zcl_abapgit_objects_activation=>activate( abap_false ). + ENDCASE. * Call postprocessing li_exit = zcl_abapgit_exit=>get_instance( ).