From 1ca9a40d6711c42233336e27afe1aa34446cce19 Mon Sep 17 00:00:00 2001 From: Marc Bernard <59966492+mbtools@users.noreply.github.com> Date: Fri, 10 Feb 2023 18:55:21 +0100 Subject: [PATCH] SHIx: Fix application component hierarchy issues (#6065) --- src/objects/zcl_abapgit_object_shi3.clas.abap | 86 ++++++++++++++++--- src/objects/zcl_abapgit_object_shi5.clas.abap | 84 +++++++++++++++--- 2 files changed, 147 insertions(+), 23 deletions(-) diff --git a/src/objects/zcl_abapgit_object_shi3.clas.abap b/src/objects/zcl_abapgit_object_shi3.clas.abap index 675a670af..6c1e0c291 100644 --- a/src/objects/zcl_abapgit_object_shi3.clas.abap +++ b/src/objects/zcl_abapgit_object_shi3.clas.abap @@ -25,18 +25,24 @@ CLASS zcl_abapgit_object_shi3 DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje IMPORTING !iv_structure_id TYPE hier_guid . PRIVATE SECTION. - DATA: mv_tree_id TYPE ttree-id. + DATA mv_tree_id TYPE ttree-id. + + METHODS insert_transport + IMPORTING + !iv_transport TYPE trkorr + RAISING + zcx_abapgit_exception. METHODS jump_se43 - RAISING zcx_abapgit_exception. - + RAISING + zcx_abapgit_exception. METHODS jump_sbach04 - RAISING zcx_abapgit_exception. - + RAISING + zcx_abapgit_exception. METHODS clear_fields - CHANGING cs_head TYPE ttree - ct_nodes TYPE hier_iface_t. - + CHANGING + !cs_head TYPE ttree + !ct_nodes TYPE hier_iface_t. ENDCLASS. @@ -93,6 +99,53 @@ CLASS zcl_abapgit_object_shi3 IMPLEMENTATION. ENDMETHOD. + METHOD insert_transport. + + DATA: + ls_msg TYPE hier_mess, + ls_object TYPE e071, + lt_objects TYPE TABLE OF e071, + lt_keys TYPE TABLE OF e071k, + ls_ko200 TYPE ko200, + lt_ko200 TYPE TABLE OF ko200. + + " This function shows a popup so get objects and keys and insert + " them into transport below + CALL FUNCTION 'STREE_INSERT_ALL_IN_TRANSPORT' + EXPORTING + structure_id = mv_tree_id + iv_return_objects_and_keys = abap_true + IMPORTING + message = ls_msg + TABLES + et_objects = lt_objects + et_keys = lt_keys. + IF ls_msg-msgty = 'E'. + MESSAGE ID ls_msg-msgid TYPE ls_msg-msgty NUMBER ls_msg-msgno + WITH ls_msg-msgv1 ls_msg-msgv2 ls_msg-msgv3 ls_msg-msgv4 INTO zcx_abapgit_exception=>null. + zcx_abapgit_exception=>raise_t100( ). + ENDIF. + + LOOP AT lt_objects INTO ls_object. + MOVE-CORRESPONDING ls_object TO ls_ko200. + INSERT ls_ko200 INTO TABLE lt_ko200. + ENDLOOP. + + CALL FUNCTION 'TR_RECORD_OBJ_CHANGE_TO_REQ' + EXPORTING + iv_request = iv_transport + it_objects = lt_ko200 + it_keys = lt_keys + EXCEPTIONS + cancel = 1 + OTHERS = 2. + IF sy-subrc <> 0. + zcx_abapgit_exception=>raise_t100( ). + ENDIF. + + ENDMETHOD. + + METHOD is_used. DATA: lt_used_in_structures TYPE STANDARD TABLE OF ttree WITH DEFAULT KEY. @@ -247,6 +300,10 @@ CLASS zcl_abapgit_object_shi3 IMPLEMENTATION. OTHERS = 2. IF sy-subrc <> 0. zcx_abapgit_exception=>raise_t100( ). + ELSEIF ls_msg-msgty = 'E'. + MESSAGE ID ls_msg-msgid TYPE ls_msg-msgty NUMBER ls_msg-msgno + WITH ls_msg-msgv1 ls_msg-msgv2 ls_msg-msgv3 ls_msg-msgv4 INTO zcx_abapgit_exception=>null. + zcx_abapgit_exception=>raise_t100( ). ENDIF. " Set buffer mode for menus (see function BMENU_CREATE_TREE) @@ -258,6 +315,11 @@ CLASS zcl_abapgit_object_shi3 IMPLEMENTATION. MODIFY ttree FROM ls_ttree. ENDIF. + IF zcl_abapgit_factory=>get_sap_package( iv_package )->are_changes_recorded_in_tr_req( ) = abap_true. + " Add necessary SHI6, SHI7, and TABU entries to transport (SAP Note 455542) + insert_transport( iv_transport ). + ENDIF. + ENDMETHOD. @@ -338,7 +400,6 @@ CLASS zcl_abapgit_object_shi3 IMPLEMENTATION. lt_nodes TYPE TABLE OF hier_iface, lt_texts TYPE TABLE OF hier_texts, lt_refs TYPE TABLE OF hier_ref, - lv_language TYPE spras, lv_all_languages TYPE abap_bool. @@ -356,16 +417,15 @@ CLASS zcl_abapgit_object_shi3 IMPLEMENTATION. IF io_xml->i18n_params( )-main_language_only = abap_false. lv_all_languages = abap_true. ELSE. - lv_language = mv_language. - DELETE lt_titles WHERE spras <> lv_language. + DELETE lt_titles WHERE spras <> mv_language. ENDIF. CALL FUNCTION 'STREE_HIERARCHY_READ' EXPORTING structure_id = mv_tree_id - read_also_texts = 'X' + read_also_texts = abap_true all_languages = lv_all_languages - language = lv_language + language = mv_language IMPORTING message = ls_msg TABLES diff --git a/src/objects/zcl_abapgit_object_shi5.clas.abap b/src/objects/zcl_abapgit_object_shi5.clas.abap index 71fa090e6..ddde20d7d 100644 --- a/src/objects/zcl_abapgit_object_shi5.clas.abap +++ b/src/objects/zcl_abapgit_object_shi5.clas.abap @@ -43,22 +43,86 @@ CLASS zcl_abapgit_object_shi5 IMPLEMENTATION. METHOD zif_abapgit_object~delete. - DATA: ls_message TYPE hier_mess, - lv_deletion_successful TYPE hier_yesno. + DATA: + ls_msg TYPE hier_mess, + lv_found_users TYPE hier_yesno, + ls_check_extensions TYPE treenamesp, + lt_check_extensions TYPE TABLE OF treenamesp, + lv_obj_name TYPE ko200-obj_name. - corr_insert( iv_package ). + " STREE_EXTENSION_DELETE shows a popup so do the same here - CALL FUNCTION 'STREE_EXTENSION_DELETE' - EXPORTING - extension = mv_extension + ls_check_extensions-extension = mv_extension. + INSERT ls_check_extensions INTO TABLE lt_check_extensions. + + CALL FUNCTION 'STREE_CHECK_EXTENSION' IMPORTING - message = ls_message - deletion_successful = lv_deletion_successful. + message = ls_msg + TABLES + check_extension = lt_check_extensions. - IF lv_deletion_successful = abap_false. - zcx_abapgit_exception=>raise( ls_message-msgtxt ). + READ TABLE lt_check_extensions INTO ls_check_extensions INDEX 1. + IF ls_check_extensions-original = abap_false. + zcx_abapgit_exception=>raise( 'Delete enhancement ID in your source system' ). ENDIF. + lv_obj_name = mv_extension. + + CALL FUNCTION 'STREE_TRANSPORT_CHECK' + EXPORTING + object = 'SHI5' + obj_name = lv_obj_name + IMPORTING + message = ls_msg. + + IF ls_msg-msgty = 'E'. + MESSAGE ID ls_msg-msgid TYPE ls_msg-msgty NUMBER ls_msg-msgno + WITH ls_msg-msgv1 ls_msg-msgv2 ls_msg-msgv3 ls_msg-msgv4 INTO zcx_abapgit_exception=>null. + zcx_abapgit_exception=>raise_t100( ). + ENDIF. + + CALL FUNCTION 'STREE_EXTENSION_USAGE' + EXPORTING + extension = mv_extension + no_display = abap_true + IMPORTING + message = ls_msg + extension_is_used = lv_found_users. + + IF ls_msg-msgty = 'E'. + MESSAGE ID ls_msg-msgid TYPE ls_msg-msgty NUMBER ls_msg-msgno + WITH ls_msg-msgv1 ls_msg-msgv2 ls_msg-msgv3 ls_msg-msgv4 INTO zcx_abapgit_exception=>null. + zcx_abapgit_exception=>raise_t100( ). + ENDIF. + + IF lv_found_users = abap_true. + zcx_abapgit_exception=>raise( 'Enhancement ID is still used' ). + ENDIF. + + CALL FUNCTION 'STREE_TRANSPORT_INSERT' + EXPORTING + object = 'SHI5' + obj_name = lv_obj_name + IMPORTING + message = ls_msg. + + IF ls_msg-msgty = 'E'. + MESSAGE ID ls_msg-msgid TYPE ls_msg-msgty NUMBER ls_msg-msgno + WITH ls_msg-msgv1 ls_msg-msgv2 ls_msg-msgv3 ls_msg-msgv4 INTO zcx_abapgit_exception=>null. + zcx_abapgit_exception=>raise_t100( ). + ENDIF. + + DELETE FROM ttree_ext WHERE extension = mv_extension. + DELETE FROM ttree_extt WHERE extension = mv_extension. + + IF ls_check_extensions-transport = abap_false. + " no transportable Devclass -> delete TADIR + tadir_delete( ). + ENDIF. + + " reset some internal tables + CALL FUNCTION 'STREE_RESET_FUGR_SHI5_TABLES'. + ENDMETHOD.