mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 04:08:27 +08:00
upport zcl_abapgit_convert (#6406)
This commit is contained in:
parent
83e43dfc04
commit
9284a7342e
|
@ -101,10 +101,6 @@ CLASS zcl_abapgit_convert DEFINITION
|
|||
|
||||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
|
||||
CLASS-DATA go_convert_out TYPE REF TO cl_abap_conv_out_ce .
|
||||
CLASS-DATA go_convert_in TYPE REF TO cl_abap_conv_in_ce .
|
||||
|
||||
CLASS-METHODS xstring_remove_bom
|
||||
IMPORTING
|
||||
iv_xstr TYPE xsequence
|
||||
|
@ -114,7 +110,7 @@ ENDCLASS.
|
|||
|
||||
|
||||
|
||||
CLASS zcl_abapgit_convert IMPLEMENTATION.
|
||||
CLASS ZCL_ABAPGIT_CONVERT IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD base64_to_xstring.
|
||||
|
@ -156,11 +152,14 @@ CLASS zcl_abapgit_convert IMPLEMENTATION.
|
|||
|
||||
METHOD conversion_exit_isola_output.
|
||||
|
||||
cl_gdt_conversion=>language_code_outbound(
|
||||
language_sap1_to_sap2(
|
||||
EXPORTING
|
||||
im_value = iv_spras
|
||||
IMPORTING
|
||||
ex_value = rv_spras ).
|
||||
im_lang_sap1 = iv_spras
|
||||
RECEIVING
|
||||
re_lang_sap2 = rv_spras
|
||||
EXCEPTIONS
|
||||
no_assignment = 1
|
||||
OTHERS = 2 ). "#EC CI_SUBRC
|
||||
|
||||
TRANSLATE rv_spras TO UPPER CASE.
|
||||
|
||||
|
@ -178,6 +177,62 @@ CLASS zcl_abapgit_convert IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD language_sap1_to_sap2.
|
||||
|
||||
DATA lv_class TYPE string.
|
||||
|
||||
TRY.
|
||||
SELECT SINGLE languageisocode FROM ('I_LANGUAGE')
|
||||
INTO re_lang_sap2
|
||||
WHERE language = im_lang_sap1.
|
||||
IF sy-subrc <> 0.
|
||||
RAISE no_assignment.
|
||||
ENDIF.
|
||||
CATCH cx_sy_dynamic_osql_error.
|
||||
lv_class = 'CL_I18N_LANGUAGES'.
|
||||
CALL METHOD (lv_class)=>sap1_to_sap2
|
||||
EXPORTING
|
||||
im_lang_sap1 = im_lang_sap1
|
||||
RECEIVING
|
||||
re_lang_sap2 = re_lang_sap2
|
||||
EXCEPTIONS
|
||||
no_assignment = 1
|
||||
OTHERS = 2.
|
||||
IF sy-subrc = 1.
|
||||
RAISE no_assignment.
|
||||
ENDIF.
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD language_sap2_to_sap1.
|
||||
|
||||
DATA lv_class TYPE string.
|
||||
|
||||
TRY.
|
||||
SELECT SINGLE language FROM ('I_LANGUAGE')
|
||||
INTO re_lang_sap1
|
||||
WHERE languageisocode = im_lang_sap2.
|
||||
IF sy-subrc <> 0.
|
||||
RAISE no_assignment.
|
||||
ENDIF.
|
||||
CATCH cx_sy_dynamic_osql_error.
|
||||
lv_class = 'CL_I18N_LANGUAGES'.
|
||||
CALL METHOD (lv_class)=>sap2_to_sap1
|
||||
EXPORTING
|
||||
im_lang_sap2 = im_lang_sap2
|
||||
RECEIVING
|
||||
re_lang_sap1 = re_lang_sap1
|
||||
EXCEPTIONS
|
||||
no_assignment = 1
|
||||
OTHERS = 2.
|
||||
IF sy-subrc = 1.
|
||||
RAISE no_assignment.
|
||||
ENDIF.
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD split_string.
|
||||
|
||||
FIND FIRST OCCURRENCE OF cl_abap_char_utilities=>cr_lf IN iv_string.
|
||||
|
@ -206,7 +261,7 @@ CLASS zcl_abapgit_convert IMPLEMENTATION.
|
|||
|
||||
APPEND INITIAL LINE TO et_tab ASSIGNING <lg_line>.
|
||||
<lg_line> = iv_str.
|
||||
DESCRIBE FIELD <lg_line> LENGTH lv_length IN CHARACTER MODE.
|
||||
lv_length = cl_abap_typedescr=>describe_by_data( <lg_line> )->length / cl_abap_char_utilities=>charsize.
|
||||
lv_iterations = ev_size DIV lv_length.
|
||||
|
||||
DO lv_iterations TIMES.
|
||||
|
@ -227,25 +282,7 @@ CLASS zcl_abapgit_convert IMPLEMENTATION.
|
|||
|
||||
METHOD string_to_xstring_utf8.
|
||||
|
||||
DATA lx_error TYPE REF TO cx_root.
|
||||
|
||||
TRY.
|
||||
IF go_convert_out IS INITIAL.
|
||||
go_convert_out = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' ).
|
||||
ENDIF.
|
||||
|
||||
go_convert_out->convert(
|
||||
EXPORTING
|
||||
data = iv_string
|
||||
IMPORTING
|
||||
buffer = rv_xstring ).
|
||||
|
||||
CATCH cx_parameter_invalid_range
|
||||
cx_sy_codepage_converter_init
|
||||
cx_sy_conversion_codepage
|
||||
cx_parameter_invalid_type INTO lx_error.
|
||||
zcx_abapgit_exception=>raise_with_text( lx_error ).
|
||||
ENDTRY.
|
||||
rv_xstring = lcl_out=>convert( iv_string ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
@ -295,7 +332,8 @@ CLASS zcl_abapgit_convert IMPLEMENTATION.
|
|||
|
||||
APPEND INITIAL LINE TO et_bintab ASSIGNING <lg_line>.
|
||||
<lg_line> = iv_xstr.
|
||||
DESCRIBE FIELD <lg_line> LENGTH lv_length IN BYTE MODE.
|
||||
|
||||
lv_length = cl_abap_typedescr=>describe_by_data( <lg_line> )->length.
|
||||
lv_iterations = ev_size DIV lv_length.
|
||||
|
||||
DO lv_iterations TIMES.
|
||||
|
@ -317,8 +355,7 @@ CLASS zcl_abapgit_convert IMPLEMENTATION.
|
|||
|
||||
METHOD xstring_to_string_utf8.
|
||||
|
||||
DATA lx_error TYPE REF TO cx_root.
|
||||
DATA lv_data TYPE xstring.
|
||||
DATA lv_data TYPE xstring.
|
||||
DATA lv_length TYPE i.
|
||||
|
||||
" Remove BOM for non-Unicode systems
|
||||
|
@ -329,24 +366,9 @@ CLASS zcl_abapgit_convert IMPLEMENTATION.
|
|||
lv_length = xstrlen( lv_data ).
|
||||
ENDIF.
|
||||
|
||||
TRY.
|
||||
IF go_convert_in IS INITIAL.
|
||||
go_convert_in = cl_abap_conv_in_ce=>create( encoding = 'UTF-8' ).
|
||||
ENDIF.
|
||||
|
||||
go_convert_in->convert(
|
||||
EXPORTING
|
||||
input = lv_data
|
||||
n = lv_length
|
||||
IMPORTING
|
||||
data = rv_string ).
|
||||
|
||||
CATCH cx_parameter_invalid_range
|
||||
cx_sy_codepage_converter_init
|
||||
cx_sy_conversion_codepage
|
||||
cx_parameter_invalid_type INTO lx_error.
|
||||
zcx_abapgit_exception=>raise_with_text( lx_error ).
|
||||
ENDTRY.
|
||||
rv_string = lcl_in=>convert(
|
||||
iv_data = lv_data
|
||||
iv_length = lv_length ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
@ -365,58 +387,4 @@ CLASS zcl_abapgit_convert IMPLEMENTATION.
|
|||
GET BIT 8 OF iv_x INTO rv_bitbyte+7(1).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD language_sap1_to_sap2.
|
||||
|
||||
DATA lv_class TYPE string.
|
||||
|
||||
TRY.
|
||||
SELECT SINGLE languageisocode FROM ('I_LANGUAGE')
|
||||
INTO re_lang_sap2
|
||||
WHERE language = im_lang_sap1.
|
||||
IF sy-subrc <> 0.
|
||||
RAISE no_assignment.
|
||||
ENDIF.
|
||||
CATCH cx_sy_dynamic_osql_error.
|
||||
lv_class = 'CL_I18N_LANGUAGES'.
|
||||
CALL METHOD (lv_class)=>sap1_to_sap2
|
||||
EXPORTING
|
||||
im_lang_sap1 = im_lang_sap1
|
||||
RECEIVING
|
||||
re_lang_sap2 = re_lang_sap2
|
||||
EXCEPTIONS
|
||||
no_assignment = 1
|
||||
OTHERS = 2.
|
||||
IF sy-subrc = 1.
|
||||
RAISE no_assignment.
|
||||
ENDIF.
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD language_sap2_to_sap1.
|
||||
|
||||
DATA lv_class TYPE string.
|
||||
|
||||
TRY.
|
||||
SELECT SINGLE language FROM ('I_LANGUAGE')
|
||||
INTO re_lang_sap1
|
||||
WHERE languageisocode = im_lang_sap2.
|
||||
IF sy-subrc <> 0.
|
||||
RAISE no_assignment.
|
||||
ENDIF.
|
||||
CATCH cx_sy_dynamic_osql_error.
|
||||
lv_class = 'CL_I18N_LANGUAGES'.
|
||||
CALL METHOD (lv_class)=>sap2_to_sap1
|
||||
EXPORTING
|
||||
im_lang_sap2 = im_lang_sap2
|
||||
RECEIVING
|
||||
re_lang_sap1 = re_lang_sap1
|
||||
EXCEPTIONS
|
||||
no_assignment = 1
|
||||
OTHERS = 2.
|
||||
IF sy-subrc = 1.
|
||||
RAISE no_assignment.
|
||||
ENDIF.
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
|
118
src/utils/zcl_abapgit_convert.clas.locals_imp.abap
Normal file
118
src/utils/zcl_abapgit_convert.clas.locals_imp.abap
Normal file
|
@ -0,0 +1,118 @@
|
|||
CLASS lcl_in DEFINITION.
|
||||
PUBLIC SECTION.
|
||||
CLASS-METHODS convert
|
||||
IMPORTING
|
||||
!iv_data TYPE xsequence
|
||||
!iv_length TYPE i OPTIONAL
|
||||
RETURNING
|
||||
VALUE(rv_string) TYPE string
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
PRIVATE SECTION.
|
||||
CLASS-DATA go_conv_new TYPE REF TO object.
|
||||
CLASS-DATA go_conv_old TYPE REF TO object.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_in IMPLEMENTATION.
|
||||
METHOD convert.
|
||||
|
||||
DATA lv_class TYPE string.
|
||||
DATA lx_error TYPE REF TO cx_root.
|
||||
|
||||
IF go_conv_new IS INITIAL AND go_conv_old IS INITIAL.
|
||||
TRY.
|
||||
CALL METHOD ('CL_ABAP_CONV_CODEPAGE')=>create_in
|
||||
RECEIVING
|
||||
instance = go_conv_new.
|
||||
CATCH cx_sy_dyn_call_illegal_class.
|
||||
lv_class = 'CL_ABAP_CONV_IN_CE'.
|
||||
CALL METHOD (lv_class)=>create
|
||||
EXPORTING
|
||||
encoding = 'UTF-8'
|
||||
RECEIVING
|
||||
conv = go_conv_old.
|
||||
ENDTRY.
|
||||
ENDIF.
|
||||
|
||||
TRY.
|
||||
IF go_conv_new IS NOT INITIAL.
|
||||
CALL METHOD go_conv_new->('IF_ABAP_CONV_IN~CONVERT')
|
||||
EXPORTING
|
||||
source = iv_data
|
||||
RECEIVING
|
||||
result = rv_string.
|
||||
rv_string = rv_string(iv_length).
|
||||
ELSE.
|
||||
CALL METHOD go_conv_old->('CONVERT')
|
||||
EXPORTING
|
||||
input = iv_data
|
||||
n = iv_length
|
||||
IMPORTING
|
||||
data = rv_string.
|
||||
ENDIF.
|
||||
CATCH cx_parameter_invalid_range
|
||||
cx_sy_codepage_converter_init
|
||||
cx_sy_conversion_codepage
|
||||
cx_parameter_invalid_type INTO lx_error.
|
||||
zcx_abapgit_exception=>raise_with_text( lx_error ).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_out DEFINITION.
|
||||
PUBLIC SECTION.
|
||||
CLASS-METHODS convert
|
||||
IMPORTING
|
||||
!iv_string TYPE string
|
||||
RETURNING
|
||||
VALUE(rv_xstring) TYPE xstring
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
PRIVATE SECTION.
|
||||
CLASS-DATA go_conv_new TYPE REF TO object.
|
||||
CLASS-DATA go_conv_old TYPE REF TO object.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_out IMPLEMENTATION.
|
||||
METHOD convert.
|
||||
DATA lx_error TYPE REF TO cx_root.
|
||||
DATA lv_class TYPE string.
|
||||
|
||||
IF go_conv_new IS INITIAL AND go_conv_old IS INITIAL.
|
||||
TRY.
|
||||
CALL METHOD ('CL_ABAP_CONV_CODEPAGE')=>create_out
|
||||
RECEIVING
|
||||
instance = go_conv_new.
|
||||
CATCH cx_sy_dyn_call_illegal_class.
|
||||
lv_class = 'CL_ABAP_CONV_OUT_CE'.
|
||||
CALL METHOD (lv_class)=>create
|
||||
EXPORTING
|
||||
encoding = 'UTF-8'
|
||||
RECEIVING
|
||||
conv = go_conv_old.
|
||||
ENDTRY.
|
||||
ENDIF.
|
||||
|
||||
TRY.
|
||||
IF go_conv_new IS NOT INITIAL.
|
||||
CALL METHOD go_conv_new->('IF_ABAP_CONV_OUT~CONVERT')
|
||||
EXPORTING
|
||||
source = iv_string
|
||||
RECEIVING
|
||||
result = rv_xstring.
|
||||
ELSE.
|
||||
CALL METHOD go_conv_old->('CONVERT')
|
||||
EXPORTING
|
||||
data = iv_string
|
||||
IMPORTING
|
||||
buffer = rv_xstring.
|
||||
ENDIF.
|
||||
CATCH cx_parameter_invalid_range
|
||||
cx_sy_codepage_converter_init
|
||||
cx_sy_conversion_codepage
|
||||
cx_parameter_invalid_type INTO lx_error.
|
||||
zcx_abapgit_exception=>raise_with_text( lx_error ).
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
Loading…
Reference in New Issue
Block a user