From 8e8d68cc7109cd965fc792699827eb1d4d4acb67 Mon Sep 17 00:00:00 2001 From: larshp Date: Sat, 29 Oct 2016 10:03:59 +0000 Subject: [PATCH 1/6] ENHS: changed_by and add tool type Add tool type to XML, to allow for adding additional tool types in the future implement code to find changed_by user --- src/zabapgit_object_enhs.prog.abap | 55 +++++++++++++++++++----------- 1 file changed, 36 insertions(+), 19 deletions(-) diff --git a/src/zabapgit_object_enhs.prog.abap b/src/zabapgit_object_enhs.prog.abap index 1a5eebb78..08202f76e 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,20 @@ 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. + + li_spot_ref = cl_enh_factory=>get_enhancement_spot( lv_spot_name ). + li_spot_ref->get_attributes( IMPORTING changedby = rv_user ). + ENDMETHOD. METHOD lif_object~deserialize. + DATA: lv_message TYPE string, lv_parent TYPE enhspotcompositename, lv_spot_name TYPE enhspotname, @@ -86,22 +97,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 +122,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 +132,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 +141,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 +150,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 +165,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 +177,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 From 47e91752fe96a64174c429946efda9877211a9dc Mon Sep 17 00:00:00 2001 From: larshp Date: Sun, 30 Oct 2016 07:25:53 +0000 Subject: [PATCH 2/6] ENHO: fix, not updated at refresh --- src/zabapgit_object_enho.prog.abap | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/zabapgit_object_enho.prog.abap b/src/zabapgit_object_enho.prog.abap index 7a393c386..038007568 100644 --- a/src/zabapgit_object_enho.prog.abap +++ b/src/zabapgit_object_enho.prog.abap @@ -82,7 +82,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. From 48d83fe675a922f6fe3f28afac7913b948a292cf Mon Sep 17 00:00:00 2001 From: larshp Date: Sun, 30 Oct 2016 07:38:13 +0000 Subject: [PATCH 3/6] ENHS: catch exception --- src/zabapgit_object_enhs.prog.abap | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/zabapgit_object_enhs.prog.abap b/src/zabapgit_object_enhs.prog.abap index 08202f76e..31a624b15 100644 --- a/src/zabapgit_object_enhs.prog.abap +++ b/src/zabapgit_object_enhs.prog.abap @@ -30,8 +30,12 @@ CLASS lcl_object_enhs IMPLEMENTATION. lv_spot_name = ms_item-obj_name. - li_spot_ref = cl_enh_factory=>get_enhancement_spot( lv_spot_name ). - li_spot_ref->get_attributes( IMPORTING changedby = rv_user ). + 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. @@ -141,7 +145,7 @@ CLASS lcl_object_enhs IMPLEMENTATION. METHOD lif_object~exists. DATA: lv_spot_name TYPE enhspotname, - lv_tool TYPE enhspottooltype, + lv_tool TYPE enhspottooltype, li_spot_ref TYPE REF TO if_enh_spot_tool. From de35b72db005243de3a963aaefe1e276272a016d Mon Sep 17 00:00:00 2001 From: larshp Date: Sun, 30 Oct 2016 08:23:21 +0000 Subject: [PATCH 4/6] ENHO: handle spaces, #359 --- src/zabapgit.prog.abap | 2 +- src/zabapgit_object_enho.prog.abap | 76 ++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 1 deletion(-) diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index bbeadffc3..c2f0038c0 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.18.7'. "#EC NOTEXT ******************************************************************************** * The MIT License (MIT) diff --git a/src/zabapgit_object_enho.prog.abap b/src/zabapgit_object_enho.prog.abap index 038007568..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. @@ -198,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. @@ -209,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. @@ -281,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. @@ -298,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 @@ -306,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 From d6258d9ea85efd5fcd989c87999dbc3c2dc4880a Mon Sep 17 00:00:00 2001 From: sbcgua Date: Wed, 2 Nov 2016 10:46:32 +0200 Subject: [PATCH 5/6] i18n texts, doma, dtel (#402) * cherrypick cache repo results (#280) * lcl_gui_view_repo_content - code reorg #280 * fix * folders part 1 #280 * cherrypick refresh * cherrypick 2 pretty print * cherrypick log style * cherrypick lock icon * cherrypick background icon and toc marker * cherrypick macro include * unit test for lcl_path and fixes * folders part2 #280 * changes_only at user profile #280 * fix empty package * fix dump on type change * new repo, remove fixes, close #393, close #394 * merge fix * all repo diff at stage page * fix menu double rendering #398 * hide current folder in plain list mode #400 * i18n texts, doma, dtel * linter fixes * remove is_language_installed check --- src/zabapgit_object_doma.prog.abap | 175 +++++++++++++++++++++++++++- src/zabapgit_object_dtel.prog.abap | 131 ++++++++++++++++++++- src/zabapgit_objects.prog.abap | 7 ++ src/zabapgit_objects_impl.prog.abap | 12 ++ 4 files changed, 313 insertions(+), 12 deletions(-) diff --git a/src/zabapgit_object_doma.prog.abap b/src/zabapgit_object_doma.prog.abap index 747d1beeb..5d723e48d 100644 --- a/src/zabapgit_object_doma.prog.abap +++ b/src/zabapgit_object_doma.prog.abap @@ -13,6 +13,34 @@ CLASS lcl_object_doma DEFINITION INHERITING FROM lcl_objects_super FINAL. INTERFACES lif_object. ALIASES mo_files FOR lif_object~mo_files. + PRIVATE SECTION. + + TYPES: BEGIN OF ty_dd01_texts, + ddlanguage TYPE dd01v-ddlanguage, + ddtext TYPE dd01v-ddtext, + END OF ty_dd01_texts, + BEGIN OF ty_dd07_texts, + valpos TYPE dd07v-valpos, + ddlanguage TYPE dd07v-ddlanguage, + domvalue_l TYPE dd07v-domvalue_l, + domvalue_h TYPE dd07v-domvalue_h, + ddtext TYPE dd07v-ddtext, + domval_ld TYPE dd07v-domval_ld, + domval_hd TYPE dd07v-domval_hd, + END OF ty_dd07_texts, + tt_dd01_texts TYPE STANDARD TABLE OF ty_dd01_texts, + tt_dd07_texts TYPE STANDARD TABLE OF ty_dd07_texts. + + METHODS: + serialize_texts + IMPORTING io_xml TYPE REF TO lcl_xml_output + RAISING lcx_exception, + deserialize_texts + IMPORTING io_xml TYPE REF TO lcl_xml_input + is_dd01v TYPE dd01v + it_dd07v TYPE dd07v_tab + RAISING lcx_exception. + ENDCLASS. "lcl_object_doma DEFINITION *----------------------------------------------------------------------* @@ -118,12 +146,9 @@ CLASS lcl_object_doma IMPLEMENTATION. EXCEPTIONS illegal_input = 1 OTHERS = 2. - IF sy-subrc <> 0. + IF sy-subrc <> 0 OR ls_dd01v IS INITIAL. lcx_exception=>raise( 'error from DDIF_DOMA_GET' ). ENDIF. - IF ls_dd01v IS INITIAL. - RETURN. " does not exist - ENDIF. CLEAR: ls_dd01v-as4user, ls_dd01v-as4date, @@ -134,6 +159,8 @@ CLASS lcl_object_doma IMPLEMENTATION. io_xml->add( iv_name = 'DD07V_TAB' ig_data = lt_dd07v ). + serialize_texts( io_xml ). + ENDMETHOD. "serialize METHOD lif_object~deserialize. @@ -144,8 +171,8 @@ CLASS lcl_object_doma IMPLEMENTATION. * fm TR_TADIR_INTERFACE * fm RS_CORR_INSERT ? - DATA: ls_dd01v TYPE dd01v, - lv_name TYPE ddobjname, + DATA: lv_name TYPE ddobjname, + ls_dd01v TYPE dd01v, lt_dd07v TYPE TABLE OF dd07v. @@ -175,8 +202,144 @@ CLASS lcl_object_doma IMPLEMENTATION. lcx_exception=>raise( 'error from DDIF_DOMA_PUT' ). ENDIF. + deserialize_texts( io_xml = io_xml + is_dd01v = ls_dd01v + it_dd07v = lt_dd07v ). + lcl_objects_activation=>add_item( ms_item ). ENDMETHOD. "deserialize + METHOD serialize_texts. + + DATA: lv_name TYPE ddobjname, + lv_index TYPE i, + ls_dd01v TYPE dd01v, + lt_dd07v TYPE TABLE OF dd07v, + lt_i18n_langs TYPE TABLE OF langu, + lt_dd01_texts TYPE tt_dd01_texts, + lt_dd07_texts TYPE tt_dd07_texts. + + FIELD-SYMBOLS: LIKE LINE OF lt_i18n_langs, + LIKE LINE OF lt_dd07v, + LIKE LINE OF lt_dd01_texts, + LIKE LINE OF lt_dd07_texts. + + lv_name = ms_item-obj_name. + + " Collect additional languages + SELECT DISTINCT ddlanguage as langu INTO TABLE lt_i18n_langs + FROM dd01v + WHERE domname = lv_name + AND ddlanguage <> mv_language. " Skip master lang - it was serialized already + + LOOP AT lt_i18n_langs ASSIGNING . + lv_index = sy-tabix. + + CALL FUNCTION 'DDIF_DOMA_GET' + EXPORTING + name = lv_name + langu = + IMPORTING + dd01v_wa = ls_dd01v + TABLES + dd07v_tab = lt_dd07v + EXCEPTIONS + illegal_input = 1 + OTHERS = 2. + IF sy-subrc <> 0 OR ls_dd01v-ddlanguage IS INITIAL. + DELETE lt_i18n_langs INDEX lv_index. " Don't save this lang + CONTINUE. + ENDIF. + + APPEND INITIAL LINE TO lt_dd01_texts ASSIGNING . + MOVE-CORRESPONDING ls_dd01v TO . + + LOOP AT lt_dd07v ASSIGNING . + APPEND INITIAL LINE TO lt_dd07_texts ASSIGNING . + MOVE-CORRESPONDING TO . + ENDLOOP. + + ENDLOOP. + + IF lines( lt_i18n_langs ) > 1. + io_xml->add( iv_name = 'I18N_LANGS' + ig_data = lt_i18n_langs ). + + io_xml->add( iv_name = 'DD01_TEXTS' + ig_data = lt_dd01_texts ). + + io_xml->add( iv_name = 'DD07_TEXTS' + ig_data = lt_dd07_texts ). + ENDIF. + + ENDMETHOD. "serialize_texts + + METHOD deserialize_texts. + + DATA: lv_name TYPE ddobjname, + ls_dd01v_tmp TYPE dd01v, + lt_dd07v_tmp TYPE TABLE OF dd07v, + lt_i18n_langs TYPE TABLE OF langu, + lt_dd01_texts TYPE tt_dd01_texts, + lt_dd07_texts TYPE tt_dd07_texts. + + FIELD-SYMBOLS: LIKE LINE OF lt_i18n_langs, + LIKE LINE OF it_dd07v, + LIKE LINE OF lt_dd01_texts, + LIKE LINE OF lt_dd07_texts. + + lv_name = ms_item-obj_name. + + io_xml->read( EXPORTING iv_name = 'I18N_LANGS' + CHANGING cg_data = lt_i18n_langs ). + + io_xml->read( EXPORTING iv_name = 'DD01_TEXTS' + CHANGING cg_data = lt_dd01_texts ). + + io_xml->read( EXPORTING iv_name = 'DD07_TEXTS' + CHANGING cg_data = lt_dd07_texts ). + + SORT: lt_i18n_langs, lt_dd07_texts BY ddlanguage. " Optimization + + LOOP AT lt_i18n_langs ASSIGNING . + + " Domain description + ls_dd01v_tmp = is_dd01v. + READ TABLE lt_dd01_texts ASSIGNING WITH KEY ddlanguage = . + IF sy-subrc > 0. + lcx_exception=>raise( |DD01_TEXTS cannot find lang { } in XML| ). + ENDIF. + MOVE-CORRESPONDING TO ls_dd01v_tmp. + + " Domain values + lt_dd07v_tmp = it_dd07v. + LOOP AT lt_dd07v_tmp ASSIGNING . + READ TABLE lt_dd07_texts ASSIGNING + WITH KEY ddlanguage = valpos = -valpos. + CHECK sy-subrc = 0. " ! no translation -> master translation remain (maybe not OK) + MOVE-CORRESPONDING TO . + DELETE lt_dd07_texts INDEX sy-tabix. " Optimization + ENDLOOP. + + CALL FUNCTION 'DDIF_DOMA_PUT' + EXPORTING + name = lv_name + dd01v_wa = ls_dd01v_tmp + TABLES + dd07v_tab = lt_dd07v_tmp + EXCEPTIONS + doma_not_found = 1 + name_inconsistent = 2 + doma_inconsistent = 3 + put_failure = 4 + put_refused = 5 + OTHERS = 6. + IF sy-subrc <> 0. + lcx_exception=>raise( 'error from DDIF_DOMA_PUT @TEXTS' ). + ENDIF. + ENDLOOP. + + ENDMETHOD. "deserialize_texts + ENDCLASS. "lcl_object_doma IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_dtel.prog.abap b/src/zabapgit_object_dtel.prog.abap index 37bd08de5..92d6730c3 100644 --- a/src/zabapgit_object_dtel.prog.abap +++ b/src/zabapgit_object_dtel.prog.abap @@ -13,6 +13,27 @@ CLASS lcl_object_dtel DEFINITION INHERITING FROM lcl_objects_super FINAL. INTERFACES lif_object. ALIASES mo_files FOR lif_object~mo_files. + PRIVATE SECTION. + + TYPES: BEGIN OF ty_dd04_texts, + ddlanguage TYPE dd04t-ddlanguage, + ddtext TYPE dd04t-ddtext, + reptext TYPE dd04t-reptext, + scrtext_s TYPE dd04t-scrtext_s, + scrtext_m TYPE dd04t-scrtext_m, + scrtext_l TYPE dd04t-scrtext_l, + END OF ty_dd04_texts, + tt_dd04_texts TYPE STANDARD TABLE OF ty_dd04_texts. + + METHODS: + serialize_texts + IMPORTING io_xml TYPE REF TO lcl_xml_output + RAISING lcx_exception, + deserialize_texts + IMPORTING io_xml TYPE REF TO lcl_xml_input + is_dd04v TYPE dd04v + RAISING lcx_exception. + ENDCLASS. "lcl_object_dtel DEFINITION *----------------------------------------------------------------------* @@ -78,9 +99,9 @@ CLASS lcl_object_dtel IMPLEMENTATION. DATA: lv_objname TYPE rsedd0-ddobjname. - lv_objname = ms_item-obj_name. + CALL FUNCTION 'RS_DD_DELETE_OBJ' EXPORTING no_ask = abap_true @@ -103,9 +124,9 @@ CLASS lcl_object_dtel IMPLEMENTATION. ls_dd04v TYPE dd04v, ls_tpara TYPE tpara. - lv_name = ms_item-obj_name. + CALL FUNCTION 'DDIF_DTEL_GET' EXPORTING name = lv_name @@ -116,12 +137,9 @@ CLASS lcl_object_dtel IMPLEMENTATION. EXCEPTIONS illegal_input = 1 OTHERS = 2. - IF sy-subrc <> 0. + IF sy-subrc <> 0 or ls_dd04v IS INITIAL. lcx_exception=>raise( 'Error from DDIF_DTEL_GET' ). ENDIF. - IF ls_dd04v IS INITIAL. - RETURN. " does not exist - ENDIF. CLEAR: ls_dd04v-as4user, ls_dd04v-as4date, @@ -144,6 +162,8 @@ CLASS lcl_object_dtel IMPLEMENTATION. io_xml->add( iv_name = 'TPARA' ig_data = ls_tpara ). + serialize_texts( io_xml ). + ENDMETHOD. "serialize METHOD lif_object~deserialize. @@ -177,8 +197,107 @@ CLASS lcl_object_dtel IMPLEMENTATION. lcx_exception=>raise( 'error from DDIF_DTEL_PUT' ). ENDIF. + deserialize_texts( io_xml = io_xml + is_dd04v = ls_dd04v ). + lcl_objects_activation=>add_item( ms_item ). ENDMETHOD. "deserialize + METHOD serialize_texts. + + DATA: lv_name TYPE ddobjname, + lv_index TYPE i, + ls_dd04v TYPE dd04v, + ls_tpara TYPE tpara, + lt_dd04_texts TYPE tt_dd04_texts, + lt_i18n_langs TYPE TABLE OF langu. + FIELD-SYMBOLS: LIKE LINE OF lt_i18n_langs, + TYPE ty_dd04_texts. + + lv_name = ms_item-obj_name. + + " Collect additional languages + 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 + + LOOP AT lt_i18n_langs ASSIGNING . + lv_index = sy-tabix. + CALL FUNCTION 'DDIF_DTEL_GET' + EXPORTING + name = lv_name + langu = + IMPORTING + dd04v_wa = ls_dd04v + tpara_wa = ls_tpara + EXCEPTIONS + illegal_input = 1 + OTHERS = 2. + IF sy-subrc <> 0 OR ls_dd04v-ddlanguage IS INITIAL. + DELETE lt_i18n_langs INDEX lv_index. " Don't save this lang + CONTINUE. + ENDIF. + + APPEND INITIAL LINE TO lt_dd04_texts ASSIGNING . + MOVE-CORRESPONDING ls_dd04v TO . + + ENDLOOP. + + IF lines( lt_i18n_langs ) > 0. + io_xml->add( iv_name = 'I18N_LANGS' + ig_data = lt_i18n_langs ). + + io_xml->add( iv_name = 'DD04_TEXTS' + ig_data = lt_dd04_texts ). + ENDIF. + + ENDMETHOD. + + METHOD deserialize_texts. + + DATA: lv_name TYPE ddobjname, + ls_dd04v_tmp TYPE dd04v, + lt_i18n_langs TYPE TABLE OF langu, + lt_dd04_texts TYPE tt_dd04_texts. + FIELD-SYMBOLS: LIKE LINE OF lt_i18n_langs, + TYPE ty_dd04_texts. + + lv_name = ms_item-obj_name. + + io_xml->read( EXPORTING iv_name = 'I18N_LANGS' + CHANGING cg_data = lt_i18n_langs ). + + io_xml->read( EXPORTING iv_name = 'DD04_TEXTS' + CHANGING cg_data = lt_dd04_texts ). + + SORT: lt_i18n_langs, lt_dd04_texts BY ddlanguage. " Optimization + LOOP AT lt_i18n_langs ASSIGNING . + + " Data element description + ls_dd04v_tmp = is_dd04v. + READ TABLE lt_dd04_texts ASSIGNING WITH KEY ddlanguage = . + IF sy-subrc > 0. + lcx_exception=>raise( |DD04_TEXTS cannot find lang { } in XML| ). + ENDIF. + MOVE-CORRESPONDING TO ls_dd04v_tmp. + CALL FUNCTION 'DDIF_DTEL_PUT' + EXPORTING + name = lv_name + dd04v_wa = ls_dd04v_tmp + EXCEPTIONS + dtel_not_found = 1 + name_inconsistent = 2 + dtel_inconsistent = 3 + put_failure = 4 + put_refused = 5 + OTHERS = 6. + IF sy-subrc <> 0. + lcx_exception=>raise( 'error from DDIF_DTEL_PUT @TEXTS' ). + ENDIF. + ENDLOOP. + + ENDMETHOD. + ENDCLASS. "lcl_object_dtel IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_objects.prog.abap b/src/zabapgit_objects.prog.abap index a3e110ea4..2d6b72a3b 100644 --- a/src/zabapgit_objects.prog.abap +++ b/src/zabapgit_objects.prog.abap @@ -1517,7 +1517,14 @@ CLASS lcl_objects DEFINITION FINAL. CLASS-METHODS supported_list RETURNING VALUE(rt_types) TYPE ty_types_tt. + CLASS-METHODS is_language_installed + IMPORTING iv_language TYPE langu + RETURNING VALUE(rv_yes) TYPE abap_bool. + PRIVATE SECTION. + + CLASS-DATA: mv_langs_installed type scplangs. + CLASS-METHODS check_duplicates IMPORTING it_files TYPE ty_files_tt RAISING lcx_exception. diff --git a/src/zabapgit_objects_impl.prog.abap b/src/zabapgit_objects_impl.prog.abap index 4cb47a21f..0f64bbb3c 100644 --- a/src/zabapgit_objects_impl.prog.abap +++ b/src/zabapgit_objects_impl.prog.abap @@ -221,6 +221,18 @@ CLASS lcl_objects IMPLEMENTATION. ENDMETHOD. "supported_list + METHOD is_language_installed. + + IF mv_langs_installed IS INITIAL. + CALL FUNCTION 'RSAQ_READ_INSTALLED_LANGUAGES' + IMPORTING + inst_languages = mv_langs_installed. + ENDIF. + + rv_yes = boolc( mv_langs_installed CA iv_language ). + + ENDMETHOD. "is_language_installed + METHOD exists. DATA: li_obj TYPE REF TO lif_object. From 4b5b835f1b8782a8126507259c830f5f4e83980f Mon Sep 17 00:00:00 2001 From: larshp Date: Wed, 2 Nov 2016 08:49:32 +0000 Subject: [PATCH 6/6] bump version to v1.19.0, and fix #406 --- src/zabapgit.prog.abap | 2 +- src/zabapgit_object_dtel.prog.abap | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index c2f0038c0..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.7'. "#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