mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00
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:
parent
eaeba0f1cb
commit
6a84341a27
|
@ -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.
|
||||||
|
|
||||||
|
|
|
@ -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.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user