mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 04:08:27 +08:00
i18n texts, doma, dtel
This commit is contained in:
parent
48cfcbae94
commit
59655bd2b6
|
@ -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,147 @@ 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: <lang> LIKE LINE OF lt_i18n_langs,
|
||||
<dd07v> LIKE LINE OF lt_dd07v,
|
||||
<dd01_text> LIKE LINE OF lt_dd01_texts,
|
||||
<dd07_text> 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 <lang>.
|
||||
lv_index = sy-tabix.
|
||||
|
||||
CALL FUNCTION 'DDIF_DOMA_GET'
|
||||
EXPORTING
|
||||
name = lv_name
|
||||
langu = <lang>
|
||||
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 <dd01_text>.
|
||||
MOVE-CORRESPONDING ls_dd01v TO <dd01_text>.
|
||||
|
||||
LOOP AT lt_dd07v ASSIGNING <dd07v>.
|
||||
APPEND INITIAL LINE TO lt_dd07_texts ASSIGNING <dd07_text>.
|
||||
MOVE-CORRESPONDING <dd07v> TO <dd07_text>.
|
||||
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: <lang> LIKE LINE OF lt_i18n_langs,
|
||||
<dd07v> LIKE LINE OF it_dd07v,
|
||||
<dd01_text> LIKE LINE OF lt_dd01_texts,
|
||||
<dd07_text> 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 <lang>.
|
||||
|
||||
" Skip languages that are not installed
|
||||
CHECK lcl_objects=>is_language_installed( <lang> ) = abap_true.
|
||||
|
||||
" Domain description
|
||||
ls_dd01v_tmp = is_dd01v.
|
||||
READ TABLE lt_dd01_texts ASSIGNING <dd01_text> WITH KEY ddlanguage = <lang>.
|
||||
IF sy-subrc > 0.
|
||||
lcx_exception=>raise( |DD01_TEXTS cannot find lang { <lang> } in XML| ).
|
||||
ENDIF.
|
||||
MOVE-CORRESPONDING <dd01_text> TO ls_dd01v_tmp.
|
||||
|
||||
" Domain values
|
||||
lt_dd07v_tmp = it_dd07v.
|
||||
LOOP AT lt_dd07v_tmp ASSIGNING <dd07v>.
|
||||
READ TABLE lt_dd07_texts ASSIGNING <dd07_text>
|
||||
WITH KEY ddlanguage = <lang> valpos = <dd07v>-valpos.
|
||||
CHECK sy-subrc = 0. " ! no translation -> master translation remain (maybe not OK)
|
||||
MOVE-CORRESPONDING <dd07_text> TO <dd07v>.
|
||||
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
|
|
@ -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,110 @@ 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: <lang> LIKE LINE OF lt_i18n_langs,
|
||||
<dd04_text> 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 <lang>.
|
||||
lv_index = sy-tabix.
|
||||
CALL FUNCTION 'DDIF_DTEL_GET'
|
||||
EXPORTING
|
||||
name = lv_name
|
||||
langu = <lang>
|
||||
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 <dd04_text>.
|
||||
MOVE-CORRESPONDING ls_dd04v TO <dd04_text>.
|
||||
|
||||
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: <lang> LIKE LINE OF lt_i18n_langs,
|
||||
<dd04_text> 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 <lang>.
|
||||
|
||||
" Skip languages that are not installed
|
||||
CHECK lcl_objects=>is_language_installed( <lang> ) = abap_true.
|
||||
|
||||
" Data element description
|
||||
ls_dd04v_tmp = is_dd04v.
|
||||
READ TABLE lt_dd04_texts ASSIGNING <dd04_text> WITH KEY ddlanguage = <lang>.
|
||||
IF sy-subrc > 0.
|
||||
lcx_exception=>raise( |DD04_TEXTS cannot find lang { <lang> } in XML| ).
|
||||
ENDIF.
|
||||
MOVE-CORRESPONDING <dd04_text> 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
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue
Block a user