CLASS zcl_abapgit_object_shi3 DEFINITION PUBLIC INHERITING FROM zcl_abapgit_objects_super FINAL. PUBLIC SECTION. INTERFACES zif_abapgit_object. ALIASES mo_files FOR zif_abapgit_object~mo_files. METHODS constructor IMPORTING is_item TYPE zif_abapgit_definitions=>ty_item iv_language TYPE spras. PROTECTED SECTION. METHODS has_authorization IMPORTING !iv_devclass TYPE devclass !iv_structure_id TYPE hier_guid !iv_activity TYPE activ_auth RAISING zcx_abapgit_exception . METHODS is_used IMPORTING !iv_structure_id TYPE hier_guid RAISING zcx_abapgit_exception . METHODS delete_tree_structure IMPORTING !iv_structure_id TYPE hier_guid . PRIVATE SECTION. DATA: mv_tree_id TYPE ttree-id. METHODS jump_se43 RAISING zcx_abapgit_exception. METHODS clear_fields CHANGING cs_head TYPE ttree ct_nodes TYPE hier_iface_t. ENDCLASS. CLASS ZCL_ABAPGIT_OBJECT_SHI3 IMPLEMENTATION. METHOD clear_fields. FIELD-SYMBOLS LIKE LINE OF ct_nodes. CLEAR: cs_head-luser, cs_head-ldate, cs_head-ltime. CLEAR: cs_head-fuser, cs_head-fdate, cs_head-ftime. CLEAR: cs_head-frelease, cs_head-lrelease. CLEAR: cs_head-responsibl. LOOP AT ct_nodes ASSIGNING . CLEAR: -luser, -ldate, -ltime. CLEAR: -fuser, -fdate, -ftime. CLEAR: -frelease, -lrelease. ENDLOOP. ENDMETHOD. METHOD constructor. super->constructor( is_item = is_item iv_language = iv_language ). mv_tree_id = ms_item-obj_name. ENDMETHOD. METHOD delete_tree_structure. CALL FUNCTION 'STREE_EXTERNAL_DELETE' EXPORTING structure_id = iv_structure_id no_confirmation_popup = abap_true. ENDMETHOD. METHOD has_authorization. AUTHORITY-CHECK OBJECT 'S_DEVELOP' ID 'DEVCLASS' FIELD iv_devclass ID 'OBJTYPE' FIELD 'MENU' ID 'OBJNAME' FIELD iv_structure_id ID 'P_GROUP' DUMMY ID 'ACTVT' FIELD iv_activity. IF sy-subrc <> 0. zcx_abapgit_exception=>raise_t100( iv_msgid = 'S#' iv_msgno = '203' ). ENDIF. ENDMETHOD. METHOD is_used. DATA: lt_used_in_structures TYPE STANDARD TABLE OF ttree WITH DEFAULT KEY. CALL FUNCTION 'STREE_GET_STRUCTURE_USAGE' EXPORTING structure_id = iv_structure_id TABLES used_in_structures = lt_used_in_structures. IF lt_used_in_structures IS NOT INITIAL. zcx_abapgit_exception=>raise( |IMG structure ID { iv_structure_id } is still used| ). ENDIF. ENDMETHOD. METHOD jump_se43. DATA: lt_bdcdata TYPE TABLE OF bdcdata. FIELD-SYMBOLS: LIKE LINE OF lt_bdcdata. APPEND INITIAL LINE TO lt_bdcdata ASSIGNING . -program = 'SAPLBMEN'. -dynpro = '0200'. -dynbegin = abap_true. APPEND INITIAL LINE TO lt_bdcdata ASSIGNING . -fnam = 'BDC_OKCODE'. -fval = '=SHOW'. APPEND INITIAL LINE TO lt_bdcdata ASSIGNING . -fnam = 'BMENUNAME-ID'. -fval = ms_item-obj_name. CALL FUNCTION 'ABAP4_CALL_TRANSACTION' STARTING NEW TASK 'GIT' EXPORTING tcode = 'SE43' mode_val = 'E' TABLES using_tab = lt_bdcdata EXCEPTIONS system_failure = 1 communication_failure = 2 resource_failure = 3 OTHERS = 4. IF sy-subrc <> 0. zcx_abapgit_exception=>raise( 'error from ABAP4_CALL_TRANSACTION, SHI3' ). ENDIF. ENDMETHOD. METHOD zif_abapgit_object~changed_by. DATA: ls_head TYPE ttree. CALL FUNCTION 'STREE_STRUCTURE_READ' EXPORTING structure_id = mv_tree_id IMPORTING structure_header = ls_head. rv_user = ls_head-luser. ENDMETHOD. METHOD zif_abapgit_object~delete. CONSTANTS lc_activity_delete_06 TYPE activ_auth VALUE '06'. TRY. me->zif_abapgit_object~exists( ). CATCH zcx_abapgit_exception. RETURN. ENDTRY. has_authorization( iv_structure_id = mv_tree_id iv_devclass = ms_item-devclass iv_activity = lc_activity_delete_06 ). is_used( mv_tree_id ). delete_tree_structure( mv_tree_id ). ENDMETHOD. METHOD zif_abapgit_object~deserialize. DATA: ls_msg TYPE hier_mess, ls_head TYPE ttree, lt_titles TYPE TABLE OF ttreet, lt_nodes TYPE TABLE OF hier_iface, lt_texts TYPE TABLE OF hier_texts, lt_refs TYPE TABLE OF hier_ref. io_xml->read( EXPORTING iv_name = 'TREE_HEAD' CHANGING cg_data = ls_head ). io_xml->read( EXPORTING iv_name = 'TREE_TITLES' CHANGING cg_data = lt_titles ). io_xml->read( EXPORTING iv_name = 'TREE_NODES' CHANGING cg_data = lt_nodes ). io_xml->read( EXPORTING iv_name = 'TREE_REFS' CHANGING cg_data = lt_refs ). io_xml->read( EXPORTING iv_name = 'TREE_TEXTS' CHANGING cg_data = lt_texts ). IF zif_abapgit_object~exists( ) = abap_true. zif_abapgit_object~delete( iv_package ). ENDIF. CALL FUNCTION 'STREE_HIERARCHY_SAVE' EXPORTING structure_id = mv_tree_id structure_type = ls_head-type structure_description = space structure_masterlanguage = mv_language structure_responsible = sy-uname development_class = iv_package IMPORTING message = ls_msg TABLES list_of_nodes = lt_nodes list_of_references = lt_refs list_of_texts = lt_texts structure_descriptions = lt_titles EXCEPTIONS no_nodes_given = 1 OTHERS = 2. IF sy-subrc <> 0. zcx_abapgit_exception=>raise( 'Error from STREE_HIERARCHY_SAVE, SHI3' ). ENDIF. ENDMETHOD. METHOD zif_abapgit_object~exists. DATA: ls_msg TYPE hier_mess, ls_header TYPE ttree, ls_tadir TYPE tadir. CALL FUNCTION 'STREE_STRUCTURE_EXIST' EXPORTING structure_id = mv_tree_id do_not_read_devclass = '' IMPORTING message = ls_msg structure_header = ls_header structure_tadir = ls_tadir. rv_bool = boolc( ls_header-id IS NOT INITIAL ). ENDMETHOD. METHOD zif_abapgit_object~get_comparator. RETURN. ENDMETHOD. METHOD zif_abapgit_object~get_deserialize_steps. APPEND zif_abapgit_object=>gc_step_id-abap TO rt_steps. ENDMETHOD. METHOD zif_abapgit_object~get_metadata. rs_metadata = get_metadata( ). ENDMETHOD. METHOD zif_abapgit_object~is_active. rv_active = is_active( ). ENDMETHOD. METHOD zif_abapgit_object~is_locked. rv_is_locked = abap_false. ENDMETHOD. METHOD zif_abapgit_object~jump. DATA: ls_head TYPE ttree. CALL FUNCTION 'STREE_STRUCTURE_READ' EXPORTING structure_id = mv_tree_id IMPORTING structure_header = ls_head. CASE ls_head-type. WHEN 'BMENU'. jump_se43( ). WHEN OTHERS. zcx_abapgit_exception=>raise( |Jump for type { ls_head-type } not implemented| ). ENDCASE. ENDMETHOD. METHOD zif_abapgit_object~serialize. DATA: ls_msg TYPE hier_mess, ls_head TYPE ttree, lt_titles TYPE TABLE OF ttreet, lt_nodes TYPE TABLE OF hier_iface, lt_texts TYPE TABLE OF hier_texts, lt_refs TYPE TABLE OF hier_ref. CALL FUNCTION 'STREE_STRUCTURE_READ' EXPORTING structure_id = mv_tree_id IMPORTING message = ls_msg structure_header = ls_head TABLES description = lt_titles. CALL FUNCTION 'STREE_HIERARCHY_READ' EXPORTING structure_id = mv_tree_id read_also_texts = 'X' all_languages = 'X' IMPORTING message = ls_msg TABLES list_of_nodes = lt_nodes list_of_references = lt_refs list_of_texts = lt_texts. clear_fields( CHANGING cs_head = ls_head ct_nodes = lt_nodes ). io_xml->add( iv_name = 'TREE_HEAD' ig_data = ls_head ). io_xml->add( iv_name = 'TREE_TITLES' ig_data = lt_titles ). io_xml->add( iv_name = 'TREE_NODES' ig_data = lt_nodes ). io_xml->add( iv_name = 'TREE_REFS' ig_data = lt_refs ). io_xml->add( iv_name = 'TREE_TEXTS' ig_data = lt_texts ). ENDMETHOD. ENDCLASS.