From 256007685e48f1a02657386fbf4fb2b63c7fad57 Mon Sep 17 00:00:00 2001 From: Alexandr Razinkin <69163585+raaleksandr@users.noreply.github.com> Date: Tue, 15 Feb 2022 09:39:27 +0300 Subject: [PATCH] DTEL: REF TO DATA for DDIC element support (#5350) --- src/objects/zcl_abapgit_object_dtel.clas.abap | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/objects/zcl_abapgit_object_dtel.clas.abap b/src/objects/zcl_abapgit_object_dtel.clas.abap index 3fc1a26e7..5da3203a6 100644 --- a/src/objects/zcl_abapgit_object_dtel.clas.abap +++ b/src/objects/zcl_abapgit_object_dtel.clas.abap @@ -21,6 +21,11 @@ CLASS zcl_abapgit_object_dtel DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje CONSTANTS c_longtext_id_dtel TYPE dokil-id VALUE 'DE' ##NO_TEXT. + METHODS is_abapclass_or_abapinterface + IMPORTING + !iv_reference_name TYPE clike + RETURNING + VALUE(rv_abapclass_or_abapinterface) TYPE abap_bool . METHODS serialize_texts IMPORTING !ii_xml TYPE REF TO zif_abapgit_xml_output @@ -89,6 +94,27 @@ CLASS zcl_abapgit_object_dtel IMPLEMENTATION. ENDMETHOD. + METHOD is_abapclass_or_abapinterface. + + DATA ls_cifkey TYPE seoclskey. + + ls_cifkey-clsname = iv_reference_name. + + CALL FUNCTION 'SEO_CLIF_GET' + EXPORTING + cifkey = ls_cifkey + EXCEPTIONS + not_existing = 1 + deleted = 2 + model_only = 3 + OTHERS = 4. + + IF sy-subrc = 0. + rv_abapclass_or_abapinterface = abap_true. + ENDIF. + ENDMETHOD. + + METHOD serialize_texts. DATA: lv_name TYPE ddobjname, @@ -183,7 +209,9 @@ CLASS zcl_abapgit_object_dtel IMPLEMENTATION. 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'. + IF iv_step = zif_abapgit_object=>gc_step_id-ddic AND ls_dd04v-datatype = 'REF' + AND is_abapclass_or_abapinterface( ls_dd04v-domname ) = abap_true. + ls_dd04v-rollname = 'OBJECT'. ELSEIF iv_step = zif_abapgit_object=>gc_step_id-late AND ls_dd04v-datatype <> 'REF'. RETURN. " already active