abapGit/src/objects/zcl_abapgit_object_srfc.clas.abap
Marc Bernard 485bb12cc1
Record objects in transports (#5419)
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>
2022-03-31 15:20:25 +02:00

261 lines
6.6 KiB
ABAP

CLASS zcl_abapgit_object_srfc DEFINITION
PUBLIC
INHERITING FROM zcl_abapgit_objects_super
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES zif_abapgit_object .
METHODS constructor
IMPORTING
!is_item TYPE zif_abapgit_definitions=>ty_item
!iv_language TYPE spras
RAISING
zcx_abapgit_exception .
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcl_abapgit_object_srfc IMPLEMENTATION.
METHOD constructor.
DATA li_srfc_persist TYPE REF TO if_wb_object_persist.
super->constructor(
is_item = is_item
iv_language = iv_language ).
TRY.
CREATE OBJECT li_srfc_persist TYPE ('CL_UCONRFC_OBJECT_PERSIST').
CATCH cx_root.
zcx_abapgit_exception=>raise( 'Object type SRFC is not supported by this system' ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~changed_by.
DATA: li_object_data TYPE REF TO if_wb_object_data_model,
li_srfc_persist TYPE REF TO if_wb_object_persist,
lr_srfc_data TYPE REF TO data,
lx_error TYPE REF TO cx_root.
FIELD-SYMBOLS: <lg_srfc_data> TYPE any,
<lg_any> TYPE any.
TRY.
CREATE DATA lr_srfc_data TYPE ('UCONRFCSERV_COMPLETE').
ASSIGN lr_srfc_data->* TO <lg_srfc_data>.
ASSERT sy-subrc = 0.
CREATE OBJECT li_srfc_persist TYPE ('CL_UCONRFC_OBJECT_PERSIST').
li_srfc_persist->get(
EXPORTING
p_object_key = |{ ms_item-obj_name }|
p_version = 'A'
CHANGING
p_object_data = li_object_data ).
li_object_data->get_data( IMPORTING p_data = <lg_srfc_data> ).
ASSIGN COMPONENT 'HEADER-CHANGEDBY' OF STRUCTURE <lg_srfc_data> TO <lg_any>.
IF sy-subrc = 0 AND <lg_any> IS NOT INITIAL.
rv_user = <lg_any>.
ELSE.
rv_user = c_user_unknown.
ENDIF.
CATCH cx_root INTO lx_error.
zcx_abapgit_exception=>raise_with_text( lx_error ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~delete.
DATA: li_srfc_persist TYPE REF TO if_wb_object_persist,
lx_error TYPE REF TO cx_root.
TRY.
CREATE OBJECT li_srfc_persist TYPE ('CL_UCONRFC_OBJECT_PERSIST').
li_srfc_persist->delete( p_object_key = |{ ms_item-obj_name }|
p_version = 'A' ).
CATCH cx_root INTO lx_error.
zcx_abapgit_exception=>raise_with_text( lx_error ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~deserialize.
DATA: li_srfc_persist TYPE REF TO if_wb_object_persist,
li_object_data TYPE REF TO if_wb_object_data_model,
lr_srfc_data TYPE REF TO data,
lx_error TYPE REF TO cx_root.
FIELD-SYMBOLS: <lg_srfc_data> TYPE any,
<lg_any> TYPE any.
TRY.
CREATE DATA lr_srfc_data TYPE ('UCONRFCSERV_COMPLETE').
ASSIGN lr_srfc_data->* TO <lg_srfc_data>.
ASSERT sy-subrc = 0.
ASSIGN COMPONENT 'HEADER-CREATEDBY' OF STRUCTURE <lg_srfc_data> TO <lg_any>.
IF sy-subrc = 0.
<lg_any> = sy-uname.
ENDIF.
ASSIGN COMPONENT 'HEADER-CREATEDON' OF STRUCTURE <lg_srfc_data> TO <lg_any>.
IF sy-subrc = 0.
<lg_any> = sy-datum.
ENDIF.
ASSIGN COMPONENT 'HEADER-CREATEDAT' OF STRUCTURE <lg_srfc_data> TO <lg_any>.
IF sy-subrc = 0.
<lg_any> = sy-uzeit.
ENDIF.
io_xml->read(
EXPORTING
iv_name = 'SRFC'
CHANGING
cg_data = <lg_srfc_data> ).
CREATE OBJECT li_srfc_persist TYPE ('CL_UCONRFC_OBJECT_PERSIST').
CREATE OBJECT li_object_data TYPE ('CL_UCONRFC_OBJECT_DATA').
li_object_data->set_data( <lg_srfc_data> ).
li_srfc_persist->save( li_object_data ).
tadir_insert( iv_package ).
corr_insert( iv_package ).
CATCH cx_root INTO lx_error.
zcx_abapgit_exception=>raise_with_text( lx_error ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~exists.
DATA: li_object_data TYPE REF TO if_wb_object_data_model,
li_srfc_persist TYPE REF TO if_wb_object_persist.
TRY.
CREATE OBJECT li_srfc_persist TYPE ('CL_UCONRFC_OBJECT_PERSIST').
li_srfc_persist->get(
EXPORTING
p_object_key = |{ ms_item-obj_name }|
p_version = 'A'
CHANGING
p_object_data = li_object_data ).
CATCH cx_root.
rv_bool = abap_false.
RETURN.
ENDTRY.
rv_bool = abap_true.
ENDMETHOD.
METHOD zif_abapgit_object~get_comparator.
RETURN.
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( ).
rs_metadata-delete_tadir = abap_true.
ENDMETHOD.
METHOD zif_abapgit_object~is_active.
rv_active = is_active( ).
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
METHOD zif_abapgit_object~jump.
" Covered by ZCL_ABAPGIT_OBJECTS=>JUMP
ENDMETHOD.
METHOD zif_abapgit_object~serialize.
DATA: li_object_data TYPE REF TO if_wb_object_data_model,
li_srfc_persist TYPE REF TO if_wb_object_persist,
lr_srfc_data TYPE REF TO data,
lx_error TYPE REF TO cx_root.
FIELD-SYMBOLS: <lg_srfc_data> TYPE any,
<lg_any> TYPE any.
TRY.
CREATE DATA lr_srfc_data TYPE ('UCONRFCSERV_COMPLETE').
ASSIGN lr_srfc_data->* TO <lg_srfc_data>.
ASSERT sy-subrc = 0.
CREATE OBJECT li_srfc_persist TYPE ('CL_UCONRFC_OBJECT_PERSIST').
li_srfc_persist->get(
EXPORTING
p_object_key = |{ ms_item-obj_name }|
p_version = 'A'
CHANGING
p_object_data = li_object_data ).
li_object_data->get_data( IMPORTING p_data = <lg_srfc_data> ).
ASSIGN COMPONENT 'HEADER-CREATEDBY' OF STRUCTURE <lg_srfc_data> TO <lg_any>.
IF sy-subrc = 0.
CLEAR <lg_any>.
ENDIF.
ASSIGN COMPONENT 'HEADER-CREATEDON' OF STRUCTURE <lg_srfc_data> TO <lg_any>.
IF sy-subrc = 0.
CLEAR <lg_any>.
ENDIF.
ASSIGN COMPONENT 'HEADER-CREATEDAT' OF STRUCTURE <lg_srfc_data> TO <lg_any>.
IF sy-subrc = 0.
CLEAR <lg_any>.
ENDIF.
CATCH cx_root INTO lx_error.
zcx_abapgit_exception=>raise_with_text( lx_error ).
ENDTRY.
io_xml->add( iv_name = 'SRFC'
ig_data = <lg_srfc_data> ).
ENDMETHOD.
ENDCLASS.