mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-03 13:26:12 +08:00

CI tests have shown that several object types are not properly recorded in transports. For some objects there was no transport entry when creating the objects, for others when deleting it. This PR add the necessary calls to `corr_insert()`. (some SE80 reorders) Co-authored-by: Lars Hvam <larshp@hotmail.com>
360 lines
9.7 KiB
ABAP
360 lines
9.7 KiB
ABAP
CLASS zcl_abapgit_object_sush DEFINITION
|
|
PUBLIC
|
|
INHERITING FROM zcl_abapgit_objects_super
|
|
FINAL
|
|
CREATE PUBLIC .
|
|
|
|
PUBLIC SECTION.
|
|
|
|
INTERFACES zif_abapgit_object .
|
|
|
|
ALIASES mo_files
|
|
FOR zif_abapgit_object~mo_files .
|
|
METHODS constructor
|
|
IMPORTING
|
|
is_item TYPE zif_abapgit_definitions=>ty_item
|
|
iv_language TYPE spras
|
|
RAISING
|
|
zcx_abapgit_exception.
|
|
|
|
PROTECTED SECTION.
|
|
|
|
PRIVATE SECTION.
|
|
METHODS clear_metadata
|
|
CHANGING
|
|
cs_data_head TYPE any
|
|
ct_usobx TYPE table
|
|
ct_usobt TYPE table
|
|
ct_usobx_ext TYPE table
|
|
ct_usobt_ext TYPE table.
|
|
|
|
ENDCLASS.
|
|
|
|
|
|
|
|
CLASS zcl_abapgit_object_sush IMPLEMENTATION.
|
|
|
|
|
|
METHOD clear_metadata.
|
|
|
|
DATA:
|
|
BEGIN OF ls_empty_metadata,
|
|
modifier TYPE c LENGTH 12, " usob_sm-modifier
|
|
moddate TYPE d, " usob_sm-moddate,
|
|
modtime TYPE t, " usob_sm-modtime,
|
|
srcsystem TYPE tadir-srcsystem,
|
|
author TYPE tadir-author,
|
|
devclass TYPE tadir-devclass,
|
|
END OF ls_empty_metadata.
|
|
|
|
FIELD-SYMBOLS:
|
|
<ls_usobx> TYPE any,
|
|
<ls_usbot> TYPE any,
|
|
<ls_usobt_ext> TYPE any,
|
|
<ls_usobx_ext> TYPE any.
|
|
|
|
MOVE-CORRESPONDING ls_empty_metadata TO cs_data_head.
|
|
|
|
LOOP AT ct_usobx ASSIGNING <ls_usobx>.
|
|
MOVE-CORRESPONDING ls_empty_metadata TO <ls_usobx>.
|
|
ENDLOOP.
|
|
|
|
LOOP AT ct_usobt ASSIGNING <ls_usbot>.
|
|
MOVE-CORRESPONDING ls_empty_metadata TO <ls_usbot>.
|
|
ENDLOOP.
|
|
|
|
LOOP AT ct_usobt_ext ASSIGNING <ls_usobt_ext>.
|
|
MOVE-CORRESPONDING ls_empty_metadata TO <ls_usobt_ext>.
|
|
ENDLOOP.
|
|
|
|
LOOP AT ct_usobx_ext ASSIGNING <ls_usobx_ext>.
|
|
MOVE-CORRESPONDING ls_empty_metadata TO <ls_usobx_ext>.
|
|
ENDLOOP.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD constructor.
|
|
|
|
DATA: lr_data_head TYPE REF TO data.
|
|
|
|
super->constructor(
|
|
is_item = is_item
|
|
iv_language = iv_language ).
|
|
|
|
TRY.
|
|
CREATE DATA lr_data_head TYPE ('IF_SU22_ADT_OBJECT=>TS_SU2X_HEAD').
|
|
|
|
CATCH cx_sy_create_data_error.
|
|
zcx_abapgit_exception=>raise( |SUSH is not supported in your release| ).
|
|
ENDTRY.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~changed_by.
|
|
DATA ls_key TYPE usobkey.
|
|
|
|
ls_key = ms_item-obj_name.
|
|
|
|
SELECT SINGLE modifier FROM usob_sm INTO rv_user
|
|
WHERE name = ls_key-name AND type = ls_key-type.
|
|
IF sy-subrc <> 0.
|
|
rv_user = c_user_unknown.
|
|
ENDIF.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~delete.
|
|
DATA:
|
|
lo_su22 TYPE REF TO object,
|
|
ls_key TYPE usobkey,
|
|
lx_err TYPE REF TO cx_static_check.
|
|
|
|
ASSERT NOT ms_item-obj_name IS INITIAL.
|
|
|
|
ls_key = ms_item-obj_name.
|
|
|
|
TRY.
|
|
CREATE OBJECT lo_su22 TYPE ('CL_SU22_ADT_OBJECT').
|
|
|
|
CALL METHOD lo_su22->('IF_SU22_ADT_OBJECT~DELETE')
|
|
EXPORTING
|
|
iv_key = ls_key
|
|
iv_cleanup = abap_true.
|
|
CATCH cx_static_check INTO lx_err.
|
|
zcx_abapgit_exception=>raise_with_text( lx_err ).
|
|
ENDTRY.
|
|
|
|
corr_insert( iv_package ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~deserialize.
|
|
|
|
DATA:
|
|
ls_key TYPE usobkey,
|
|
lo_su22 TYPE REF TO object,
|
|
lo_appl TYPE REF TO object,
|
|
lt_usobx TYPE usobx_t,
|
|
lt_usobt TYPE usobt_t,
|
|
lr_appl_head TYPE REF TO data,
|
|
lr_data_head TYPE REF TO data,
|
|
lr_data_usobx_ext TYPE REF TO data,
|
|
lr_data_usobt_ext TYPE REF TO data,
|
|
lx_err TYPE REF TO cx_static_check,
|
|
lv_text TYPE string.
|
|
|
|
FIELD-SYMBOLS: <ls_data_head> TYPE any,
|
|
<ls_appl_head> TYPE any,
|
|
<lt_data_usobx_ext> TYPE ANY TABLE,
|
|
<lt_data_usobt_ext> TYPE ANY TABLE,
|
|
<ls_devclass> TYPE any.
|
|
|
|
ASSERT NOT ms_item-obj_name IS INITIAL.
|
|
|
|
TRY.
|
|
CREATE DATA lr_data_head TYPE ('IF_SU22_ADT_OBJECT=>TS_SU2X_HEAD').
|
|
ASSIGN lr_data_head->* TO <ls_data_head>.
|
|
|
|
CREATE DATA lr_data_usobx_ext TYPE ('IF_SU22_ADT_OBJECT=>TT_SU2X_X').
|
|
ASSIGN lr_data_usobx_ext->* TO <lt_data_usobx_ext>.
|
|
|
|
CREATE DATA lr_data_usobt_ext TYPE ('IF_SU22_ADT_OBJECT=>TT_SU2X_T').
|
|
ASSIGN lr_data_usobt_ext->* TO <lt_data_usobt_ext>.
|
|
|
|
"HEAD
|
|
io_xml->read( EXPORTING iv_name = 'HEAD'
|
|
CHANGING cg_data = <ls_data_head> ).
|
|
|
|
"USOBX
|
|
io_xml->read( EXPORTING iv_name = 'USOBX'
|
|
CHANGING cg_data = lt_usobx ).
|
|
|
|
"USOBT
|
|
io_xml->read( EXPORTING iv_name = 'USOBT'
|
|
CHANGING cg_data = lt_usobt ).
|
|
|
|
"USOBX_EXT
|
|
io_xml->read( EXPORTING iv_name = 'USOBX_EXT'
|
|
CHANGING cg_data = <lt_data_usobx_ext> ).
|
|
|
|
"USOBT_EXT
|
|
io_xml->read( EXPORTING iv_name = 'USOBT_EXT'
|
|
CHANGING cg_data = <lt_data_usobt_ext> ).
|
|
|
|
CREATE OBJECT lo_su22
|
|
TYPE ('CL_SU22_ADT_OBJECT').
|
|
|
|
" check if lead application exists
|
|
TRY.
|
|
CALL METHOD lo_su22->('IF_SU22_ADT_OBJECT~CHECK')
|
|
EXPORTING
|
|
id_mode = '02'
|
|
CHANGING
|
|
cs_head = <ls_data_head>.
|
|
CATCH cx_static_check INTO lx_err.
|
|
lv_text = |Lead application of object { ms_item-obj_name } does not exist|.
|
|
zcx_abapgit_exception=>raise( lv_text ).
|
|
ENDTRY.
|
|
|
|
MOVE-CORRESPONDING <ls_data_head> TO ls_key.
|
|
CREATE DATA lr_appl_head TYPE ('CL_SU2X=>TS_HEAD').
|
|
ASSIGN lr_appl_head->* TO <ls_appl_head>.
|
|
|
|
CREATE OBJECT lo_appl TYPE ('CL_SU22_APPL').
|
|
|
|
CALL METHOD lo_appl->('GET_DATA')
|
|
EXPORTING
|
|
is_key = ls_key
|
|
IMPORTING
|
|
es_head = <ls_appl_head>.
|
|
|
|
ASSIGN COMPONENT 'DEVCLASS' OF STRUCTURE <ls_appl_head> TO <ls_devclass>.
|
|
IF <ls_devclass> <> iv_package.
|
|
lv_text =
|
|
|Lead application of object { ms_item-obj_name } does not exist in package { <ls_devclass> }|.
|
|
zcx_abapgit_exception=>raise( lv_text ).
|
|
ENDIF.
|
|
|
|
TRY.
|
|
CALL METHOD lo_su22->('IF_SU22_ADT_OBJECT~UPDATE')
|
|
EXPORTING
|
|
is_head = <ls_data_head>
|
|
it_usobx = lt_usobx
|
|
it_usobt = lt_usobt.
|
|
CATCH cx_static_check INTO lx_err.
|
|
zcx_abapgit_exception=>raise_with_text( lx_err ).
|
|
ENDTRY.
|
|
|
|
corr_insert( iv_package ).
|
|
|
|
CATCH cx_static_check INTO lx_err.
|
|
zcx_abapgit_exception=>raise_with_text( lx_err ).
|
|
ENDTRY.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~exists.
|
|
DATA: ls_usobhash TYPE usobhash.
|
|
|
|
SELECT SINGLE * FROM usobhash INTO ls_usobhash "#EC CI_ALL_FIELDS_NEEDED
|
|
WHERE name = ms_item-obj_name. "#EC CI_SGLSELECT
|
|
|
|
rv_bool = boolc( sy-subrc = 0 ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~get_comparator.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~get_deserialize_steps.
|
|
APPEND zif_abapgit_object=>gc_step_id-abap TO rt_steps.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~get_metadata.
|
|
rs_metadata = get_metadata( ).
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~is_active.
|
|
rv_active = is_active( ).
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~is_locked.
|
|
rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'E_USOBX'
|
|
iv_argument = |{ ms_item-obj_type }{ ms_item-obj_name }| ).
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~jump.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~serialize.
|
|
|
|
DATA:
|
|
ls_key TYPE usobkey,
|
|
lo_su22 TYPE REF TO object,
|
|
lt_usobx TYPE usobx_t,
|
|
lt_usobt TYPE usobt_t,
|
|
lr_head TYPE REF TO data,
|
|
lr_usobx_ext TYPE REF TO data,
|
|
lr_usobt_ext TYPE REF TO data,
|
|
lx_err TYPE REF TO cx_static_check.
|
|
|
|
|
|
FIELD-SYMBOLS: <ls_head> TYPE any,
|
|
<lt_usobx_ext> TYPE ANY TABLE,
|
|
<lt_usobt_ext> TYPE ANY TABLE.
|
|
|
|
ls_key = ms_item-obj_name.
|
|
|
|
TRY.
|
|
CREATE DATA lr_head TYPE ('IF_SU22_ADT_OBJECT=>TS_SU2X_HEAD').
|
|
ASSIGN lr_head->* TO <ls_head>.
|
|
|
|
CREATE DATA lr_usobx_ext TYPE ('IF_SU22_ADT_OBJECT=>TT_SU2X_X').
|
|
ASSIGN lr_usobx_ext->* TO <lt_usobx_ext>.
|
|
|
|
CREATE DATA lr_usobt_ext TYPE ('IF_SU22_ADT_OBJECT=>TT_SU2X_T').
|
|
ASSIGN lr_usobt_ext->* TO <lt_usobt_ext>.
|
|
|
|
CREATE OBJECT lo_su22
|
|
TYPE ('CL_SU22_ADT_OBJECT').
|
|
|
|
TRY.
|
|
CALL METHOD lo_su22->('IF_SU22_ADT_OBJECT~SELECT')
|
|
EXPORTING
|
|
iv_key = ls_key
|
|
IMPORTING
|
|
es_head = <ls_head>
|
|
et_usobx = lt_usobx
|
|
et_usobt = lt_usobt
|
|
et_usobx_ext = <lt_usobx_ext>
|
|
et_usobt_ext = <lt_usobt_ext>.
|
|
CATCH cx_static_check INTO lx_err.
|
|
zcx_abapgit_exception=>raise_with_text( lx_err ).
|
|
ENDTRY.
|
|
|
|
clear_metadata(
|
|
CHANGING
|
|
cs_data_head = <ls_head>
|
|
ct_usobx = lt_usobx
|
|
ct_usobt = lt_usobt
|
|
ct_usobx_ext = <lt_usobx_ext>
|
|
ct_usobt_ext = <lt_usobt_ext> ).
|
|
|
|
"HEAD
|
|
io_xml->add( iv_name = 'HEAD'
|
|
ig_data = <ls_head> ).
|
|
|
|
"USOBX
|
|
io_xml->add( iv_name = 'USOBX'
|
|
ig_data = lt_usobx ).
|
|
|
|
"USOBT
|
|
io_xml->add( iv_name = 'USOBT'
|
|
ig_data = lt_usobt ).
|
|
|
|
"USOBX_EXT
|
|
io_xml->add( iv_name = 'USOBX_EXT'
|
|
ig_data = <lt_usobx_ext> ).
|
|
|
|
"USOBT_EXT
|
|
io_xml->add( iv_name = 'USOBT_EXT'
|
|
ig_data = <lt_usobt_ext> ).
|
|
|
|
CATCH cx_static_check INTO lx_err.
|
|
zcx_abapgit_exception=>raise_with_text( lx_err ).
|
|
ENDTRY.
|
|
|
|
ENDMETHOD.
|
|
ENDCLASS.
|