mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 04:08:27 +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
|
||||
|
||||
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)
|
||||
|
@ -82,6 +82,7 @@ INCLUDE zabapgit_object_iatu.
|
|||
INCLUDE zabapgit_object_msag.
|
||||
INCLUDE zabapgit_object_nrob.
|
||||
INCLUDE zabapgit_object_para.
|
||||
INCLUDE zabapgit_object_pinf.
|
||||
INCLUDE zabapgit_object_sfbf.
|
||||
INCLUDE zabapgit_object_sfbs.
|
||||
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