TRAN: Support oo transactions

This commit is contained in:
Christian Guenter 2018-10-12 09:19:01 +02:00 committed by Lars Hvam
parent fa39fcd43f
commit 7d92edec4f

View File

@ -6,6 +6,9 @@ CLASS zcl_abapgit_object_tran DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
PRIVATE SECTION. PRIVATE SECTION.
TYPES: tty_param_values TYPE STANDARD TABLE OF rsparam
WITH NON-UNIQUE DEFAULT KEY.
CONSTANTS: c_oo_program(9) VALUE '\PROGRAM=', CONSTANTS: c_oo_program(9) VALUE '\PROGRAM=',
c_oo_class(7) VALUE '\CLASS=', c_oo_class(7) VALUE '\CLASS=',
c_oo_method(8) VALUE '\METHOD=', c_oo_method(8) VALUE '\METHOD=',
@ -36,13 +39,259 @@ CLASS zcl_abapgit_object_tran DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
deserialize_texts deserialize_texts
IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_input IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_input
RAISING zcx_abapgit_exception. RAISING zcx_abapgit_exception,
deserialize_oo_transaction
IMPORTING
iv_package TYPE devclass
is_tstc TYPE tstc
is_tstcc TYPE tstcc
is_tstct TYPE tstct
is_tstcp TYPE tstcp
it_param_values TYPE zcl_abapgit_object_tran=>tty_param_values
is_rsstcd TYPE rsstcd
RAISING
zcx_abapgit_exception.
ENDCLASS. ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECT_TRAN IMPLEMENTATION. CLASS zcl_abapgit_object_tran IMPLEMENTATION.
METHOD deserialize_oo_transaction.
" You should remember that we don't use batch input just for fun,
" but because FM RPY_TRANSACTION_INSERT doesn't support OO transactions.
DATA: ls_bcdata TYPE bdcdata,
lt_bcdata TYPE STANDARD TABLE OF bdcdata,
lt_message TYPE STANDARD TABLE OF bdcmsgcoll.
FIELD-SYMBOLS: <ls_message> TYPE bdcmsgcoll.
ls_bcdata-program = 'SAPLSEUK'.
ls_bcdata-dynpro = '0390'.
ls_bcdata-dynbegin = 'X'.
APPEND ls_bcdata TO lt_bcdata.
CLEAR ls_bcdata.
ls_bcdata-fnam = 'TSTC-TCODE'.
ls_bcdata-fval = is_tstc-tcode.
APPEND ls_bcdata TO lt_bcdata.
IF zif_abapgit_object~exists( ) = abap_true.
CLEAR ls_bcdata.
ls_bcdata-fnam = 'BDC_OKCODE'.
ls_bcdata-fval = '=CHNG'.
APPEND ls_bcdata TO lt_bcdata.
ELSE.
CLEAR ls_bcdata.
ls_bcdata-fnam = 'BDC_OKCODE'.
ls_bcdata-fval = '=ADD'.
APPEND ls_bcdata TO lt_bcdata.
ENDIF.
ls_bcdata-program = 'SAPLSEUK'.
ls_bcdata-dynpro = '0300'.
ls_bcdata-dynbegin = 'X'.
APPEND ls_bcdata TO lt_bcdata.
CLEAR ls_bcdata.
ls_bcdata-fnam = 'TSTCT-TTEXT'.
ls_bcdata-fval = is_tstct-ttext.
APPEND ls_bcdata TO lt_bcdata.
CLEAR ls_bcdata.
ls_bcdata-fnam = 'RSSTCD-S_CLASS'.
ls_bcdata-fval = 'X'.
APPEND ls_bcdata TO lt_bcdata.
CLEAR ls_bcdata.
ls_bcdata-fnam = 'BDC_OKCODE'.
ls_bcdata-fval = '=ENTR'.
APPEND ls_bcdata TO lt_bcdata.
ls_bcdata-program = 'SAPLSEUK'.
ls_bcdata-dynpro = '0360'.
ls_bcdata-dynbegin = 'X'.
APPEND ls_bcdata TO lt_bcdata.
CLEAR ls_bcdata.
ls_bcdata-fnam = 'RSSTCD-S_TRFRAME'.
ls_bcdata-fval = is_rsstcd-s_trframe.
APPEND ls_bcdata TO lt_bcdata.
CLEAR ls_bcdata.
ls_bcdata-fnam = 'RSSTCD-S_UPDTASK'.
ls_bcdata-fval = is_rsstcd-s_updtask.
APPEND ls_bcdata TO lt_bcdata.
CLEAR ls_bcdata.
ls_bcdata-fnam = 'BDC_OKCODE'.
ls_bcdata-fval = '=TR_FRAMEWORK'.
APPEND ls_bcdata TO lt_bcdata.
ls_bcdata-program = 'SAPLSEUK'.
ls_bcdata-dynpro = '0360'.
ls_bcdata-dynbegin = 'X'.
APPEND ls_bcdata TO lt_bcdata.
CLEAR ls_bcdata.
ls_bcdata-fnam = 'RSSTCD-CLASSNAME'.
ls_bcdata-fval = is_rsstcd-classname.
APPEND ls_bcdata TO lt_bcdata.
CLEAR ls_bcdata.
ls_bcdata-fnam = 'RSSTCD-METHOD'.
ls_bcdata-fval = is_rsstcd-method.
APPEND ls_bcdata TO lt_bcdata.
IF is_rsstcd-s_local IS NOT INITIAL.
CLEAR ls_bcdata.
ls_bcdata-fnam = 'RSSTCD-S_LOCAL'.
ls_bcdata-fval = is_rsstcd-s_local.
APPEND ls_bcdata TO lt_bcdata.
ENDIF.
IF is_rsstcd-s_updlok IS NOT INITIAL.
CLEAR ls_bcdata.
ls_bcdata-fnam = 'RSSTCD-S_UPDLOK'.
ls_bcdata-fval = is_rsstcd-s_updlok.
APPEND ls_bcdata TO lt_bcdata.
ENDIF.
CLEAR ls_bcdata.
ls_bcdata-fnam = 'TSTC-PGMNA'.
ls_bcdata-fval = is_tstc-pgmna.
APPEND ls_bcdata TO lt_bcdata.
IF is_tstcc-s_webgui = '2'.
CLEAR ls_bcdata.
ls_bcdata-fnam = 'G_IAC_EWT'.
ls_bcdata-fval = abap_true.
APPEND ls_bcdata TO lt_bcdata.
CLEAR ls_bcdata.
ls_bcdata-fnam = 'BDC_OKCODE'.
ls_bcdata-fval = 'MAKE_PROFI '.
APPEND ls_bcdata TO lt_bcdata.
ls_bcdata-program = 'SAPLSEUK'.
ls_bcdata-dynpro = '0360'.
ls_bcdata-dynbegin = 'X'.
APPEND ls_bcdata TO lt_bcdata.
ELSEIF is_tstcc-s_webgui IS NOT INITIAL.
CLEAR ls_bcdata.
ls_bcdata-fnam = 'TSTCC-S_WEBGUI'.
ls_bcdata-fval = is_tstcc-s_webgui.
APPEND ls_bcdata TO lt_bcdata.
ENDIF.
IF is_tstcc-s_pervas IS NOT INITIAL.
CLEAR ls_bcdata.
ls_bcdata-fnam = 'TSTCC-S_PERVAS'.
ls_bcdata-fval = is_tstcc-s_pervas.
APPEND ls_bcdata TO lt_bcdata.
ENDIF.
IF is_tstcc-s_service IS NOT INITIAL.
CLEAR ls_bcdata.
ls_bcdata-fnam = 'TSTCC-S_SERVICE'.
ls_bcdata-fval = is_tstcc-s_service.
APPEND ls_bcdata TO lt_bcdata.
ENDIF.
IF is_tstcc-s_platin IS NOT INITIAL.
CLEAR ls_bcdata.
ls_bcdata-fnam = 'TSTCC-S_PLATIN'.
ls_bcdata-fval = is_tstcc-s_platin.
APPEND ls_bcdata TO lt_bcdata.
ENDIF.
IF is_tstcc-s_win32 IS NOT INITIAL.
CLEAR ls_bcdata.
ls_bcdata-fnam = 'TSTCC-S_WIN32'.
ls_bcdata-fval = is_tstcc-s_win32.
APPEND ls_bcdata TO lt_bcdata.
ENDIF.
CLEAR ls_bcdata.
ls_bcdata-fnam = 'BDC_OKCODE'.
ls_bcdata-fval = '=WB_SAVE'.
APPEND ls_bcdata TO lt_bcdata.
ls_bcdata-program = 'SAPLSTRD'.
ls_bcdata-dynpro = '0100'.
ls_bcdata-dynbegin = 'X'.
APPEND ls_bcdata TO lt_bcdata.
CLEAR ls_bcdata.
ls_bcdata-fnam = 'KO007-L_DEVCLASS'.
ls_bcdata-fval = iv_package.
APPEND ls_bcdata TO lt_bcdata.
CLEAR ls_bcdata.
ls_bcdata-fnam = 'BDC_OKCODE'.
ls_bcdata-fval = '=ADD'.
APPEND ls_bcdata TO lt_bcdata.
ls_bcdata-program = 'BDC_OKCODE'.
ls_bcdata-dynpro = '0360'.
ls_bcdata-dynbegin = 'X'.
APPEND ls_bcdata TO lt_bcdata.
CLEAR ls_bcdata.
ls_bcdata-fnam = 'BDC_OKCODE'.
ls_bcdata-fval = '=WB_BACK'.
APPEND ls_bcdata TO lt_bcdata.
ls_bcdata-program = 'BDC_OKCODE'.
ls_bcdata-dynpro = '0360'.
ls_bcdata-dynbegin = 'X'.
APPEND ls_bcdata TO lt_bcdata.
CLEAR ls_bcdata.
ls_bcdata-fnam = 'BDC_OKCODE'.
ls_bcdata-fval = '=WB_BACK'.
APPEND ls_bcdata TO lt_bcdata.
CALL FUNCTION 'ABAP4_CALL_TRANSACTION'
EXPORTING
tcode = 'SE93'
mode_val = 'N'
TABLES
using_tab = lt_bcdata
mess_tab = lt_message
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Error deserializing { ms_item-obj_type } { ms_item-obj_name }| ).
ENDIF.
LOOP AT lt_message ASSIGNING <ls_message>
WHERE msgtyp CA 'EAX'.
MESSAGE ID <ls_message>-msgid
TYPE <ls_message>-msgtyp
NUMBER <ls_message>-msgnr
WITH <ls_message>-msgv1 <ls_message>-msgv2 <ls_message>-msgv3 <ls_message>-msgv4
INTO sy-msgli.
zcx_abapgit_exception=>raise_t100( ).
ENDLOOP.
ENDMETHOD.
METHOD deserialize_texts. METHOD deserialize_texts.
@ -275,11 +524,9 @@ CLASS ZCL_ABAPGIT_OBJECT_TRAN IMPLEMENTATION.
CONSTANTS: lc_hex_tra TYPE x VALUE '00', CONSTANTS: lc_hex_tra TYPE x VALUE '00',
* c_hex_men TYPE x VALUE '01', * c_hex_men TYPE x VALUE '01',
lc_hex_par TYPE x VALUE '02', lc_hex_par TYPE x VALUE '02',
lc_hex_rep TYPE x VALUE '80'. lc_hex_rep TYPE x VALUE '80',
* c_hex_rpv TYPE x VALUE '10', * c_hex_rpv TYPE x VALUE '10',
* c_hex_obj TYPE x VALUE '08', lc_hex_obj TYPE x VALUE '08'.
* c_hex_chk TYPE x VALUE '04',
* c_hex_enq TYPE x VALUE '20'.
DATA: lv_dynpro TYPE d020s-dnum, DATA: lv_dynpro TYPE d020s-dnum,
ls_tstc TYPE tstc, ls_tstc TYPE tstc,
@ -287,7 +534,7 @@ CLASS ZCL_ABAPGIT_OBJECT_TRAN IMPLEMENTATION.
ls_tstct TYPE tstct, ls_tstct TYPE tstct,
ls_tstcc TYPE tstcc, ls_tstcc TYPE tstcc,
ls_tstcp TYPE tstcp, ls_tstcp TYPE tstcp,
lt_param_values TYPE TABLE OF rsparam, lt_param_values TYPE tty_param_values,
ls_rsstcd TYPE rsstcd. ls_rsstcd TYPE rsstcd.
@ -313,6 +560,8 @@ CLASS ZCL_ABAPGIT_OBJECT_TRAN IMPLEMENTATION.
lv_type = ststc_c_type_report. lv_type = ststc_c_type_report.
WHEN lc_hex_par. WHEN lc_hex_par.
lv_type = ststc_c_type_parameters. lv_type = ststc_c_type_parameters.
WHEN lc_hex_obj.
lv_type = ststc_c_type_object.
* todo, or ststc_c_type_variant? * todo, or ststc_c_type_variant?
WHEN OTHERS. WHEN OTHERS.
zcx_abapgit_exception=>raise( 'Transaction, unknown CINFO' ). zcx_abapgit_exception=>raise( 'Transaction, unknown CINFO' ).
@ -327,6 +576,19 @@ CLASS ZCL_ABAPGIT_OBJECT_TRAN IMPLEMENTATION.
cs_tstc = ls_tstc ). cs_tstc = ls_tstc ).
ENDIF. ENDIF.
CASE lv_type.
WHEN ststc_c_type_object.
deserialize_oo_transaction( iv_package = iv_package
is_tstc = ls_tstc
is_tstcc = ls_tstcc
is_tstct = ls_tstct
is_tstcp = ls_tstcp
it_param_values = lt_param_values
is_rsstcd = ls_rsstcd ).
WHEN OTHERS.
CALL FUNCTION 'RPY_TRANSACTION_INSERT' CALL FUNCTION 'RPY_TRANSACTION_INSERT'
EXPORTING EXPORTING
transaction = ls_tstc-tcode transaction = ls_tstc-tcode
@ -359,6 +621,8 @@ CLASS ZCL_ABAPGIT_OBJECT_TRAN IMPLEMENTATION.
zcx_abapgit_exception=>raise( 'Error from RPY_TRANSACTION_INSERT' ). zcx_abapgit_exception=>raise( 'Error from RPY_TRANSACTION_INSERT' ).
ENDIF. ENDIF.
ENDCASE.
" Texts deserializing (translations) " Texts deserializing (translations)
deserialize_texts( io_xml ). deserialize_texts( io_xml ).
@ -387,6 +651,21 @@ CLASS ZCL_ABAPGIT_OBJECT_TRAN IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
DATA: lv_object TYPE eqegraarg.
lv_object = |TN{ ms_item-obj_name }|.
OVERLAY lv_object WITH ' '.
lv_object = lv_object && '*'.
rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'EEUDB'
iv_argument = lv_object ).
ENDMETHOD.
METHOD zif_abapgit_object~jump. METHOD zif_abapgit_object~jump.
DATA: lt_bdcdata TYPE TABLE OF bdcdata. DATA: lt_bdcdata TYPE TABLE OF bdcdata.
@ -482,19 +761,4 @@ CLASS ZCL_ABAPGIT_OBJECT_TRAN IMPLEMENTATION.
serialize_texts( io_xml ). serialize_texts( io_xml ).
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
DATA: lv_object TYPE eqegraarg.
lv_object = |TN{ ms_item-obj_name }|.
OVERLAY lv_object WITH ' '.
lv_object = lv_object && '*'.
rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'EEUDB'
iv_argument = lv_object ).
ENDMETHOD.
ENDCLASS. ENDCLASS.