*&---------------------------------------------------------------------* *& Include ZABAPGIT_OBJECT_SHI3 *&---------------------------------------------------------------------* *----------------------------------------------------------------------* * CLASS lcl_object_shi3 DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_shi3 DEFINITION INHERITING FROM lcl_objects_super FINAL. PUBLIC SECTION. INTERFACES lif_object. ALIASES mo_files FOR lif_object~mo_files. METHODS constructor IMPORTING is_item TYPE zif_abapgit_definitions=>ty_item iv_language TYPE spras. 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. "lcl_object_shi3 DEFINITION *----------------------------------------------------------------------* * CLASS lcl_object_shi3 IMPLEMENTATION *----------------------------------------------------------------------* CLASS lcl_object_shi3 IMPLEMENTATION. METHOD lif_object~has_changed_since. rv_changed = abap_true. ENDMETHOD. "lif_object~has_changed_since METHOD lif_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 constructor. super->constructor( is_item = is_item iv_language = iv_language ). mv_tree_id = ms_item-obj_name. ENDMETHOD. "constructor METHOD lif_object~get_metadata. rs_metadata = get_metadata( ). ENDMETHOD. "lif_object~get_metadata 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. "jump_se43 METHOD lif_object~jump. jump_se43( ). ENDMETHOD. "jump METHOD lif_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. "lif_object~exists METHOD lif_object~delete. CALL FUNCTION 'BMENU_DELETE_TREE' EXPORTING tree_id = mv_tree_id EXCEPTIONS trees_do_not_exist = 1 no_authority = 2 canceled = 3 OTHERS = 4. IF sy-subrc <> 0. zcx_abapgit_exception=>raise( 'error from BMENU_DELETE_TREE, SHI3' ). ENDIF. ENDMETHOD. "delete METHOD lif_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. "serialize 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. "strip_stamps METHOD lif_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 lif_object~exists( ) = abap_true. lif_object~delete( ). ENDIF. CALL FUNCTION 'STREE_HIERARCHY_SAVE' EXPORTING structure_id = mv_tree_id structure_type = 'BMENU' 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. "deserialize METHOD lif_object~compare_to_remote_version. CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_shi3 IMPLEMENTATION