mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00
parent
f8564cb679
commit
86751b6961
|
@ -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: <ls_dd27p> 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:
|
||||
<lv_lang> LIKE LINE OF lt_i18n_langs,
|
||||
<ls_dd25_text> 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_lang>.
|
||||
lv_index = sy-tabix.
|
||||
CLEAR: ls_dd25v.
|
||||
|
||||
TRY.
|
||||
read_view(
|
||||
EXPORTING
|
||||
iv_language = <lv_lang>
|
||||
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 <ls_dd25_text>.
|
||||
MOVE-CORRESPONDING ls_dd25v TO <ls_dd25_text>.
|
||||
|
||||
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:
|
||||
<lv_lang> TYPE langu,
|
||||
<ls_dd25_text> 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 <lv_lang>.
|
||||
|
||||
" View description
|
||||
ls_dd25v_tmp = is_dd25v.
|
||||
READ TABLE lt_dd25_texts ASSIGNING <ls_dd25_text> WITH KEY ddlanguage = <lv_lang>.
|
||||
IF sy-subrc <> 0.
|
||||
zcx_abapgit_exception=>raise( |DD25_TEXTS cannot find lang { <lv_lang> } in XML| ).
|
||||
ENDIF.
|
||||
MOVE-CORRESPONDING <ls_dd25_text> 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.
|
||||
|
|
Loading…
Reference in New Issue
Block a user