CLASS zcl_abapgit_object_ttyp DEFINITION PUBLIC INHERITING FROM zcl_abapgit_objects_super FINAL. PUBLIC SECTION. INTERFACES zif_abapgit_object. ALIASES mo_files FOR zif_abapgit_object~mo_files. PROTECTED SECTION. PRIVATE SECTION. ENDCLASS. CLASS ZCL_ABAPGIT_OBJECT_TTYP IMPLEMENTATION. METHOD zif_abapgit_object~changed_by. SELECT SINGLE as4user FROM dd40l INTO rv_user WHERE typename = ms_item-obj_name AND as4local = 'A'. IF sy-subrc <> 0. rv_user = c_user_unknown. ENDIF. ENDMETHOD. METHOD zif_abapgit_object~delete. IF zif_abapgit_object~exists( ) = abap_false. RETURN. ENDIF. delete_ddic( 'A' ). ENDMETHOD. METHOD zif_abapgit_object~deserialize. DATA: lv_name TYPE ddobjname, lt_dd42v TYPE dd42v_tab, lt_dd43v TYPE dd43v_tab, ls_dd40v TYPE dd40v, lv_msg TYPE string. 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' CHANGING cg_data = lt_dd43v ). corr_insert( iv_package = iv_package ig_object_class = 'DICT' ). lv_name = ms_item-obj_name. " type conversion CALL FUNCTION 'DDIF_TTYP_PUT' EXPORTING name = lv_name dd40v_wa = ls_dd40v TABLES dd42v_tab = lt_dd42v dd43v_tab = lt_dd43v EXCEPTIONS ttyp_not_found = 1 name_inconsistent = 2 ttyp_inconsistent = 3 put_failure = 4 put_refused = 5 OTHERS = 6. IF sy-subrc <> 0. lv_msg = |Error in DDIF_TTYP_PUT on object { lv_name }|. CASE sy-subrc. WHEN 1. lv_msg = lv_msg && | (TTYP_NOT_FOUND)|. WHEN 2. lv_msg = lv_msg && | (NAME_INCONSISTENT)|. WHEN 3. lv_msg = lv_msg && | (TTYP_INCONSISTENT)|. WHEN 4. lv_msg = lv_msg && | (PUT_FAILURE)|. WHEN 5. lv_msg = lv_msg && | (PUT_REFUSED)|. WHEN OTHERS. ENDCASE. zcx_abapgit_exception=>raise( lv_msg ). ENDIF. zcl_abapgit_objects_activation=>add_item( ms_item ). ENDMETHOD. METHOD zif_abapgit_object~exists. DATA: lv_typename TYPE dd40l-typename. SELECT SINGLE typename FROM dd40l INTO lv_typename WHERE typename = ms_item-obj_name AND as4local = 'A'. rv_bool = boolc( sy-subrc = 0 ). ENDMETHOD. METHOD zif_abapgit_object~get_comparator. RETURN. ENDMETHOD. 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. METHOD zif_abapgit_object~get_metadata. rs_metadata = get_metadata( ). rs_metadata-ddic = abap_true. ENDMETHOD. METHOD zif_abapgit_object~is_active. rv_active = is_active( ). ENDMETHOD. METHOD zif_abapgit_object~is_locked. rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'ESDICT' iv_argument = |{ ms_item-obj_type }{ ms_item-obj_name }| ). ENDMETHOD. METHOD zif_abapgit_object~jump. jump_se11( iv_radio = 'RSRD1-DDTYPE' iv_field = 'RSRD1-DDTYPE_VAL' ). ENDMETHOD. METHOD zif_abapgit_object~serialize. DATA: lv_name TYPE ddobjname, lt_dd42v TYPE dd42v_tab, lt_dd43v TYPE dd43v_tab, ls_dd40v TYPE dd40v. lv_name = ms_item-obj_name. CALL FUNCTION 'DDIF_TTYP_GET' EXPORTING name = lv_name state = 'A' langu = mv_language IMPORTING dd40v_wa = ls_dd40v TABLES dd42v_tab = lt_dd42v dd43v_tab = lt_dd43v EXCEPTIONS illegal_input = 1 OTHERS = 2. IF sy-subrc <> 0. zcx_abapgit_exception=>raise_t100( ). ENDIF. IF ls_dd40v IS INITIAL. RETURN. " does not exist in system ENDIF. CLEAR: ls_dd40v-as4user, ls_dd40v-as4date, ls_dd40v-as4time. IF NOT ls_dd40v-rowkind IS INITIAL. CLEAR ls_dd40v-typelen. ENDIF. io_xml->add( iv_name = 'DD40V' ig_data = ls_dd40v ). io_xml->add( iv_name = 'DD42V' ig_data = lt_dd42v ). io_xml->add( iv_name = 'DD43V' ig_data = lt_dd43v ). ENDMETHOD. ENDCLASS.