PINF: Fix error when changing packages (#5560)

- Set parent package for package interface elements
- Raise error in case of mismatched packages
This commit is contained in:
Marc Bernard 2022-05-19 10:47:15 +02:00 committed by GitHub
parent eaeba0f1cb
commit 6a84341a27
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 9 deletions

View File

@ -36,8 +36,9 @@ CLASS zcl_abapgit_object_pinf DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
zcx_abapgit_exception . zcx_abapgit_exception .
METHODS update_elements METHODS update_elements
IMPORTING IMPORTING
is_pinf TYPE ty_pinf !iv_package TYPE devclass
ii_interface TYPE REF TO lif_package_interface_facade !is_pinf TYPE ty_pinf
!ii_interface TYPE REF TO lif_package_interface_facade
RAISING RAISING
zcx_abapgit_exception . zcx_abapgit_exception .
METHODS load METHODS load
@ -185,33 +186,34 @@ CLASS zcl_abapgit_object_pinf IMPLEMENTATION.
METHOD update_elements. METHOD update_elements.
DATA: lt_existing TYPE ty_elements, DATA: lt_existing TYPE ty_elements,
ls_element LIKE LINE OF is_pinf-elements,
lt_add TYPE scomeldata, lt_add TYPE scomeldata,
lv_index TYPE i, lv_index TYPE i,
lv_found TYPE abap_bool, lv_found TYPE abap_bool,
ls_attr TYPE scomeldtln. ls_attr TYPE scomeldtln.
FIELD-SYMBOLS: <li_element> LIKE LINE OF lt_existing, FIELD-SYMBOLS <li_element> LIKE LINE OF lt_existing.
<ls_element> LIKE LINE OF is_pinf-elements.
ii_interface->set_elements_changeable( abap_true ). ii_interface->set_elements_changeable( abap_true ).
lt_existing = ii_interface->get_elements( ). lt_existing = ii_interface->get_elements( ).
LOOP AT is_pinf-elements ASSIGNING <ls_element>. LOOP AT is_pinf-elements INTO ls_element.
lv_found = abap_false. lv_found = abap_false.
LOOP AT lt_existing ASSIGNING <li_element>. LOOP AT lt_existing ASSIGNING <li_element>.
lv_index = sy-tabix. lv_index = sy-tabix.
<li_element>->get_all_attributes( IMPORTING e_element_data = ls_attr ). <li_element>->get_all_attributes( IMPORTING e_element_data = ls_attr ).
IF <ls_element>-elem_type = ls_attr-elem_type IF ls_element-elem_type = ls_attr-elem_type
AND <ls_element>-elem_key = ls_attr-elem_key. AND ls_element-elem_key = ls_attr-elem_key.
DELETE lt_existing INDEX lv_index. DELETE lt_existing INDEX lv_index.
CONTINUE. " current loop CONTINUE. " current loop
ENDIF. ENDIF.
ENDLOOP. ENDLOOP.
IF lv_found = abap_false. IF lv_found = abap_false.
APPEND <ls_element> TO lt_add. ls_element-elem_pack = iv_package.
APPEND ls_element TO lt_add.
ENDIF. ENDIF.
ENDLOOP. ENDLOOP.
@ -280,6 +282,7 @@ CLASS zcl_abapgit_object_pinf IMPLEMENTATION.
ii_interface = li_interface ). ii_interface = li_interface ).
update_elements( update_elements(
iv_package = iv_package
is_pinf = ls_pinf is_pinf = ls_pinf
ii_interface = li_interface ). ii_interface = li_interface ).
@ -358,7 +361,8 @@ CLASS zcl_abapgit_object_pinf IMPLEMENTATION.
ls_pinf-attributes = li_interface->get_all_attributes( ). ls_pinf-attributes = li_interface->get_all_attributes( ).
"Delete the package name if it comes from the same package "Delete the package name if it comes from the same package
IF ls_pinf-attributes-tadir_devc = ls_pinf-attributes-pack_name. IF ls_pinf-attributes-tadir_devc = ls_pinf-attributes-pack_name OR
ms_item-devclass = ls_pinf-attributes-pack_name.
CLEAR ls_pinf-attributes-pack_name. CLEAR ls_pinf-attributes-pack_name.
ENDIF. ENDIF.

View File

@ -158,9 +158,15 @@ CLASS lcl_package_interface_facade IMPLEMENTATION.
METHOD lif_package_interface_facade~add_elements. METHOD lif_package_interface_facade~add_elements.
DATA:
lt_mismatched TYPE scomeldata,
ls_mismatched LIKE LINE OF lt_mismatched.
mi_interface->add_elements( mi_interface->add_elements(
EXPORTING EXPORTING
i_elements_data = it_elements_data i_elements_data = it_elements_data
IMPORTING
e_mismatched_elem_data = lt_mismatched
EXCEPTIONS EXCEPTIONS
object_invalid = 1 object_invalid = 1
intern_err = 2 intern_err = 2
@ -170,6 +176,11 @@ CLASS lcl_package_interface_facade IMPLEMENTATION.
zcx_abapgit_exception=>raise_t100( ). zcx_abapgit_exception=>raise_t100( ).
ENDIF. ENDIF.
LOOP AT lt_mismatched INTO ls_mismatched.
zcx_abapgit_exception=>raise( |Object { ls_mismatched-elem_type } { ls_mismatched-elem_key } | &&
|from different package { ls_mismatched-elem_pack }| ).
ENDLOOP.
ENDMETHOD. ENDMETHOD.
METHOD lif_package_interface_facade~set_all_attributes. METHOD lif_package_interface_facade~set_all_attributes.