diff --git a/src/objects/zcl_abapgit_object_view.clas.abap b/src/objects/zcl_abapgit_object_view.clas.abap index ba9caa782..2dc959c07 100644 --- a/src/objects/zcl_abapgit_object_view.clas.abap +++ b/src/objects/zcl_abapgit_object_view.clas.abap @@ -11,7 +11,12 @@ CLASS zcl_abapgit_object_view DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje ty_dd28j TYPE STANDARD TABLE OF dd28j WITH NON-UNIQUE DEFAULT KEY, ty_dd28v TYPE STANDARD TABLE OF dd28v - WITH NON-UNIQUE DEFAULT KEY. + WITH NON-UNIQUE DEFAULT KEY, + BEGIN OF ty_dd25_text, + ddlanguage TYPE dd25t-ddlanguage, + ddtext TYPE dd25t-ddtext, + END OF ty_dd25_text , + ty_dd25_texts TYPE STANDARD TABLE OF ty_dd25_text. CONSTANTS: BEGIN OF co_viewclass, help TYPE viewclass VALUE 'H', database TYPE viewclass VALUE 'D', @@ -28,14 +33,29 @@ CLASS zcl_abapgit_object_view DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje METHODS: read_view + IMPORTING + iv_language TYPE sy-langu EXPORTING - ev_state TYPE ddgotstate - es_dd25v TYPE dd25v - es_dd09l TYPE dd09l - et_dd26v TYPE ty_dd26v - et_dd27p TYPE ty_dd27p - et_dd28j TYPE ty_dd28j - et_dd28v TYPE ty_dd28v + ev_state TYPE ddgotstate + es_dd25v TYPE dd25v + es_dd09l TYPE dd09l + et_dd26v TYPE ty_dd26v + et_dd27p TYPE ty_dd27p + et_dd28j TYPE ty_dd28j + et_dd28v TYPE ty_dd28v + RAISING + zcx_abapgit_exception, + + serialize_texts + IMPORTING + io_xml TYPE REF TO zif_abapgit_xml_output + RAISING + zcx_abapgit_exception, + + deserialize_texts + IMPORTING + io_xml TYPE REF TO zif_abapgit_xml_input + is_dd25v TYPE dd25v RAISING zcx_abapgit_exception. ENDCLASS. @@ -55,7 +75,7 @@ CLASS zcl_abapgit_object_view IMPLEMENTATION. EXPORTING name = lv_name state = 'A' - langu = mv_language + langu = iv_language IMPORTING gotstate = ev_state dd25v_wa = es_dd25v @@ -169,6 +189,9 @@ CLASS zcl_abapgit_object_view IMPLEMENTATION. zcx_abapgit_exception=>raise_t100( ). ENDIF. + deserialize_texts( io_xml = io_xml + is_dd25v = ls_dd25v ). + deserialize_longtexts( ii_xml = io_xml iv_longtext_id = c_longtext_id_view ). @@ -248,14 +271,16 @@ CLASS zcl_abapgit_object_view IMPLEMENTATION. FIELD-SYMBOLS: LIKE LINE OF lt_dd27p. read_view( + EXPORTING + iv_language = mv_language IMPORTING - ev_state = lv_state - es_dd25v = ls_dd25v - es_dd09l = ls_dd09l - et_dd26v = lt_dd26v - et_dd27p = lt_dd27p - et_dd28j = lt_dd28j - et_dd28v = lt_dd28v ). + ev_state = lv_state + es_dd25v = ls_dd25v + es_dd09l = ls_dd09l + et_dd26v = lt_dd26v + et_dd27p = lt_dd27p + et_dd28j = lt_dd28j + et_dd28v = lt_dd28v ). IF ls_dd25v IS INITIAL OR lv_state <> 'A'. RETURN. @@ -313,8 +338,127 @@ CLASS zcl_abapgit_object_view IMPLEMENTATION. io_xml->add( ig_data = lt_dd28v iv_name = 'DD28V_TABLE' ). + serialize_texts( io_xml ). + serialize_longtexts( ii_xml = io_xml iv_longtext_id = c_longtext_id_view ). ENDMETHOD. + + + METHOD serialize_texts. + + DATA: + lv_index TYPE i, + ls_dd25v TYPE dd25v, + lt_dd25_texts TYPE ty_dd25_texts, + lt_i18n_langs TYPE TABLE OF langu, + lt_language_filter TYPE zif_abapgit_environment=>ty_system_language_filter. + + FIELD-SYMBOLS: + LIKE LINE OF lt_i18n_langs, + LIKE LINE OF lt_dd25_texts. + + IF io_xml->i18n_params( )-main_language_only = abap_true. + RETURN. + ENDIF. + + " Collect additional languages, skip main lang - it was serialized already + lt_language_filter = zcl_abapgit_factory=>get_environment( )->get_system_language_filter( ). + SELECT DISTINCT ddlanguage AS langu INTO TABLE lt_i18n_langs + FROM dd25v + WHERE viewname = ms_item-obj_name + AND ddlanguage IN lt_language_filter + AND ddlanguage <> mv_language. "#EC CI_SUBRC + + LOOP AT lt_i18n_langs ASSIGNING . + lv_index = sy-tabix. + CLEAR: ls_dd25v. + + TRY. + read_view( + EXPORTING + iv_language = + IMPORTING + es_dd25v = ls_dd25v ). + + CATCH zcx_abapgit_exception. + CONTINUE. + ENDTRY. + + IF ls_dd25v-ddlanguage IS INITIAL. + DELETE lt_i18n_langs INDEX lv_index. " Don't save this lang + CONTINUE. + ENDIF. + + APPEND INITIAL LINE TO lt_dd25_texts ASSIGNING . + MOVE-CORRESPONDING ls_dd25v TO . + + ENDLOOP. + + SORT lt_i18n_langs ASCENDING. + SORT lt_dd25_texts BY ddlanguage ASCENDING. + + IF lines( lt_i18n_langs ) > 0. + io_xml->add( iv_name = 'I18N_LANGS' + ig_data = lt_i18n_langs ). + + io_xml->add( iv_name = 'DD25_TEXTS' + ig_data = lt_dd25_texts ). + ENDIF. + + ENDMETHOD. + + + METHOD deserialize_texts. + + DATA: + lv_name TYPE ddobjname, + lt_i18n_langs TYPE TABLE OF langu, + lt_dd25_texts TYPE ty_dd25_texts, + ls_dd25v_tmp TYPE dd25v. + + FIELD-SYMBOLS: + TYPE langu, + LIKE LINE OF lt_dd25_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 = 'DD25_TEXTS' + CHANGING cg_data = lt_dd25_texts ). + + SORT lt_i18n_langs. + SORT lt_dd25_texts BY ddlanguage. + + LOOP AT lt_i18n_langs ASSIGNING . + + " View description + ls_dd25v_tmp = is_dd25v. + READ TABLE lt_dd25_texts ASSIGNING WITH KEY ddlanguage = . + IF sy-subrc <> 0. + zcx_abapgit_exception=>raise( |DD25_TEXTS cannot find lang { } in XML| ). + ENDIF. + MOVE-CORRESPONDING TO ls_dd25v_tmp. + CALL FUNCTION 'DDIF_VIEW_PUT' + EXPORTING + name = lv_name + dd25v_wa = ls_dd25v_tmp + EXCEPTIONS + view_not_found = 1 + name_inconsistent = 2 + view_inconsistent = 3 + put_failure = 4 + put_refused = 5 + OTHERS = 6. + IF sy-subrc <> 0. + zcx_abapgit_exception=>raise_t100( ). + ENDIF. + + ENDLOOP. + + ENDMETHOD. + ENDCLASS.