mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00
* PINF added, #293 * backport * more backport
This commit is contained in:
parent
ebb3768f05
commit
5a3adbef95
|
@ -3,7 +3,7 @@ REPORT zabapgit LINE-SIZE 100.
|
||||||
* See http://www.abapgit.org
|
* See http://www.abapgit.org
|
||||||
|
|
||||||
CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT
|
CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT
|
||||||
gc_abap_version TYPE string VALUE 'v1.16.3'. "#EC NOTEXT
|
gc_abap_version TYPE string VALUE 'v1.17.0'. "#EC NOTEXT
|
||||||
|
|
||||||
********************************************************************************
|
********************************************************************************
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
|
@ -82,6 +82,7 @@ INCLUDE zabapgit_object_iatu.
|
||||||
INCLUDE zabapgit_object_msag.
|
INCLUDE zabapgit_object_msag.
|
||||||
INCLUDE zabapgit_object_nrob.
|
INCLUDE zabapgit_object_nrob.
|
||||||
INCLUDE zabapgit_object_para.
|
INCLUDE zabapgit_object_para.
|
||||||
|
INCLUDE zabapgit_object_pinf.
|
||||||
INCLUDE zabapgit_object_sfbf.
|
INCLUDE zabapgit_object_sfbf.
|
||||||
INCLUDE zabapgit_object_sfbs.
|
INCLUDE zabapgit_object_sfbs.
|
||||||
INCLUDE zabapgit_object_sfsw.
|
INCLUDE zabapgit_object_sfsw.
|
||||||
|
|
350
src/zabapgit_object_pinf.prog.abap
Normal file
350
src/zabapgit_object_pinf.prog.abap
Normal file
|
@ -0,0 +1,350 @@
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
*& Include ZABAPGIT_OBJECT_PINF
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
* CLASS lcl_object_PINF DEFINITION
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
*
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
CLASS lcl_object_pinf DEFINITION INHERITING FROM lcl_objects_super FINAL.
|
||||||
|
|
||||||
|
PUBLIC SECTION.
|
||||||
|
INTERFACES lif_object.
|
||||||
|
|
||||||
|
PRIVATE SECTION.
|
||||||
|
TYPES: BEGIN OF ty_pinf,
|
||||||
|
attributes TYPE scompidtln,
|
||||||
|
elements TYPE STANDARD TABLE OF scomeldtln WITH DEFAULT KEY,
|
||||||
|
END OF ty_pinf.
|
||||||
|
|
||||||
|
TYPES: ty_elements TYPE STANDARD TABLE OF tpak_package_interf_elem_ref WITH DEFAULT KEY.
|
||||||
|
|
||||||
|
METHODS:
|
||||||
|
create_or_load
|
||||||
|
IMPORTING is_pinf TYPE ty_pinf
|
||||||
|
iv_package TYPE devclass
|
||||||
|
RETURNING VALUE(ri_interface) TYPE REF TO if_package_interface
|
||||||
|
RAISING lcx_exception,
|
||||||
|
delete_elements
|
||||||
|
IMPORTING ii_interface TYPE REF TO if_package_interface
|
||||||
|
RAISING lcx_exception,
|
||||||
|
update_attributes
|
||||||
|
IMPORTING is_pinf TYPE ty_pinf
|
||||||
|
ii_interface TYPE REF TO if_package_interface
|
||||||
|
RAISING lcx_exception,
|
||||||
|
update_elements
|
||||||
|
IMPORTING is_pinf TYPE ty_pinf
|
||||||
|
ii_interface TYPE REF TO if_package_interface
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
ENDCLASS. "lcl_object_PINF DEFINITION
|
||||||
|
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
* CLASS lcl_object_PINF IMPLEMENTATION
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
*
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
CLASS lcl_object_pinf IMPLEMENTATION.
|
||||||
|
|
||||||
|
METHOD lif_object~changed_by.
|
||||||
|
|
||||||
|
SELECT SINGLE changed_by FROM intf INTO rv_user
|
||||||
|
WHERE intf_name = ms_item-obj_name.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
rv_user = c_user_unknown.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object~get_metadata.
|
||||||
|
rs_metadata = get_metadata( ).
|
||||||
|
ENDMETHOD. "lif_object~get_metadata
|
||||||
|
|
||||||
|
METHOD lif_object~exists.
|
||||||
|
|
||||||
|
DATA: lv_intf_name TYPE intf-intf_name.
|
||||||
|
|
||||||
|
|
||||||
|
SELECT SINGLE intf_name FROM intf INTO lv_intf_name
|
||||||
|
WHERE intf_name = ms_item-obj_name.
|
||||||
|
rv_bool = boolc( sy-subrc = 0 ).
|
||||||
|
|
||||||
|
ENDMETHOD. "lif_object~exists
|
||||||
|
|
||||||
|
METHOD lif_object~serialize.
|
||||||
|
|
||||||
|
DATA: ls_pinf TYPE ty_pinf,
|
||||||
|
lv_name TYPE scomifnam,
|
||||||
|
lt_elements TYPE ty_elements,
|
||||||
|
li_interface TYPE REF TO if_package_interface.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <lg_any> TYPE any,
|
||||||
|
<li_element> LIKE LINE OF lt_elements,
|
||||||
|
<ls_element> LIKE LINE OF ls_pinf-elements.
|
||||||
|
|
||||||
|
|
||||||
|
lv_name = ms_item-obj_name.
|
||||||
|
|
||||||
|
cl_package_interface=>load_package_interface(
|
||||||
|
EXPORTING
|
||||||
|
i_package_interface_name = lv_name
|
||||||
|
i_force_reload = abap_true
|
||||||
|
IMPORTING
|
||||||
|
e_package_interface = li_interface ).
|
||||||
|
|
||||||
|
li_interface->get_all_attributes(
|
||||||
|
IMPORTING e_package_interface_data = ls_pinf-attributes ).
|
||||||
|
|
||||||
|
CLEAR: ls_pinf-attributes-pack_name,
|
||||||
|
ls_pinf-attributes-author,
|
||||||
|
ls_pinf-attributes-created_by,
|
||||||
|
ls_pinf-attributes-created_on,
|
||||||
|
ls_pinf-attributes-changed_by,
|
||||||
|
ls_pinf-attributes-changed_on,
|
||||||
|
ls_pinf-attributes-tadir_devc.
|
||||||
|
|
||||||
|
* fields does not exist in older SAP versions
|
||||||
|
ASSIGN COMPONENT 'SW_COMP_LOGICAL_PACKAGE' OF STRUCTURE ls_pinf-attributes TO <lg_any>.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
CLEAR <lg_any>.
|
||||||
|
ENDIF.
|
||||||
|
ASSIGN COMPONENT 'SW_COMP_TADIR_PACKAGE' OF STRUCTURE ls_pinf-attributes TO <lg_any>.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
CLEAR <lg_any>.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
li_interface->get_elements( IMPORTING e_elements = lt_elements ).
|
||||||
|
|
||||||
|
LOOP AT lt_elements ASSIGNING <li_element>.
|
||||||
|
APPEND INITIAL LINE TO ls_pinf-elements ASSIGNING <ls_element>.
|
||||||
|
<li_element>->get_all_attributes( IMPORTING e_element_data = <ls_element> ).
|
||||||
|
CLEAR <ls_element>-elem_pack.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
io_xml->add( ig_data = ls_pinf
|
||||||
|
iv_name = 'PINF' ).
|
||||||
|
|
||||||
|
ENDMETHOD. "serialize
|
||||||
|
|
||||||
|
METHOD lif_object~deserialize.
|
||||||
|
|
||||||
|
DATA: li_interface TYPE REF TO if_package_interface,
|
||||||
|
ls_pinf TYPE ty_pinf.
|
||||||
|
|
||||||
|
|
||||||
|
io_xml->read( EXPORTING iv_name = 'PINF'
|
||||||
|
CHANGING cg_data = ls_pinf ).
|
||||||
|
|
||||||
|
li_interface = create_or_load(
|
||||||
|
is_pinf = ls_pinf
|
||||||
|
iv_package = iv_package ).
|
||||||
|
|
||||||
|
update_attributes(
|
||||||
|
is_pinf = ls_pinf
|
||||||
|
ii_interface = li_interface ).
|
||||||
|
|
||||||
|
update_elements(
|
||||||
|
is_pinf = ls_pinf
|
||||||
|
ii_interface = li_interface ).
|
||||||
|
|
||||||
|
ENDMETHOD. "deserialize
|
||||||
|
|
||||||
|
METHOD update_attributes.
|
||||||
|
|
||||||
|
DATA: ls_sign TYPE scompisign,
|
||||||
|
lv_changeable TYPE flag.
|
||||||
|
|
||||||
|
|
||||||
|
ii_interface->get_changeable( IMPORTING e_changeable = lv_changeable ).
|
||||||
|
IF lv_changeable = abap_false.
|
||||||
|
* at creation the object is already in change mode
|
||||||
|
ii_interface->set_changeable( abap_true ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ls_sign-descript = abap_true.
|
||||||
|
ls_sign-pinftype = abap_true.
|
||||||
|
ls_sign-restricted = abap_true.
|
||||||
|
ls_sign-default_if = abap_true.
|
||||||
|
ls_sign-def_sever = abap_true.
|
||||||
|
ls_sign-acl_flag = abap_true.
|
||||||
|
ls_sign-pifstablty = abap_true.
|
||||||
|
ls_sign-release_status = abap_true.
|
||||||
|
|
||||||
|
ii_interface->set_all_attributes(
|
||||||
|
i_package_interface_data = is_pinf-attributes
|
||||||
|
i_data_sign = ls_sign ).
|
||||||
|
|
||||||
|
* looks like setting "i_suppress_dialog = abap_true" will make
|
||||||
|
* it fail for local($) packages
|
||||||
|
ii_interface->save( ).
|
||||||
|
|
||||||
|
ii_interface->set_changeable( abap_false ).
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD update_elements.
|
||||||
|
|
||||||
|
DATA: lt_existing TYPE ty_elements,
|
||||||
|
lt_add TYPE scomeldata,
|
||||||
|
lv_index TYPE i,
|
||||||
|
lv_found TYPE abap_bool,
|
||||||
|
ls_sign TYPE scomelsign,
|
||||||
|
ls_attr TYPE scomeldtln.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <li_element> LIKE LINE OF lt_existing,
|
||||||
|
<ls_element> LIKE LINE OF is_pinf-elements.
|
||||||
|
|
||||||
|
|
||||||
|
ls_sign-usag_restr = abap_true.
|
||||||
|
ls_sign-stability = abap_true.
|
||||||
|
ls_sign-no_check = abap_true.
|
||||||
|
ls_sign-useastype = abap_true.
|
||||||
|
ls_sign-asforgnkey = abap_true.
|
||||||
|
* ls_sign-deprecation_type = abap_true. backport
|
||||||
|
* ls_sign-replacement_object_type = abap_true. backport
|
||||||
|
* ls_sign-replacement_object_name = abap_true. backport
|
||||||
|
* ls_sign-replacement_subobject_type = abap_true. backport
|
||||||
|
* ls_sign-replacement_subobject_name = abap_true. backport
|
||||||
|
|
||||||
|
ii_interface->set_elements_changeable( abap_true ).
|
||||||
|
|
||||||
|
ii_interface->get_elements( IMPORTING e_elements = lt_existing ).
|
||||||
|
|
||||||
|
LOOP AT is_pinf-elements ASSIGNING <ls_element>.
|
||||||
|
|
||||||
|
lv_found = abap_false.
|
||||||
|
LOOP AT lt_existing ASSIGNING <li_element>.
|
||||||
|
lv_index = sy-tabix.
|
||||||
|
<li_element>->get_all_attributes( IMPORTING e_element_data = ls_attr ).
|
||||||
|
IF <ls_element>-elem_type = ls_attr-elem_type
|
||||||
|
AND <ls_element>-elem_key = ls_attr-elem_key.
|
||||||
|
<li_element>->set_all_attributes(
|
||||||
|
i_element_data = <ls_element>
|
||||||
|
i_data_sign = ls_sign ).
|
||||||
|
lv_found = abap_true.
|
||||||
|
EXIT. " current loop
|
||||||
|
ENDIF.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
IF lv_found = abap_false.
|
||||||
|
APPEND <ls_element> TO lt_add.
|
||||||
|
ENDIF.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ii_interface->add_elements( lt_add ).
|
||||||
|
|
||||||
|
ii_interface->remove_elements( lt_existing ).
|
||||||
|
|
||||||
|
ii_interface->save_elements( ).
|
||||||
|
|
||||||
|
ii_interface->set_elements_changeable( abap_false ).
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD create_or_load.
|
||||||
|
|
||||||
|
IF lif_object~exists( ) = abap_false.
|
||||||
|
cl_package_interface=>create_new_package_interface(
|
||||||
|
EXPORTING
|
||||||
|
i_pkg_interface_name = is_pinf-attributes-intf_name
|
||||||
|
i_publisher_pkg_name = iv_package
|
||||||
|
IMPORTING
|
||||||
|
e_package_interface = ri_interface
|
||||||
|
EXCEPTIONS
|
||||||
|
object_already_existing = 1
|
||||||
|
object_just_created = 2
|
||||||
|
interface_name_invalid = 3
|
||||||
|
unexpected_error = 4
|
||||||
|
OTHERS = 7 ).
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
_raise 'error creating new package interface'.
|
||||||
|
ENDIF.
|
||||||
|
ELSE.
|
||||||
|
cl_package_interface=>load_package_interface(
|
||||||
|
EXPORTING
|
||||||
|
i_package_interface_name = is_pinf-attributes-intf_name
|
||||||
|
i_force_reload = abap_true
|
||||||
|
IMPORTING
|
||||||
|
e_package_interface = ri_interface
|
||||||
|
EXCEPTIONS
|
||||||
|
db_read_error = 1
|
||||||
|
unexpected_error = 2
|
||||||
|
object_not_existing = 3
|
||||||
|
shorttext_not_existing = 4
|
||||||
|
object_locked_and_modified = 5
|
||||||
|
OTHERS = 6 ).
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
_raise 'error loading package interface'.
|
||||||
|
ENDIF.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD delete_elements.
|
||||||
|
|
||||||
|
DATA: lt_elements TYPE ty_elements.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <li_element> LIKE LINE OF lt_elements.
|
||||||
|
|
||||||
|
|
||||||
|
ii_interface->set_elements_changeable( abap_true ).
|
||||||
|
|
||||||
|
ii_interface->get_elements( IMPORTING e_elements = lt_elements ).
|
||||||
|
|
||||||
|
LOOP AT lt_elements ASSIGNING <li_element>.
|
||||||
|
<li_element>->delete( ).
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ii_interface->save_elements( ).
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object~delete.
|
||||||
|
|
||||||
|
DATA: lv_name TYPE scomifnam,
|
||||||
|
li_interface TYPE REF TO if_package_interface.
|
||||||
|
|
||||||
|
|
||||||
|
lv_name = ms_item-obj_name.
|
||||||
|
|
||||||
|
cl_package_interface=>load_package_interface(
|
||||||
|
EXPORTING
|
||||||
|
i_package_interface_name = lv_name
|
||||||
|
IMPORTING
|
||||||
|
e_package_interface = li_interface
|
||||||
|
EXCEPTIONS
|
||||||
|
db_read_error = 1
|
||||||
|
unexpected_error = 2
|
||||||
|
object_not_existing = 3
|
||||||
|
shorttext_not_existing = 4
|
||||||
|
object_locked_and_modified = 5
|
||||||
|
OTHERS = 6 ).
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
_raise 'error loading package interface, delete'.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
* elements must be deleted before the package interface
|
||||||
|
* can be deleted
|
||||||
|
delete_elements( li_interface ).
|
||||||
|
|
||||||
|
li_interface->set_changeable( abap_true ).
|
||||||
|
|
||||||
|
li_interface->delete( ).
|
||||||
|
|
||||||
|
li_interface->save( ).
|
||||||
|
|
||||||
|
ENDMETHOD. "delete
|
||||||
|
|
||||||
|
METHOD lif_object~jump.
|
||||||
|
|
||||||
|
CALL FUNCTION 'RS_TOOL_ACCESS'
|
||||||
|
EXPORTING
|
||||||
|
operation = 'SHOW'
|
||||||
|
object_name = ms_item-obj_name
|
||||||
|
object_type = 'PINF'
|
||||||
|
in_new_window = abap_true.
|
||||||
|
|
||||||
|
ENDMETHOD. "jump
|
||||||
|
|
||||||
|
ENDCLASS. "lcl_object_PINF IMPLEMENTATION
|
48
src/zabapgit_object_pinf.prog.xml
Normal file
48
src/zabapgit_object_pinf.prog.xml
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<PROGDIR>
|
||||||
|
<NAME>ZABAPGIT_OBJECT_PINF</NAME>
|
||||||
|
<STATE>A</STATE>
|
||||||
|
<SQLX/>
|
||||||
|
<EDTX/>
|
||||||
|
<VARCL>X</VARCL>
|
||||||
|
<DBAPL/>
|
||||||
|
<DBNA/>
|
||||||
|
<CLAS/>
|
||||||
|
<TYPE/>
|
||||||
|
<OCCURS/>
|
||||||
|
<SUBC>I</SUBC>
|
||||||
|
<APPL/>
|
||||||
|
<SECU/>
|
||||||
|
<CNAM/>
|
||||||
|
<CDAT>0000-00-00</CDAT>
|
||||||
|
<UNAM/>
|
||||||
|
<UDAT>0000-00-00</UDAT>
|
||||||
|
<VERN/>
|
||||||
|
<LEVL/>
|
||||||
|
<RSTAT/>
|
||||||
|
<RMAND/>
|
||||||
|
<RLOAD>E</RLOAD>
|
||||||
|
<FIXPT/>
|
||||||
|
<SSET/>
|
||||||
|
<SDATE>0000-00-00</SDATE>
|
||||||
|
<STIME/>
|
||||||
|
<IDATE>0000-00-00</IDATE>
|
||||||
|
<ITIME/>
|
||||||
|
<LDBNAME/>
|
||||||
|
<UCCHECK>X</UCCHECK>
|
||||||
|
</PROGDIR>
|
||||||
|
<TPOOL>
|
||||||
|
<item>
|
||||||
|
<ID>R</ID>
|
||||||
|
<KEY/>
|
||||||
|
<ENTRY>Include ZABAPGIT_OBJECT_PINF</ENTRY>
|
||||||
|
<LENGTH>28</LENGTH>
|
||||||
|
<SPLIT/>
|
||||||
|
</item>
|
||||||
|
</TPOOL>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
Loading…
Reference in New Issue
Block a user