diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index bbeadffc3..e9609ae73 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -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.18.6'. "#EC NOTEXT + gc_abap_version TYPE string VALUE 'v1.19.0'. "#EC NOTEXT ******************************************************************************** * The MIT License (MIT) diff --git a/src/zabapgit_object_dtel.prog.abap b/src/zabapgit_object_dtel.prog.abap index 92d6730c3..2af768331 100644 --- a/src/zabapgit_object_dtel.prog.abap +++ b/src/zabapgit_object_dtel.prog.abap @@ -137,7 +137,7 @@ CLASS lcl_object_dtel IMPLEMENTATION. EXCEPTIONS illegal_input = 1 OTHERS = 2. - IF sy-subrc <> 0 or ls_dd04v IS INITIAL. + IF sy-subrc <> 0 OR ls_dd04v IS INITIAL. lcx_exception=>raise( 'Error from DDIF_DTEL_GET' ). ENDIF. @@ -151,6 +151,7 @@ CLASS lcl_object_dtel IMPLEMENTATION. ls_dd04v-leng, ls_dd04v-decimals, ls_dd04v-outputlen, + ls_dd04v-valexi, ls_dd04v-lowercase, ls_dd04v-signflag, ls_dd04v-convexit, @@ -218,7 +219,7 @@ CLASS lcl_object_dtel IMPLEMENTATION. lv_name = ms_item-obj_name. " Collect additional languages - SELECT DISTINCT ddlanguage as langu INTO TABLE lt_i18n_langs + SELECT DISTINCT ddlanguage AS langu INTO TABLE lt_i18n_langs FROM dd04v WHERE rollname = lv_name AND ddlanguage <> mv_language. " Skip master lang - it was serialized already diff --git a/src/zabapgit_object_enho.prog.abap b/src/zabapgit_object_enho.prog.abap index 7a393c386..63137394a 100644 --- a/src/zabapgit_object_enho.prog.abap +++ b/src/zabapgit_object_enho.prog.abap @@ -14,6 +14,13 @@ CLASS lcl_object_enho DEFINITION INHERITING FROM lcl_objects_super FINAL. ALIASES mo_files FOR lif_object~mo_files. PRIVATE SECTION. + TYPES: BEGIN OF ty_spaces, + full_name TYPE string. + TYPES: spaces TYPE STANDARD TABLE OF i WITH DEFAULT KEY, + END OF ty_spaces. + + TYPES: ty_spaces_tt TYPE STANDARD TABLE OF ty_spaces WITH DEFAULT KEY. + METHODS deserialize_badi IMPORTING io_xml TYPE REF TO lcl_xml_input iv_package TYPE devclass @@ -34,6 +41,15 @@ CLASS lcl_object_enho DEFINITION INHERITING FROM lcl_objects_super FINAL. ii_enh_tool TYPE REF TO if_enh_tool RAISING lcx_exception. + METHODS hook_impl_serialize + EXPORTING et_spaces TYPE ty_spaces_tt + CHANGING ct_impl TYPE enh_hook_impl_it + RAISING lcx_exception. + METHODS hook_impl_deserialize + IMPORTING it_spaces TYPE ty_spaces_tt + CHANGING ct_impl TYPE enh_hook_impl_it + RAISING lcx_exception. + ENDCLASS. "lcl_object_enho DEFINITION *----------------------------------------------------------------------* @@ -55,6 +71,53 @@ CLASS lcl_object_enho IMPLEMENTATION. rv_user = c_user_unknown. " todo ENDMETHOD. + METHOD hook_impl_serialize. +* handle normalization of XML values +* i.e. remove leading spaces + + FIELD-SYMBOLS: LIKE LINE OF ct_impl, + LIKE LINE OF et_spaces, + TYPE i, + TYPE string. + + + LOOP AT ct_impl ASSIGNING . + APPEND INITIAL LINE TO et_spaces ASSIGNING . + -full_name = -full_name. + LOOP AT -source ASSIGNING . + APPEND INITIAL LINE TO -spaces ASSIGNING . + WHILE strlen( ) >= 1 AND (1) = ` `. + = +1. + = + 1. + ENDWHILE. + ENDLOOP. + ENDLOOP. + ENDMETHOD. + + METHOD hook_impl_deserialize. + + FIELD-SYMBOLS: LIKE LINE OF ct_impl, + TYPE string, + TYPE i, + LIKE LINE OF it_spaces. + + + LOOP AT ct_impl ASSIGNING . + READ TABLE it_spaces ASSIGNING WITH KEY full_name = -full_name. + IF sy-subrc = 0. + LOOP AT -source ASSIGNING . + READ TABLE -spaces ASSIGNING INDEX sy-tabix. + IF sy-subrc = 0 AND > 0. + DO TIMES. + CONCATENATE space INTO RESPECTING BLANKS. + ENDDO. + ENDIF. + ENDLOOP. + ENDIF. + ENDLOOP. + + ENDMETHOD. + METHOD lif_object~exists. DATA: ls_tadir TYPE tadir. @@ -82,7 +145,9 @@ CLASS lcl_object_enho IMPLEMENTATION. lv_enh_id = ms_item-obj_name. TRY. - li_enh_tool = cl_enh_factory=>get_enhancement( lv_enh_id ). + li_enh_tool = cl_enh_factory=>get_enhancement( + enhancement_id = lv_enh_id + bypassing_buffer = abap_true ). CATCH cx_enh_root. lcx_exception=>raise( 'Error from CL_ENH_FACTORY' ). ENDTRY. @@ -196,6 +261,7 @@ CLASS lcl_object_enho IMPLEMENTATION. lv_enhname TYPE enhname, lv_package TYPE devclass, ls_original_object TYPE enh_hook_admin, + lt_spaces TYPE ty_spaces_tt, lt_enhancements TYPE enh_hook_impl_it. FIELD-SYMBOLS: LIKE LINE OF lt_enhancements. @@ -207,6 +273,11 @@ CLASS lcl_object_enho IMPLEMENTATION. CHANGING cg_data = ls_original_object ). io_xml->read( EXPORTING iv_name = 'ENHANCEMENTS' CHANGING cg_data = lt_enhancements ). + io_xml->read( EXPORTING iv_name = 'SPACES' + CHANGING cg_data = lt_spaces ). + + hook_impl_deserialize( EXPORTING it_spaces = lt_spaces + CHANGING ct_impl = lt_enhancements ). lv_enhname = ms_item-obj_name. lv_package = iv_package. @@ -279,6 +350,7 @@ CLASS lcl_object_enho IMPLEMENTATION. DATA: lv_shorttext TYPE string, lo_hook_impl TYPE REF TO cl_enh_tool_hook_impl, ls_original_object TYPE enh_hook_admin, + lt_spaces TYPE ty_spaces_tt, lt_enhancements TYPE enh_hook_impl_it. @@ -296,6 +368,10 @@ CLASS lcl_object_enho IMPLEMENTATION. ls_original_object-include_bound = lo_hook_impl->get_include_bound( ). lt_enhancements = lo_hook_impl->get_hook_impls( ). + hook_impl_serialize( + IMPORTING et_spaces = lt_spaces + CHANGING ct_impl = lt_enhancements ). + io_xml->add( iv_name = 'TOOL' ig_data = iv_tool ). io_xml->add( ig_data = lv_shorttext @@ -304,6 +380,8 @@ CLASS lcl_object_enho IMPLEMENTATION. iv_name = 'ORIGINAL_OBJECT' ). io_xml->add( iv_name = 'ENHANCEMENTS' ig_data = lt_enhancements ). + io_xml->add( iv_name = 'SPACES' + ig_data = lt_spaces ). ENDMETHOD. "serialize_hook diff --git a/src/zabapgit_object_enhs.prog.abap b/src/zabapgit_object_enhs.prog.abap index 1a5eebb78..31a624b15 100644 --- a/src/zabapgit_object_enhs.prog.abap +++ b/src/zabapgit_object_enhs.prog.abap @@ -6,6 +6,7 @@ * CLASS lcl_object_enhs DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_enhs DEFINITION INHERITING FROM lcl_objects_super FINAL. + PUBLIC SECTION. INTERFACES lif_object. ALIASES mo_files FOR lif_object~mo_files. @@ -22,10 +23,24 @@ CLASS lcl_object_enhs IMPLEMENTATION. ENDMETHOD. "lif_object~has_changed_since METHOD lif_object~changed_by. - rv_user = c_user_unknown. " todo + + DATA: lv_spot_name TYPE enhspotname, + li_spot_ref TYPE REF TO if_enh_spot_tool. + + + lv_spot_name = ms_item-obj_name. + + TRY. + li_spot_ref = cl_enh_factory=>get_enhancement_spot( lv_spot_name ). + li_spot_ref->get_attributes( IMPORTING changedby = rv_user ). + CATCH cx_enh_root. + rv_user = c_user_unknown. + ENDTRY. + ENDMETHOD. METHOD lif_object~deserialize. + DATA: lv_message TYPE string, lv_parent TYPE enhspotcompositename, lv_spot_name TYPE enhspotname, @@ -86,22 +101,24 @@ CLASS lcl_object_enhs IMPLEMENTATION. ENDMETHOD. "deserialize METHOD lif_object~serialize. - DATA: lv_message TYPE string, - lv_spot_name TYPE enhspotname, + + DATA: lv_spot_name TYPE enhspotname, lv_enh_shtext TYPE string, lv_parent TYPE enhspotcompositename, lt_enh_badi TYPE enh_badi_data_it, + lv_tool TYPE enhspottooltype, lx_root TYPE REF TO cx_root, li_spot_ref TYPE REF TO if_enh_spot_tool, lo_badidef_tool TYPE REF TO cl_enh_tool_badi_def. + lv_spot_name = ms_item-obj_name. TRY. li_spot_ref = cl_enh_factory=>get_enhancement_spot( lv_spot_name ). + lv_tool = li_spot_ref->get_tool( ). lo_badidef_tool ?= li_spot_ref. - lv_enh_shtext = lo_badidef_tool->if_enh_object_docu~get_shorttext( ). "get parent = composite enhs (ENHC) @@ -109,6 +126,8 @@ CLASS lcl_object_enhs IMPLEMENTATION. "get subsequent BADI definitions lt_enh_badi = lo_badidef_tool->get_badi_defs( ). + io_xml->add( ig_data = lv_tool + iv_name = 'TOOL' ). io_xml->add( ig_data = lv_parent iv_name = 'PARENT_COMP' ). io_xml->add( ig_data = lv_enh_shtext @@ -117,9 +136,8 @@ CLASS lcl_object_enhs IMPLEMENTATION. iv_name = 'BADI_DATA' ). CATCH cx_enh_root INTO lx_root. - lv_message = `Error occured while serializing EHNS: ` - && lx_root->get_text( ) ##NO_TEXT. - lcx_exception=>raise( lv_message ). + lcx_exception=>raise( `Error occured while serializing EHNS: ` + && lx_root->get_text( ) ) ##NO_TEXT. ENDTRY. ENDMETHOD. "serialize @@ -127,6 +145,7 @@ CLASS lcl_object_enhs IMPLEMENTATION. METHOD lif_object~exists. DATA: lv_spot_name TYPE enhspotname, + lv_tool TYPE enhspottooltype, li_spot_ref TYPE REF TO if_enh_spot_tool. @@ -135,12 +154,14 @@ CLASS lcl_object_enhs IMPLEMENTATION. TRY. li_spot_ref = cl_enh_factory=>get_enhancement_spot( lv_spot_name ). -* Check that is is realy a BAdI - IF li_spot_ref->get_tool( ) = cl_enh_tool_badi_def=>tooltype. - rv_bool = abap_true. - ELSE. - rv_bool = abap_false. - ENDIF. + lv_tool = li_spot_ref->get_tool( ). + CASE lv_tool. + WHEN cl_enh_tool_badi_def=>tooltype. + rv_bool = abap_true. + WHEN OTHERS. +* todo: implement additional tool types + rv_bool = abap_false. + ENDCASE. CATCH cx_enh_root. rv_bool = abap_false. ENDTRY. @@ -148,6 +169,7 @@ CLASS lcl_object_enhs IMPLEMENTATION. ENDMETHOD. "exists METHOD lif_object~delete. + DATA: lv_spot_name TYPE enhspotname, lv_message TYPE string, lx_root TYPE REF TO cx_root, @@ -159,19 +181,18 @@ CLASS lcl_object_enhs IMPLEMENTATION. TRY. li_spot_ref = cl_enh_factory=>get_enhancement_spot( spot_name = lv_spot_name - lock = 'X' ). + lock = abap_true ). IF li_spot_ref IS BOUND. lo_badidef_tool ?= li_spot_ref. lo_badidef_tool->if_enh_object~delete( - nevertheless_delete = 'X' - run_dark = 'X' ). + nevertheless_delete = abap_true + run_dark = abap_true ). ENDIF. lo_badidef_tool->if_enh_object~unlock( ). CATCH cx_enh_root INTO lx_root. - lv_message = `Error occured while deleting EHNS: ` - && lx_root->get_text( ) ##NO_TEXT. - lcx_exception=>raise( lv_message ). + lcx_exception=>raise( `Error occured while deleting EHNS: ` + && lx_root->get_text( ) ) ##NO_TEXT. ENDTRY. ENDMETHOD. "delete