New feature: Original system (#6715)

Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
Marc Bernard 2023-12-25 14:04:10 -05:00 committed by GitHub
parent 314caccdd1
commit 543935a160
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 177 additions and 10 deletions

View File

@ -174,6 +174,7 @@
"^cl_srvd_wb_object_data$",
"^cl_wb_object_operator_factory$",
"^cl_wer_const$",
"^cl_xco_",
"^cx_aff_",
"^cx_wb_object_operation_error$",
"^cx_xco_",
@ -188,10 +189,12 @@
"^if_wb_adt_plugin_resource_co$",
"^if_wb_object_data_selection_co$",
"^if_wb_object_operator$",
"^if_xco_",
"^int4$",
"^numc2$",
"^sabp_t_tadir_keys$",
"^sap_bool$",
"^srcsystem$",
"^stringtab$",
"^sychar01$",
"^sychar10$",

View File

@ -149,6 +149,20 @@ CLASS zcl_abapgit_objects DEFINITION
!ct_files TYPE zif_abapgit_git_definitions=>ty_file_signatures_tt
RAISING
zcx_abapgit_exception .
CLASS-METHODS check_original_system
IMPORTING
!it_items TYPE zif_abapgit_definitions=>ty_items_tt
!ii_log TYPE REF TO zif_abapgit_log
!io_dot TYPE REF TO zcl_abapgit_dot_abapgit
RAISING
zcx_abapgit_exception .
CLASS-METHODS update_original_system
IMPORTING
!it_items TYPE zif_abapgit_definitions=>ty_items_tt
!ii_log TYPE REF TO zif_abapgit_log
!io_dot TYPE REF TO zcl_abapgit_dot_abapgit
RAISING
zcx_abapgit_exception .
CLASS-METHODS check_objects_locked
IMPORTING
!it_items TYPE zif_abapgit_definitions=>ty_items_tt
@ -340,6 +354,35 @@ CLASS zcl_abapgit_objects IMPLEMENTATION.
ENDMETHOD.
METHOD check_original_system.
DATA:
lv_srcsystem TYPE tadir-srcsystem,
lv_error TYPE abap_bool.
FIELD-SYMBOLS <ls_item> LIKE LINE OF it_items.
lv_srcsystem = io_dot->get_original_system( ).
IF lv_srcsystem IS INITIAL.
RETURN.
ENDIF.
ii_log->add_info( |>> Checking original system| ).
LOOP AT it_items ASSIGNING <ls_item> WHERE srcsystem <> lv_srcsystem AND srcsystem IS NOT INITIAL.
ii_log->add_error(
iv_msg = |Object belongs to system { <ls_item>-srcsystem }. Can't overwrite it from system { lv_srcsystem }|
is_item = <ls_item> ).
lv_error = abap_true.
ENDLOOP.
IF lv_error = abap_true.
zcx_abapgit_exception=>raise( 'Error trying to overwrite object from different system' ).
ENDIF.
ENDMETHOD.
METHOD class_name.
CONCATENATE 'ZCL_ABAPGIT_OBJECT_' is_item-obj_type INTO rv_class_name.
@ -678,6 +721,12 @@ CLASS zcl_abapgit_objects IMPLEMENTATION.
check_objects_locked( lt_items ).
" Check the original system of all objects to prevent overwritting
check_original_system(
it_items = lt_items
ii_log = ii_log
io_dot = io_repo->get_dot_abapgit( ) ).
lo_i18n_params = zcl_abapgit_i18n_params=>new( is_params = determine_i18n_params(
io_dot = io_repo->get_dot_abapgit( )
iv_main_language_only = io_repo->get_local_settings( )-main_language_only ) ).
@ -792,7 +841,6 @@ CLASS zcl_abapgit_objects IMPLEMENTATION.
io_files = lo_files ).
ENDIF.
CATCH zcx_abapgit_exception INTO lx_exc.
ii_log->add_exception( ix_exc = lx_exc
is_item = ls_item ).
@ -819,6 +867,12 @@ CLASS zcl_abapgit_objects IMPLEMENTATION.
update_package_tree( io_repo->get_package( ) ).
" Set the original system for all updated objects to what's defined in repo settings
update_original_system(
it_items = lt_items
ii_log = ii_log
io_dot = io_repo->get_dot_abapgit( ) ).
zcl_abapgit_factory=>get_default_transport( )->reset( ).
lo_timer->end( abap_true ).
@ -1137,6 +1191,8 @@ CLASS zcl_abapgit_objects IMPLEMENTATION.
ls_item-devclass = <ls_result>-package.
ls_item-obj_type = <ls_result>-obj_type.
ls_item-obj_name = <ls_result>-obj_name.
ls_item-srcsystem = <ls_result>-srcsystem.
ls_item-origlang = <ls_result>-origlang.
INSERT ls_item INTO TABLE rt_items.
ENDLOOP.
@ -1154,6 +1210,8 @@ CLASS zcl_abapgit_objects IMPLEMENTATION.
ls_item-devclass = <ls_tadir>-devclass.
ls_item-obj_type = <ls_tadir>-object.
ls_item-obj_name = <ls_tadir>-obj_name.
ls_item-srcsystem = <ls_tadir>-srcsystem.
ls_item-origlang = <ls_tadir>-masterlang.
INSERT ls_item INTO TABLE rt_items.
ENDLOOP.
@ -1275,6 +1333,72 @@ CLASS zcl_abapgit_objects IMPLEMENTATION.
ENDMETHOD.
METHOD update_original_system.
DATA lv_srcsystem TYPE tadir-srcsystem.
DATA lv_msg TYPE string.
FIELD-SYMBOLS <ls_item> LIKE LINE OF it_items.
lv_srcsystem = io_dot->get_original_system( ).
IF lv_srcsystem IS INITIAL.
RETURN.
ENDIF.
ii_log->add_info( |>> Setting original system| ).
LOOP AT it_items ASSIGNING <ls_item>.
" Local packages are not stored in TADIR
IF <ls_item>-obj_type = 'DEVC' AND <ls_item>-obj_name(1) = '$'.
CONTINUE.
ENDIF.
IF exists( <ls_item> ) = abap_true.
CALL FUNCTION 'TR_TADIR_INTERFACE'
EXPORTING
wi_tadir_pgmid = 'R3TR'
wi_tadir_object = <ls_item>-obj_type
wi_tadir_obj_name = <ls_item>-obj_name
wi_tadir_srcsystem = lv_srcsystem
wi_test_modus = abap_false
EXCEPTIONS
tadir_entry_not_existing = 1
tadir_entry_ill_type = 2
no_systemname = 3
no_systemtype = 4
original_system_conflict = 5
object_reserved_for_devclass = 6
object_exists_global = 7
object_exists_local = 8
object_is_distributed = 9
obj_specification_not_unique = 10
no_authorization_to_delete = 11
devclass_not_existing = 12
simultanious_set_remove_repair = 13
order_missing = 14
no_modification_of_head_syst = 15
pgmid_object_not_allowed = 16
masterlanguage_not_specified = 17
devclass_not_specified = 18
specify_owner_unique = 19
loc_priv_objs_no_repair = 20
gtadir_not_reached = 21
object_locked_for_order = 22
change_of_class_not_allowed = 23
no_change_from_sap_to_tmp = 24
OTHERS = 25.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO lv_msg.
ii_log->add_error(
iv_msg = lv_msg
is_item = <ls_item> ).
ENDIF.
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD update_package_tree.
DATA: lt_packages TYPE zif_abapgit_sap_package=>ty_devclass_tt,

View File

@ -103,6 +103,13 @@ CLASS zcl_abapgit_dot_abapgit DEFINITION
METHODS set_abap_language_version
IMPORTING
!iv_abap_language_version TYPE string .
METHODS get_original_system
RETURNING
VALUE(rv_original_system) TYPE string .
METHODS set_original_system
IMPORTING
!iv_original_system TYPE csequence .
PROTECTED SECTION.
PRIVATE SECTION.
@ -234,6 +241,11 @@ CLASS zcl_abapgit_dot_abapgit IMPLEMENTATION.
ENDMETHOD.
METHOD get_original_system.
rv_original_system = ms_data-original_system.
ENDMETHOD.
METHOD get_requirements.
rt_requirements = ms_data-requirements.
ENDMETHOD.
@ -343,6 +355,11 @@ CLASS zcl_abapgit_dot_abapgit IMPLEMENTATION.
ENDMETHOD.
METHOD set_original_system.
ms_data-original_system = iv_original_system.
ENDMETHOD.
METHOD set_requirements.
ms_data-requirements = it_requirements.
ENDMETHOD.

View File

@ -220,8 +220,8 @@ CLASS zcl_abapgit_repo_status IMPLEMENTATION.
rs_result-obj_type = ls_item-obj_type.
rs_result-obj_name = ls_item-obj_name.
rs_result-package = ls_item-devclass.
rs_result-srcsystem = sy-sysid.
rs_result-origlang = sy-langu.
rs_result-srcsystem = ''.
rs_result-origlang = ''.
READ TABLE it_state_idx INTO ls_file_sig
WITH KEY

View File

@ -21,6 +21,7 @@ INTERFACE zif_abapgit_dot_abapgit PUBLIC.
requirements TYPE ty_requirement_tt,
version_constant TYPE string,
abap_language_version TYPE string,
original_system TYPE tadir-srcsystem,
END OF ty_dot_abapgit .
CONSTANTS:

View File

@ -42,6 +42,7 @@ CLASS zcl_abapgit_gui_page_sett_repo DEFINITION
version_constant TYPE string VALUE 'version_constant',
version_value TYPE string VALUE 'version_value',
abap_langu_vers TYPE string VALUE 'abap_langu_vers',
original_system TYPE string VALUE 'original_system',
END OF c_id.
CONSTANTS:
BEGIN OF c_event,
@ -193,7 +194,13 @@ CLASS zcl_abapgit_gui_page_sett_repo IMPLEMENTATION.
iv_width = '30%'
)->column(
iv_label = 'Minimum Patch'
iv_width = '30%' ).
iv_width = '30%'
)->text(
iv_name = c_id-original_system
iv_label = 'Original System'
iv_upper_case = abap_true
iv_max = 3
iv_hint = 'Sets the source system of objects during deserialize in downstream systems' ).
IF zcl_abapgit_feature=>is_enabled( zcl_abapgit_abap_language_vers=>c_feature_flag ) = abap_true.
ro_form->radio(
@ -332,6 +339,10 @@ CLASS zcl_abapgit_gui_page_sett_repo IMPLEMENTATION.
iv_val = ls_dot-abap_language_version ).
ENDIF.
ro_form_data->set(
iv_key = c_id-original_system
iv_val = ls_dot-original_system ).
ENDMETHOD.
@ -350,6 +361,7 @@ CLASS zcl_abapgit_gui_page_sett_repo IMPLEMENTATION.
lo_dot->set_folder_logic( mo_form_data->get( c_id-folder_logic ) ).
lo_dot->set_starting_folder( mo_form_data->get( c_id-starting_folder ) ).
lo_dot->set_version_constant( mo_form_data->get( c_id-version_constant ) ).
lo_dot->set_original_system( mo_form_data->get( c_id-original_system ) ).
IF zcl_abapgit_feature=>is_enabled( zcl_abapgit_abap_language_vers=>c_feature_flag ) = abap_true.
lo_dot->set_abap_language_version( mo_form_data->get( c_id-abap_langu_vers ) ).
@ -406,6 +418,8 @@ CLASS zcl_abapgit_gui_page_sett_repo IMPLEMENTATION.
METHOD validate_form.
CONSTANTS lc_allowed(36) TYPE c VALUE 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'.
DATA:
lt_lang_list TYPE zif_abapgit_definitions=>ty_languages,
lv_folder TYPE string,
@ -414,6 +428,7 @@ CLASS zcl_abapgit_gui_page_sett_repo IMPLEMENTATION.
lv_min_release TYPE zif_abapgit_dot_abapgit=>ty_requirement-min_release,
lv_min_patch TYPE zif_abapgit_dot_abapgit=>ty_requirement-min_patch,
lv_version_constant TYPE string,
lv_original_system TYPE string,
lx_exception TYPE REF TO zcx_abapgit_exception.
ro_validation_log = zcl_abapgit_html_form_utils=>create( mo_form )->validate( io_form_data ).
@ -470,6 +485,13 @@ CLASS zcl_abapgit_gui_page_sett_repo IMPLEMENTATION.
iv_val = 'LXE approach requires a non-empty list of languages' ).
ENDIF.
lv_original_system = io_form_data->get( c_id-original_system ).
IF lv_original_system CN lc_allowed.
ro_validation_log->set(
iv_key = c_id-original_system
iv_val = 'System name must be alphanumerical' ).
ENDIF.
ENDMETHOD.