mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 04:08:27 +08:00
Refactor: Remove dynamic instantiation of ZCL_ABAPGIT_MESSAGE_HELPER (#3966)
* Refactor: Remove dynamic instantiation of ZCL_ABAPGIT_MESSAGE_HELPER Consolidate `ZCL_ABAPGIT_MESSAGE_HELPER` features into `ZCX_ABAPGIT_EXCEPTION` and removes helper. * Remove helper * Pretty * Update chunk_lib Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
parent
6360ccd08a
commit
42c909e688
|
@ -324,19 +324,19 @@ CLASS ZCL_ABAPGIT_GUI_CHUNK_LIB IMPLEMENTATION.
|
||||||
lv_longtext = ix_error->if_message~get_longtext( abap_true ).
|
lv_longtext = ix_error->if_message~get_longtext( abap_true ).
|
||||||
|
|
||||||
REPLACE FIRST OCCURRENCE OF REGEX
|
REPLACE FIRST OCCURRENCE OF REGEX
|
||||||
|({ zcl_abapgit_message_helper=>gc_section_text-cause }{ cl_abap_char_utilities=>newline })|
|
|({ zcx_abapgit_exception=>gc_section_text-cause }{ cl_abap_char_utilities=>newline })|
|
||||||
IN lv_longtext WITH |<h3>$1</h3>|.
|
IN lv_longtext WITH |<h3>$1</h3>|.
|
||||||
|
|
||||||
REPLACE FIRST OCCURRENCE OF REGEX
|
REPLACE FIRST OCCURRENCE OF REGEX
|
||||||
|({ zcl_abapgit_message_helper=>gc_section_text-system_response }{ cl_abap_char_utilities=>newline })|
|
|({ zcx_abapgit_exception=>gc_section_text-system_response }{ cl_abap_char_utilities=>newline })|
|
||||||
IN lv_longtext WITH |<h3>$1</h3>|.
|
IN lv_longtext WITH |<h3>$1</h3>|.
|
||||||
|
|
||||||
REPLACE FIRST OCCURRENCE OF REGEX
|
REPLACE FIRST OCCURRENCE OF REGEX
|
||||||
|({ zcl_abapgit_message_helper=>gc_section_text-what_to_do }{ cl_abap_char_utilities=>newline })|
|
|({ zcx_abapgit_exception=>gc_section_text-what_to_do }{ cl_abap_char_utilities=>newline })|
|
||||||
IN lv_longtext WITH |<h3>$1</h3>|.
|
IN lv_longtext WITH |<h3>$1</h3>|.
|
||||||
|
|
||||||
REPLACE FIRST OCCURRENCE OF REGEX
|
REPLACE FIRST OCCURRENCE OF REGEX
|
||||||
|({ zcl_abapgit_message_helper=>gc_section_text-sys_admin }{ cl_abap_char_utilities=>newline })|
|
|({ zcx_abapgit_exception=>gc_section_text-sys_admin }{ cl_abap_char_utilities=>newline })|
|
||||||
IN lv_longtext WITH |<h3>$1</h3>|.
|
IN lv_longtext WITH |<h3>$1</h3>|.
|
||||||
|
|
||||||
ri_html->add( |<div id="message" class="message-panel">| ).
|
ri_html->add( |<div id="message" class="message-panel">| ).
|
||||||
|
|
|
@ -1,373 +0,0 @@
|
||||||
CLASS zcl_abapgit_message_helper DEFINITION
|
|
||||||
PUBLIC
|
|
||||||
FINAL
|
|
||||||
CREATE PUBLIC .
|
|
||||||
|
|
||||||
PUBLIC SECTION.
|
|
||||||
|
|
||||||
CONSTANTS:
|
|
||||||
BEGIN OF gc_section_text,
|
|
||||||
cause TYPE string VALUE `Cause`,
|
|
||||||
system_response TYPE string VALUE `System response`,
|
|
||||||
what_to_do TYPE string VALUE `Procedure`,
|
|
||||||
sys_admin TYPE string VALUE `System administration`,
|
|
||||||
END OF gc_section_text .
|
|
||||||
CONSTANTS:
|
|
||||||
BEGIN OF gc_section_token,
|
|
||||||
cause TYPE string VALUE `&CAUSE&`,
|
|
||||||
system_response TYPE string VALUE `&SYSTEM_RESPONSE&`,
|
|
||||||
what_to_do TYPE string VALUE `&WHAT_TO_DO&`,
|
|
||||||
sys_admin TYPE string VALUE `&SYS_ADMIN&`,
|
|
||||||
END OF gc_section_token .
|
|
||||||
|
|
||||||
CLASS-METHODS set_msg_vars_for_clike
|
|
||||||
IMPORTING
|
|
||||||
!iv_text TYPE string .
|
|
||||||
METHODS constructor
|
|
||||||
IMPORTING
|
|
||||||
!io_exception TYPE REF TO zcx_abapgit_exception .
|
|
||||||
METHODS get_t100_longtext
|
|
||||||
RETURNING
|
|
||||||
VALUE(rv_longtext) TYPE string .
|
|
||||||
PROTECTED SECTION.
|
|
||||||
PRIVATE SECTION.
|
|
||||||
|
|
||||||
TYPES:
|
|
||||||
BEGIN OF ty_msg,
|
|
||||||
msgv1 TYPE symsgv,
|
|
||||||
msgv2 TYPE symsgv,
|
|
||||||
msgv3 TYPE symsgv,
|
|
||||||
msgv4 TYPE symsgv,
|
|
||||||
END OF ty_msg .
|
|
||||||
|
|
||||||
DATA:
|
|
||||||
mo_exception TYPE REF TO zcx_abapgit_exception,
|
|
||||||
ms_t100key TYPE scx_t100key.
|
|
||||||
|
|
||||||
CLASS-METHODS split_text
|
|
||||||
IMPORTING
|
|
||||||
!iv_text TYPE string
|
|
||||||
RETURNING
|
|
||||||
VALUE(rs_msg) TYPE ty_msg .
|
|
||||||
METHODS itf_to_string
|
|
||||||
IMPORTING
|
|
||||||
!it_itf TYPE tline_tab
|
|
||||||
RETURNING
|
|
||||||
VALUE(rv_result) TYPE string .
|
|
||||||
METHODS get_t100_longtext_itf
|
|
||||||
RETURNING
|
|
||||||
VALUE(rt_itf) TYPE tline_tab .
|
|
||||||
METHODS remove_empty_section
|
|
||||||
IMPORTING
|
|
||||||
!iv_tabix_from TYPE i
|
|
||||||
!iv_tabix_to TYPE i
|
|
||||||
CHANGING
|
|
||||||
!ct_itf TYPE tline_tab .
|
|
||||||
METHODS replace_section_head_with_text
|
|
||||||
CHANGING
|
|
||||||
!cs_itf TYPE tline .
|
|
||||||
METHODS set_single_msg_var
|
|
||||||
IMPORTING
|
|
||||||
!iv_arg TYPE clike
|
|
||||||
RETURNING
|
|
||||||
VALUE(rv_target) TYPE symsgv .
|
|
||||||
METHODS set_single_msg_var_clike
|
|
||||||
IMPORTING
|
|
||||||
!iv_arg TYPE clike
|
|
||||||
RETURNING
|
|
||||||
VALUE(rv_target) TYPE symsgv .
|
|
||||||
METHODS set_single_msg_var_numeric
|
|
||||||
IMPORTING
|
|
||||||
!iv_arg TYPE numeric
|
|
||||||
RETURNING
|
|
||||||
VALUE(rv_target) TYPE symsgv .
|
|
||||||
METHODS set_single_msg_var_xseq
|
|
||||||
IMPORTING
|
|
||||||
!iv_arg TYPE xsequence
|
|
||||||
RETURNING
|
|
||||||
VALUE(rv_target) TYPE symsgv .
|
|
||||||
ENDCLASS.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CLASS ZCL_ABAPGIT_MESSAGE_HELPER IMPLEMENTATION.
|
|
||||||
|
|
||||||
|
|
||||||
METHOD constructor.
|
|
||||||
|
|
||||||
mo_exception = io_exception.
|
|
||||||
ms_t100key = io_exception->if_t100_message~t100key.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
|
|
||||||
METHOD get_t100_longtext.
|
|
||||||
|
|
||||||
* method is called dynamically from ZCX_ABAPGIT_EXCEPTION
|
|
||||||
|
|
||||||
rv_longtext = itf_to_string( get_t100_longtext_itf( ) ).
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
|
|
||||||
METHOD get_t100_longtext_itf.
|
|
||||||
|
|
||||||
DATA: lv_docu_key TYPE doku_obj.
|
|
||||||
|
|
||||||
lv_docu_key = ms_t100key-msgid && ms_t100key-msgno.
|
|
||||||
|
|
||||||
CALL FUNCTION 'DOCU_GET'
|
|
||||||
EXPORTING
|
|
||||||
id = 'NA'
|
|
||||||
langu = sy-langu
|
|
||||||
object = lv_docu_key
|
|
||||||
typ = 'E'
|
|
||||||
TABLES
|
|
||||||
line = rt_itf
|
|
||||||
EXCEPTIONS
|
|
||||||
OTHERS = 1.
|
|
||||||
|
|
||||||
IF sy-subrc = 0.
|
|
||||||
sy-msgv1 = set_single_msg_var( iv_arg = ms_t100key-attr1 ).
|
|
||||||
|
|
||||||
REPLACE ALL OCCURRENCES OF '&V1&' IN TABLE rt_itf WITH sy-msgv1.
|
|
||||||
|
|
||||||
sy-msgv2 = set_single_msg_var( iv_arg = ms_t100key-attr2 ).
|
|
||||||
|
|
||||||
REPLACE ALL OCCURRENCES OF '&V2&' IN TABLE rt_itf WITH sy-msgv2.
|
|
||||||
|
|
||||||
sy-msgv3 = set_single_msg_var( iv_arg = ms_t100key-attr3 ).
|
|
||||||
|
|
||||||
REPLACE ALL OCCURRENCES OF '&V3&' IN TABLE rt_itf WITH sy-msgv3.
|
|
||||||
|
|
||||||
sy-msgv4 = set_single_msg_var( iv_arg = ms_t100key-attr4 ).
|
|
||||||
|
|
||||||
REPLACE ALL OCCURRENCES OF '&V4&' IN TABLE rt_itf WITH sy-msgv4.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
|
|
||||||
METHOD itf_to_string.
|
|
||||||
|
|
||||||
CONSTANTS: lc_format_section TYPE string VALUE 'U1'.
|
|
||||||
|
|
||||||
DATA:
|
|
||||||
lt_stream TYPE TABLE OF tdline,
|
|
||||||
lt_string TYPE TABLE OF string,
|
|
||||||
lv_string LIKE LINE OF lt_string,
|
|
||||||
lt_itf TYPE tline_tab,
|
|
||||||
lv_has_content TYPE abap_bool,
|
|
||||||
lv_tabix_from TYPE syst-tabix,
|
|
||||||
lv_tabix_to TYPE syst-tabix.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_itf_section> TYPE tline,
|
|
||||||
<ls_itf_section_item> TYPE tline.
|
|
||||||
|
|
||||||
lt_itf = it_itf.
|
|
||||||
|
|
||||||
" You should remember that we replace the U1 format because
|
|
||||||
" that preserves the section header of longtexts.
|
|
||||||
LOOP AT lt_itf ASSIGNING <ls_itf_section>
|
|
||||||
WHERE tdformat = lc_format_section.
|
|
||||||
|
|
||||||
CLEAR:
|
|
||||||
lv_has_content,
|
|
||||||
lv_tabix_to.
|
|
||||||
|
|
||||||
lv_tabix_from = sy-tabix.
|
|
||||||
|
|
||||||
LOOP AT lt_itf ASSIGNING <ls_itf_section_item>
|
|
||||||
FROM sy-tabix + 1.
|
|
||||||
|
|
||||||
IF <ls_itf_section_item>-tdformat = lc_format_section.
|
|
||||||
lv_tabix_to = sy-tabix.
|
|
||||||
EXIT.
|
|
||||||
ELSEIF <ls_itf_section_item>-tdline IS NOT INITIAL.
|
|
||||||
lv_has_content = abap_true.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
IF lv_has_content = abap_false.
|
|
||||||
remove_empty_section(
|
|
||||||
EXPORTING
|
|
||||||
iv_tabix_from = lv_tabix_from
|
|
||||||
iv_tabix_to = lv_tabix_to
|
|
||||||
CHANGING
|
|
||||||
ct_itf = lt_itf ).
|
|
||||||
CONTINUE.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
replace_section_head_with_text( CHANGING cs_itf = <ls_itf_section> ).
|
|
||||||
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
CALL FUNCTION 'CONVERT_ITF_TO_STREAM_TEXT'
|
|
||||||
EXPORTING
|
|
||||||
lf = 'X'
|
|
||||||
IMPORTING
|
|
||||||
stream_lines = lt_string
|
|
||||||
TABLES
|
|
||||||
itf_text = lt_itf
|
|
||||||
text_stream = lt_stream.
|
|
||||||
|
|
||||||
LOOP AT lt_string INTO lv_string.
|
|
||||||
IF sy-tabix = 1.
|
|
||||||
rv_result = lv_string.
|
|
||||||
ELSE.
|
|
||||||
CONCATENATE rv_result lv_string
|
|
||||||
INTO rv_result
|
|
||||||
SEPARATED BY cl_abap_char_utilities=>newline.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
|
|
||||||
METHOD remove_empty_section.
|
|
||||||
IF iv_tabix_to BETWEEN iv_tabix_from AND lines( ct_itf ).
|
|
||||||
DELETE ct_itf FROM iv_tabix_from TO iv_tabix_to.
|
|
||||||
ELSE.
|
|
||||||
DELETE ct_itf FROM iv_tabix_from.
|
|
||||||
ENDIF.
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
|
|
||||||
METHOD replace_section_head_with_text.
|
|
||||||
|
|
||||||
CASE cs_itf-tdline.
|
|
||||||
WHEN gc_section_token-cause.
|
|
||||||
cs_itf-tdline = gc_section_text-cause.
|
|
||||||
WHEN gc_section_token-system_response.
|
|
||||||
cs_itf-tdline = gc_section_text-system_response.
|
|
||||||
WHEN gc_section_token-what_to_do.
|
|
||||||
cs_itf-tdline = gc_section_text-what_to_do.
|
|
||||||
WHEN gc_section_token-sys_admin.
|
|
||||||
cs_itf-tdline = gc_section_text-sys_admin.
|
|
||||||
ENDCASE.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
|
|
||||||
METHOD set_msg_vars_for_clike.
|
|
||||||
|
|
||||||
DATA: ls_msg TYPE ty_msg,
|
|
||||||
lv_dummy TYPE string.
|
|
||||||
|
|
||||||
ls_msg = split_text( iv_text ).
|
|
||||||
|
|
||||||
MESSAGE e001(00) WITH ls_msg-msgv1 ls_msg-msgv2 ls_msg-msgv3 ls_msg-msgv4 INTO lv_dummy.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
|
|
||||||
METHOD set_single_msg_var.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS <lg_arg> TYPE any.
|
|
||||||
|
|
||||||
IF iv_arg IS INITIAL.
|
|
||||||
RETURN.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
ASSIGN mo_exception->(iv_arg) TO <lg_arg>.
|
|
||||||
IF sy-subrc <> 0.
|
|
||||||
CONCATENATE '&' iv_arg '&' INTO rv_target.
|
|
||||||
RETURN.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
TRY.
|
|
||||||
rv_target = set_single_msg_var_clike( iv_arg = <lg_arg> ).
|
|
||||||
RETURN.
|
|
||||||
CATCH cx_sy_dyn_call_illegal_type ##no_handler.
|
|
||||||
ENDTRY.
|
|
||||||
|
|
||||||
TRY.
|
|
||||||
rv_target = set_single_msg_var_numeric( iv_arg = <lg_arg> ).
|
|
||||||
RETURN.
|
|
||||||
CATCH cx_sy_dyn_call_illegal_type ##no_handler.
|
|
||||||
ENDTRY.
|
|
||||||
|
|
||||||
TRY.
|
|
||||||
rv_target = set_single_msg_var_xseq( iv_arg = <lg_arg> ).
|
|
||||||
RETURN.
|
|
||||||
CATCH cx_sy_dyn_call_illegal_type ##no_handler.
|
|
||||||
ENDTRY.
|
|
||||||
|
|
||||||
CONCATENATE '&' iv_arg '&' INTO rv_target.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
|
|
||||||
METHOD set_single_msg_var_clike.
|
|
||||||
" a kind of MOVE where all conversion errors are signalled by exceptions
|
|
||||||
WRITE iv_arg LEFT-JUSTIFIED TO rv_target.
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
|
|
||||||
METHOD set_single_msg_var_numeric.
|
|
||||||
" a kind of MOVE where all conversion errors are signalled by exceptions
|
|
||||||
WRITE iv_arg LEFT-JUSTIFIED TO rv_target.
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
|
|
||||||
METHOD set_single_msg_var_xseq.
|
|
||||||
" a kind of MOVE where all conversion errors are signalled by exceptions
|
|
||||||
WRITE iv_arg LEFT-JUSTIFIED TO rv_target.
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
|
|
||||||
METHOD split_text.
|
|
||||||
|
|
||||||
CONSTANTS:
|
|
||||||
lc_length_of_msgv TYPE i VALUE 50,
|
|
||||||
lc_offset_of_last_character TYPE i VALUE 49.
|
|
||||||
|
|
||||||
TYPES:
|
|
||||||
ty_char200 TYPE c LENGTH 200.
|
|
||||||
|
|
||||||
DATA:
|
|
||||||
lv_text TYPE ty_char200,
|
|
||||||
lv_msg_var TYPE c LENGTH lc_length_of_msgv,
|
|
||||||
lv_rest TYPE ty_char200,
|
|
||||||
lv_index TYPE syst-index.
|
|
||||||
|
|
||||||
lv_text = iv_text.
|
|
||||||
|
|
||||||
DO 4 TIMES.
|
|
||||||
|
|
||||||
lv_index = sy-index.
|
|
||||||
|
|
||||||
CALL FUNCTION 'TEXT_SPLIT'
|
|
||||||
EXPORTING
|
|
||||||
length = lc_length_of_msgv
|
|
||||||
text = lv_text
|
|
||||||
IMPORTING
|
|
||||||
line = lv_msg_var
|
|
||||||
rest = lv_rest.
|
|
||||||
|
|
||||||
IF lv_msg_var+lc_offset_of_last_character(1) = space OR
|
|
||||||
lv_text+lc_length_of_msgv(1) = space.
|
|
||||||
" keep the space at the beginning of the rest
|
|
||||||
" because otherwise it's lost
|
|
||||||
lv_rest = | { lv_rest }|.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
lv_text = lv_rest.
|
|
||||||
|
|
||||||
CASE lv_index.
|
|
||||||
WHEN 1.
|
|
||||||
rs_msg-msgv1 = lv_msg_var.
|
|
||||||
WHEN 2.
|
|
||||||
rs_msg-msgv2 = lv_msg_var.
|
|
||||||
WHEN 3.
|
|
||||||
rs_msg-msgv3 = lv_msg_var.
|
|
||||||
WHEN 4.
|
|
||||||
rs_msg-msgv4 = lv_msg_var.
|
|
||||||
ENDCASE.
|
|
||||||
|
|
||||||
ENDDO.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
ENDCLASS.
|
|
|
@ -1,147 +0,0 @@
|
||||||
CLASS ltcl_get_t100_longtext DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
|
||||||
|
|
||||||
PUBLIC SECTION.
|
|
||||||
METHODS test01 FOR TESTING.
|
|
||||||
|
|
||||||
ENDCLASS.
|
|
||||||
|
|
||||||
CLASS ltcl_get_t100_longtext IMPLEMENTATION.
|
|
||||||
|
|
||||||
METHOD test01.
|
|
||||||
|
|
||||||
DATA: lx_err TYPE REF TO zcx_abapgit_exception,
|
|
||||||
lv_dummy TYPE string,
|
|
||||||
lv_result TYPE string.
|
|
||||||
|
|
||||||
TRY.
|
|
||||||
MESSAGE e058(00) WITH 'Value_1' 'Value_2' 'Value_3' 'Value_4' INTO lv_dummy.
|
|
||||||
zcx_abapgit_exception=>raise_t100( ).
|
|
||||||
CATCH zcx_abapgit_exception INTO lx_err.
|
|
||||||
lv_result = lx_err->get_longtext( ).
|
|
||||||
ENDTRY.
|
|
||||||
|
|
||||||
cl_abap_unit_assert=>assert_not_initial( lv_result ).
|
|
||||||
|
|
||||||
IF lv_result NS 'Value_1'.
|
|
||||||
cl_abap_unit_assert=>fail( ).
|
|
||||||
ENDIF.
|
|
||||||
IF lv_result NS 'Value_2'.
|
|
||||||
cl_abap_unit_assert=>fail( ).
|
|
||||||
ENDIF.
|
|
||||||
IF lv_result NS 'Value_3'.
|
|
||||||
cl_abap_unit_assert=>fail( ).
|
|
||||||
ENDIF.
|
|
||||||
IF lv_result NS 'Value_4'.
|
|
||||||
cl_abap_unit_assert=>fail( ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
ENDCLASS.
|
|
||||||
|
|
||||||
CLASS ltcl_set_msg_vars_for_clike DEFINITION
|
|
||||||
FOR TESTING
|
|
||||||
DURATION SHORT
|
|
||||||
RISK LEVEL HARMLESS.
|
|
||||||
|
|
||||||
PUBLIC SECTION.
|
|
||||||
METHODS:
|
|
||||||
test_set_msg_b FOR TESTING,
|
|
||||||
test_set_msg_c FOR TESTING,
|
|
||||||
test_set_msg_d FOR TESTING,
|
|
||||||
test_set_msg_e FOR TESTING,
|
|
||||||
test_set_msg_z FOR TESTING.
|
|
||||||
PROTECTED SECTION.
|
|
||||||
PRIVATE SECTION.
|
|
||||||
TYPES:
|
|
||||||
BEGIN OF ty_msg,
|
|
||||||
v1 TYPE sy-msgv1,
|
|
||||||
v2 TYPE sy-msgv2,
|
|
||||||
v3 TYPE sy-msgv3,
|
|
||||||
v4 TYPE sy-msgv4,
|
|
||||||
END OF ty_msg.
|
|
||||||
CLASS-METHODS:
|
|
||||||
test_set_msg_vars
|
|
||||||
IMPORTING
|
|
||||||
iv_text TYPE string
|
|
||||||
is_msg TYPE ty_msg.
|
|
||||||
ENDCLASS.
|
|
||||||
|
|
||||||
CLASS ltcl_set_msg_vars_for_clike IMPLEMENTATION.
|
|
||||||
METHOD test_set_msg_b.
|
|
||||||
CONSTANTS:
|
|
||||||
lc_text_b TYPE string VALUE '0123456789012345678901234567890123456789012345678 0123456789',
|
|
||||||
BEGIN OF lc_msg_b,
|
|
||||||
v1 TYPE sy-msgv1 VALUE '0123456789012345678901234567890123456789012345678',
|
|
||||||
v2 TYPE sy-msgv2 VALUE ' 0123456789',
|
|
||||||
v3 TYPE sy-msgv3 VALUE '',
|
|
||||||
v4 TYPE sy-msgv4 VALUE '',
|
|
||||||
END OF lc_msg_b.
|
|
||||||
test_set_msg_vars( iv_text = lc_text_b
|
|
||||||
is_msg = lc_msg_b ).
|
|
||||||
ENDMETHOD.
|
|
||||||
METHOD test_set_msg_c.
|
|
||||||
CONSTANTS:
|
|
||||||
lc_text_c TYPE string VALUE '01234567890123456789012345678901234567890123456789 123456789',
|
|
||||||
BEGIN OF lc_msg_c,
|
|
||||||
v1 TYPE sy-msgv1 VALUE '01234567890123456789012345678901234567890123456789',
|
|
||||||
v2 TYPE sy-msgv2 VALUE ' 123456789',
|
|
||||||
v3 TYPE sy-msgv3 VALUE '',
|
|
||||||
v4 TYPE sy-msgv4 VALUE '',
|
|
||||||
END OF lc_msg_c.
|
|
||||||
test_set_msg_vars( iv_text = lc_text_c
|
|
||||||
is_msg = lc_msg_c ).
|
|
||||||
ENDMETHOD.
|
|
||||||
METHOD test_set_msg_d.
|
|
||||||
CONSTANTS:
|
|
||||||
lc_text_d TYPE string VALUE '012345678901234567890123456789012345678901234567890 23456789',
|
|
||||||
BEGIN OF lc_msg_d,
|
|
||||||
v1 TYPE sy-msgv1 VALUE '01234567890123456789012345678901234567890123456789',
|
|
||||||
v2 TYPE sy-msgv2 VALUE '0 23456789',
|
|
||||||
v3 TYPE sy-msgv3 VALUE '',
|
|
||||||
v4 TYPE sy-msgv4 VALUE '',
|
|
||||||
END OF lc_msg_d.
|
|
||||||
test_set_msg_vars( iv_text = lc_text_d
|
|
||||||
is_msg = lc_msg_d ).
|
|
||||||
ENDMETHOD.
|
|
||||||
METHOD test_set_msg_e.
|
|
||||||
CONSTANTS:
|
|
||||||
lc_text_e TYPE string VALUE '012345678901234567890123456789012345678901234567890123456789',
|
|
||||||
BEGIN OF lc_msg_e,
|
|
||||||
v1 TYPE sy-msgv1 VALUE '01234567890123456789012345678901234567890123456789',
|
|
||||||
v2 TYPE sy-msgv2 VALUE '0123456789',
|
|
||||||
v3 TYPE sy-msgv3 VALUE '',
|
|
||||||
v4 TYPE sy-msgv4 VALUE '',
|
|
||||||
END OF lc_msg_e.
|
|
||||||
test_set_msg_vars( iv_text = lc_text_e
|
|
||||||
is_msg = lc_msg_e ).
|
|
||||||
ENDMETHOD.
|
|
||||||
METHOD test_set_msg_z.
|
|
||||||
CONSTANTS:
|
|
||||||
lc_text_x TYPE string VALUE `Here is a very long text more than 200 characters and we have to invent `,
|
|
||||||
lc_text_y TYPE string VALUE `a nice story about abapGit to fill this long message. abapGit is simply `,
|
|
||||||
lc_text_z TYPE string VALUE `the greatest! #abapGit #awesome #community #opensource`,
|
|
||||||
BEGIN OF lc_msg_z,
|
|
||||||
v1 TYPE sy-msgv1 VALUE `Here is a very long text more than 200 characters`,
|
|
||||||
v2 TYPE sy-msgv2 VALUE ` and we have to invent a nice story about abapGit`,
|
|
||||||
v3 TYPE sy-msgv3 VALUE ` to fill this long message. abapGit is simply the`,
|
|
||||||
v4 TYPE sy-msgv4 VALUE ` greatest! #abapGit #awesome #community`,
|
|
||||||
END OF lc_msg_z.
|
|
||||||
test_set_msg_vars( iv_text = lc_text_x && lc_text_y && lc_text_z
|
|
||||||
is_msg = lc_msg_z ).
|
|
||||||
ENDMETHOD.
|
|
||||||
METHOD test_set_msg_vars.
|
|
||||||
|
|
||||||
zcl_abapgit_message_helper=>set_msg_vars_for_clike( iv_text ).
|
|
||||||
|
|
||||||
cl_abap_unit_assert=>assert_equals( act = sy-msgv1
|
|
||||||
exp = is_msg-v1 ).
|
|
||||||
cl_abap_unit_assert=>assert_equals( act = sy-msgv2
|
|
||||||
exp = is_msg-v2 ).
|
|
||||||
cl_abap_unit_assert=>assert_equals( act = sy-msgv3
|
|
||||||
exp = is_msg-v3 ).
|
|
||||||
cl_abap_unit_assert=>assert_equals( act = sy-msgv4
|
|
||||||
exp = is_msg-v4 ).
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
ENDCLASS.
|
|
|
@ -1,17 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
|
|
||||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
|
||||||
<asx:values>
|
|
||||||
<VSEOCLASS>
|
|
||||||
<CLSNAME>ZCL_ABAPGIT_MESSAGE_HELPER</CLSNAME>
|
|
||||||
<LANGU>E</LANGU>
|
|
||||||
<DESCRIPT>abapGit message helper</DESCRIPT>
|
|
||||||
<STATE>1</STATE>
|
|
||||||
<CLSCCINCL>X</CLSCCINCL>
|
|
||||||
<FIXPT>X</FIXPT>
|
|
||||||
<UNICODE>X</UNICODE>
|
|
||||||
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
|
|
||||||
</VSEOCLASS>
|
|
||||||
</asx:values>
|
|
||||||
</asx:abap>
|
|
||||||
</abapGit>
|
|
|
@ -8,6 +8,20 @@ CLASS zcx_abapgit_exception DEFINITION
|
||||||
|
|
||||||
INTERFACES if_t100_message .
|
INTERFACES if_t100_message .
|
||||||
|
|
||||||
|
CONSTANTS:
|
||||||
|
BEGIN OF gc_section_text,
|
||||||
|
cause TYPE string VALUE `Cause`,
|
||||||
|
system_response TYPE string VALUE `System response`,
|
||||||
|
what_to_do TYPE string VALUE `Procedure`,
|
||||||
|
sys_admin TYPE string VALUE `System administration`,
|
||||||
|
END OF gc_section_text .
|
||||||
|
CONSTANTS:
|
||||||
|
BEGIN OF gc_section_token,
|
||||||
|
cause TYPE string VALUE `&CAUSE&`,
|
||||||
|
system_response TYPE string VALUE `&SYSTEM_RESPONSE&`,
|
||||||
|
what_to_do TYPE string VALUE `&WHAT_TO_DO&`,
|
||||||
|
sys_admin TYPE string VALUE `&SYS_ADMIN&`,
|
||||||
|
END OF gc_section_token .
|
||||||
DATA msgv1 TYPE symsgv READ-ONLY .
|
DATA msgv1 TYPE symsgv READ-ONLY .
|
||||||
DATA msgv2 TYPE symsgv READ-ONLY .
|
DATA msgv2 TYPE symsgv READ-ONLY .
|
||||||
DATA msgv3 TYPE symsgv READ-ONLY .
|
DATA msgv3 TYPE symsgv READ-ONLY .
|
||||||
|
@ -43,6 +57,12 @@ CLASS zcx_abapgit_exception DEFINITION
|
||||||
VALUE(iv_msgv2) TYPE symsgv DEFAULT sy-msgv2
|
VALUE(iv_msgv2) TYPE symsgv DEFAULT sy-msgv2
|
||||||
VALUE(iv_msgv3) TYPE symsgv DEFAULT sy-msgv3
|
VALUE(iv_msgv3) TYPE symsgv DEFAULT sy-msgv3
|
||||||
VALUE(iv_msgv4) TYPE symsgv DEFAULT sy-msgv4
|
VALUE(iv_msgv4) TYPE symsgv DEFAULT sy-msgv4
|
||||||
|
!ix_previous TYPE REF TO cx_root OPTIONAL
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception .
|
||||||
|
CLASS-METHODS raise_with_text
|
||||||
|
IMPORTING
|
||||||
|
!ix_previous TYPE REF TO cx_root
|
||||||
RAISING
|
RAISING
|
||||||
zcx_abapgit_exception .
|
zcx_abapgit_exception .
|
||||||
METHODS constructor
|
METHODS constructor
|
||||||
|
@ -53,11 +73,6 @@ CLASS zcx_abapgit_exception DEFINITION
|
||||||
!msgv2 TYPE symsgv OPTIONAL
|
!msgv2 TYPE symsgv OPTIONAL
|
||||||
!msgv3 TYPE symsgv OPTIONAL
|
!msgv3 TYPE symsgv OPTIONAL
|
||||||
!msgv4 TYPE symsgv OPTIONAL .
|
!msgv4 TYPE symsgv OPTIONAL .
|
||||||
CLASS-METHODS raise_with_text
|
|
||||||
IMPORTING
|
|
||||||
!ix_previous TYPE REF TO cx_root
|
|
||||||
RAISING
|
|
||||||
zcx_abapgit_exception .
|
|
||||||
|
|
||||||
METHODS get_source_position
|
METHODS get_source_position
|
||||||
REDEFINITION .
|
REDEFINITION .
|
||||||
|
@ -65,11 +80,32 @@ CLASS zcx_abapgit_exception DEFINITION
|
||||||
REDEFINITION .
|
REDEFINITION .
|
||||||
PROTECTED SECTION.
|
PROTECTED SECTION.
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
CONSTANTS:
|
|
||||||
gc_generic_error_msg TYPE string VALUE `An error occured (ZCX_ABAPGIT_EXCEPTION)` ##NO_TEXT.
|
|
||||||
|
|
||||||
METHODS:
|
CONSTANTS gc_generic_error_msg TYPE string VALUE `An error occured (ZCX_ABAPGIT_EXCEPTION)` ##NO_TEXT.
|
||||||
save_callstack.
|
|
||||||
|
CLASS-METHODS split_text_to_symsg
|
||||||
|
IMPORTING
|
||||||
|
!iv_text TYPE string
|
||||||
|
RETURNING
|
||||||
|
VALUE(rs_msg) TYPE symsg .
|
||||||
|
METHODS save_callstack .
|
||||||
|
METHODS itf_to_string
|
||||||
|
IMPORTING
|
||||||
|
!it_itf TYPE tline_tab
|
||||||
|
RETURNING
|
||||||
|
VALUE(rv_result) TYPE string .
|
||||||
|
METHODS get_t100_longtext_itf
|
||||||
|
RETURNING
|
||||||
|
VALUE(rt_itf) TYPE tline_tab .
|
||||||
|
METHODS remove_empty_section
|
||||||
|
IMPORTING
|
||||||
|
!iv_tabix_from TYPE i
|
||||||
|
!iv_tabix_to TYPE i
|
||||||
|
CHANGING
|
||||||
|
!ct_itf TYPE tline_tab .
|
||||||
|
METHODS replace_section_head_with_text
|
||||||
|
CHANGING
|
||||||
|
!cs_itf TYPE tline .
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
@ -78,6 +114,7 @@ CLASS ZCX_ABAPGIT_EXCEPTION IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
METHOD constructor ##ADT_SUPPRESS_GENERATION.
|
METHOD constructor ##ADT_SUPPRESS_GENERATION.
|
||||||
|
|
||||||
super->constructor( previous = previous ).
|
super->constructor( previous = previous ).
|
||||||
|
|
||||||
me->msgv1 = msgv1.
|
me->msgv1 = msgv1.
|
||||||
|
@ -118,6 +155,47 @@ CLASS ZCX_ABAPGIT_EXCEPTION IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD get_t100_longtext_itf.
|
||||||
|
|
||||||
|
DATA: lv_docu_key TYPE doku_obj.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS <lv_msgv> TYPE any.
|
||||||
|
|
||||||
|
lv_docu_key = if_t100_message~t100key-msgid && if_t100_message~t100key-msgno.
|
||||||
|
|
||||||
|
CALL FUNCTION 'DOCU_GET'
|
||||||
|
EXPORTING
|
||||||
|
id = 'NA'
|
||||||
|
langu = sy-langu
|
||||||
|
object = lv_docu_key
|
||||||
|
typ = 'E'
|
||||||
|
TABLES
|
||||||
|
line = rt_itf
|
||||||
|
EXCEPTIONS
|
||||||
|
OTHERS = 1.
|
||||||
|
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
ASSIGN me->(if_t100_message~t100key-attr1) TO <lv_msgv>.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
REPLACE ALL OCCURRENCES OF '&V1&' IN TABLE rt_itf WITH <lv_msgv>.
|
||||||
|
ENDIF.
|
||||||
|
ASSIGN me->(if_t100_message~t100key-attr2) TO <lv_msgv>.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
REPLACE ALL OCCURRENCES OF '&V2&' IN TABLE rt_itf WITH <lv_msgv>.
|
||||||
|
ENDIF.
|
||||||
|
ASSIGN me->(if_t100_message~t100key-attr3) TO <lv_msgv>.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
REPLACE ALL OCCURRENCES OF '&V3&' IN TABLE rt_itf WITH <lv_msgv>.
|
||||||
|
ENDIF.
|
||||||
|
ASSIGN me->(if_t100_message~t100key-attr4) TO <lv_msgv>.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
REPLACE ALL OCCURRENCES OF '&V4&' IN TABLE rt_itf WITH <lv_msgv>.
|
||||||
|
ENDIF.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
METHOD if_message~get_longtext.
|
METHOD if_message~get_longtext.
|
||||||
|
|
||||||
" You should remember that we have to call ZCL_ABAPGIT_MESSAGE_HELPER
|
" You should remember that we have to call ZCL_ABAPGIT_MESSAGE_HELPER
|
||||||
|
@ -131,26 +209,94 @@ CLASS ZCX_ABAPGIT_EXCEPTION IMPLEMENTATION.
|
||||||
|
|
||||||
IF if_t100_message~t100key IS NOT INITIAL.
|
IF if_t100_message~t100key IS NOT INITIAL.
|
||||||
|
|
||||||
CREATE OBJECT lo_message_helper TYPE ('ZCL_ABAPGIT_MESSAGE_HELPER')
|
result = itf_to_string( get_t100_longtext_itf( ) ).
|
||||||
EXPORTING
|
|
||||||
io_exception = me.
|
|
||||||
|
|
||||||
CALL METHOD lo_message_helper->('GET_T100_LONGTEXT')
|
|
||||||
RECEIVING
|
|
||||||
rv_longtext = result.
|
|
||||||
|
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD itf_to_string.
|
||||||
|
|
||||||
|
CONSTANTS: lc_format_section TYPE string VALUE 'U1'.
|
||||||
|
|
||||||
|
DATA:
|
||||||
|
lt_stream TYPE TABLE OF tdline,
|
||||||
|
lt_string TYPE TABLE OF string,
|
||||||
|
lv_string LIKE LINE OF lt_string,
|
||||||
|
lt_itf TYPE tline_tab,
|
||||||
|
lv_has_content TYPE abap_bool,
|
||||||
|
lv_tabix_from TYPE syst-tabix,
|
||||||
|
lv_tabix_to TYPE syst-tabix.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_itf_section> TYPE tline,
|
||||||
|
<ls_itf_section_item> TYPE tline.
|
||||||
|
|
||||||
|
lt_itf = it_itf.
|
||||||
|
|
||||||
|
" You should remember that we replace the U1 format because
|
||||||
|
" that preserves the section header of longtexts.
|
||||||
|
LOOP AT lt_itf ASSIGNING <ls_itf_section>
|
||||||
|
WHERE tdformat = lc_format_section.
|
||||||
|
|
||||||
|
CLEAR:
|
||||||
|
lv_has_content,
|
||||||
|
lv_tabix_to.
|
||||||
|
|
||||||
|
lv_tabix_from = sy-tabix.
|
||||||
|
|
||||||
|
LOOP AT lt_itf ASSIGNING <ls_itf_section_item>
|
||||||
|
FROM sy-tabix + 1.
|
||||||
|
|
||||||
|
IF <ls_itf_section_item>-tdformat = lc_format_section.
|
||||||
|
lv_tabix_to = sy-tabix.
|
||||||
|
EXIT.
|
||||||
|
ELSEIF <ls_itf_section_item>-tdline IS NOT INITIAL.
|
||||||
|
lv_has_content = abap_true.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
IF lv_has_content = abap_false.
|
||||||
|
remove_empty_section(
|
||||||
|
EXPORTING
|
||||||
|
iv_tabix_from = lv_tabix_from
|
||||||
|
iv_tabix_to = lv_tabix_to
|
||||||
|
CHANGING
|
||||||
|
ct_itf = lt_itf ).
|
||||||
|
CONTINUE.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
replace_section_head_with_text( CHANGING cs_itf = <ls_itf_section> ).
|
||||||
|
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
CALL FUNCTION 'CONVERT_ITF_TO_STREAM_TEXT'
|
||||||
|
EXPORTING
|
||||||
|
lf = 'X'
|
||||||
|
IMPORTING
|
||||||
|
stream_lines = lt_string
|
||||||
|
TABLES
|
||||||
|
itf_text = lt_itf
|
||||||
|
text_stream = lt_stream.
|
||||||
|
|
||||||
|
LOOP AT lt_string INTO lv_string.
|
||||||
|
IF sy-tabix = 1.
|
||||||
|
rv_result = lv_string.
|
||||||
|
ELSE.
|
||||||
|
CONCATENATE rv_result lv_string
|
||||||
|
INTO rv_result
|
||||||
|
SEPARATED BY cl_abap_char_utilities=>newline.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
METHOD raise.
|
METHOD raise.
|
||||||
DATA: lv_msgv1 TYPE symsgv,
|
|
||||||
lv_msgv2 TYPE symsgv,
|
DATA lv_text TYPE string.
|
||||||
lv_msgv3 TYPE symsgv,
|
|
||||||
lv_msgv4 TYPE symsgv,
|
|
||||||
ls_t100_key TYPE scx_t100key,
|
|
||||||
lv_text TYPE string.
|
|
||||||
|
|
||||||
IF iv_text IS INITIAL.
|
IF iv_text IS INITIAL.
|
||||||
lv_text = gc_generic_error_msg.
|
lv_text = gc_generic_error_msg.
|
||||||
|
@ -158,29 +304,10 @@ CLASS ZCX_ABAPGIT_EXCEPTION IMPLEMENTATION.
|
||||||
lv_text = iv_text.
|
lv_text = iv_text.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
CALL METHOD ('ZCL_ABAPGIT_MESSAGE_HELPER')=>set_msg_vars_for_clike
|
split_text_to_symsg( lv_text ).
|
||||||
EXPORTING
|
|
||||||
iv_text = lv_text.
|
|
||||||
|
|
||||||
ls_t100_key-msgid = sy-msgid.
|
raise_t100( ix_previous = ix_previous ).
|
||||||
ls_t100_key-msgno = sy-msgno.
|
|
||||||
ls_t100_key-attr1 = 'MSGV1'.
|
|
||||||
ls_t100_key-attr2 = 'MSGV2'.
|
|
||||||
ls_t100_key-attr3 = 'MSGV3'.
|
|
||||||
ls_t100_key-attr4 = 'MSGV4'.
|
|
||||||
lv_msgv1 = sy-msgv1.
|
|
||||||
lv_msgv2 = sy-msgv2.
|
|
||||||
lv_msgv3 = sy-msgv3.
|
|
||||||
lv_msgv4 = sy-msgv4.
|
|
||||||
|
|
||||||
RAISE EXCEPTION TYPE zcx_abapgit_exception
|
|
||||||
EXPORTING
|
|
||||||
textid = ls_t100_key
|
|
||||||
msgv1 = lv_msgv1
|
|
||||||
msgv2 = lv_msgv2
|
|
||||||
msgv3 = lv_msgv3
|
|
||||||
msgv4 = lv_msgv4
|
|
||||||
previous = ix_previous.
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
@ -204,7 +331,8 @@ CLASS ZCX_ABAPGIT_EXCEPTION IMPLEMENTATION.
|
||||||
msgv1 = iv_msgv1
|
msgv1 = iv_msgv1
|
||||||
msgv2 = iv_msgv2
|
msgv2 = iv_msgv2
|
||||||
msgv3 = iv_msgv3
|
msgv3 = iv_msgv3
|
||||||
msgv4 = iv_msgv4.
|
msgv4 = iv_msgv4
|
||||||
|
previous = ix_previous.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
@ -215,6 +343,31 @@ CLASS ZCX_ABAPGIT_EXCEPTION IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD remove_empty_section.
|
||||||
|
IF iv_tabix_to BETWEEN iv_tabix_from AND lines( ct_itf ).
|
||||||
|
DELETE ct_itf FROM iv_tabix_from TO iv_tabix_to.
|
||||||
|
ELSE.
|
||||||
|
DELETE ct_itf FROM iv_tabix_from.
|
||||||
|
ENDIF.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD replace_section_head_with_text.
|
||||||
|
|
||||||
|
CASE cs_itf-tdline.
|
||||||
|
WHEN gc_section_token-cause.
|
||||||
|
cs_itf-tdline = gc_section_text-cause.
|
||||||
|
WHEN gc_section_token-system_response.
|
||||||
|
cs_itf-tdline = gc_section_text-system_response.
|
||||||
|
WHEN gc_section_token-what_to_do.
|
||||||
|
cs_itf-tdline = gc_section_text-what_to_do.
|
||||||
|
WHEN gc_section_token-sys_admin.
|
||||||
|
cs_itf-tdline = gc_section_text-sys_admin.
|
||||||
|
ENDCASE.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
METHOD save_callstack.
|
METHOD save_callstack.
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_callstack> TYPE abap_callstack_line.
|
FIELD-SYMBOLS: <ls_callstack> TYPE abap_callstack_line.
|
||||||
|
@ -243,4 +396,59 @@ CLASS ZCX_ABAPGIT_EXCEPTION IMPLEMENTATION.
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD split_text_to_symsg.
|
||||||
|
|
||||||
|
CONSTANTS:
|
||||||
|
lc_length_of_msgv TYPE i VALUE 50,
|
||||||
|
lc_offset_of_last_character TYPE i VALUE 49.
|
||||||
|
|
||||||
|
DATA:
|
||||||
|
lv_text TYPE c LENGTH 200,
|
||||||
|
lv_rest TYPE c LENGTH 200,
|
||||||
|
ls_msg TYPE symsg,
|
||||||
|
lv_msg_var TYPE c LENGTH lc_length_of_msgv,
|
||||||
|
lv_index TYPE sy-index.
|
||||||
|
|
||||||
|
lv_text = iv_text.
|
||||||
|
|
||||||
|
DO 4 TIMES.
|
||||||
|
|
||||||
|
lv_index = sy-index.
|
||||||
|
|
||||||
|
CALL FUNCTION 'TEXT_SPLIT'
|
||||||
|
EXPORTING
|
||||||
|
length = lc_length_of_msgv
|
||||||
|
text = lv_text
|
||||||
|
IMPORTING
|
||||||
|
line = lv_msg_var
|
||||||
|
rest = lv_rest.
|
||||||
|
|
||||||
|
IF lv_msg_var+lc_offset_of_last_character(1) = space OR
|
||||||
|
lv_text+lc_length_of_msgv(1) = space.
|
||||||
|
" keep the space at the beginning of the rest
|
||||||
|
" because otherwise it's lost
|
||||||
|
lv_rest = | { lv_rest }|.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lv_text = lv_rest.
|
||||||
|
|
||||||
|
CASE lv_index.
|
||||||
|
WHEN 1.
|
||||||
|
ls_msg-msgv1 = lv_msg_var.
|
||||||
|
WHEN 2.
|
||||||
|
ls_msg-msgv2 = lv_msg_var.
|
||||||
|
WHEN 3.
|
||||||
|
ls_msg-msgv3 = lv_msg_var.
|
||||||
|
WHEN 4.
|
||||||
|
ls_msg-msgv4 = lv_msg_var.
|
||||||
|
ENDCASE.
|
||||||
|
|
||||||
|
ENDDO.
|
||||||
|
|
||||||
|
" Set syst using generic error message
|
||||||
|
MESSAGE e001(00) WITH ls_msg-msgv1 ls_msg-msgv2 ls_msg-msgv3 ls_msg-msgv4 INTO sy-lisel.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
CLASS ltcl_test DEFINITION DEFERRED.
|
CLASS ltcl_test DEFINITION DEFERRED.
|
||||||
CLASS zcx_abapgit_exception DEFINITION LOCAL FRIENDS ltcl_test.
|
CLASS ltcl_split_text DEFINITION DEFERRED.
|
||||||
|
CLASS zcx_abapgit_exception DEFINITION LOCAL FRIENDS ltcl_test ltcl_split_text.
|
||||||
|
|
||||||
CLASS ltcl_test DEFINITION
|
CLASS ltcl_test DEFINITION
|
||||||
FOR TESTING
|
FOR TESTING
|
||||||
|
@ -303,3 +304,151 @@ CLASS ltcl_test IMPLEMENTATION.
|
||||||
INTO rv_text.
|
INTO rv_text.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS ltcl_get_t100_longtext DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||||
|
|
||||||
|
PUBLIC SECTION.
|
||||||
|
METHODS test01 FOR TESTING.
|
||||||
|
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS ltcl_get_t100_longtext IMPLEMENTATION.
|
||||||
|
|
||||||
|
METHOD test01.
|
||||||
|
|
||||||
|
DATA: lx_err TYPE REF TO zcx_abapgit_exception,
|
||||||
|
lv_dummy TYPE string,
|
||||||
|
lv_result TYPE string.
|
||||||
|
|
||||||
|
TRY.
|
||||||
|
MESSAGE e058(00) WITH 'Value_1' 'Value_2' 'Value_3' 'Value_4' INTO lv_dummy.
|
||||||
|
zcx_abapgit_exception=>raise_t100( ).
|
||||||
|
CATCH zcx_abapgit_exception INTO lx_err.
|
||||||
|
lv_result = lx_err->get_longtext( ).
|
||||||
|
ENDTRY.
|
||||||
|
|
||||||
|
cl_abap_unit_assert=>assert_not_initial( lv_result ).
|
||||||
|
|
||||||
|
IF lv_result NS 'Value_1'.
|
||||||
|
cl_abap_unit_assert=>fail( ).
|
||||||
|
ENDIF.
|
||||||
|
IF lv_result NS 'Value_2'.
|
||||||
|
cl_abap_unit_assert=>fail( ).
|
||||||
|
ENDIF.
|
||||||
|
IF lv_result NS 'Value_3'.
|
||||||
|
cl_abap_unit_assert=>fail( ).
|
||||||
|
ENDIF.
|
||||||
|
IF lv_result NS 'Value_4'.
|
||||||
|
cl_abap_unit_assert=>fail( ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS ltcl_split_text DEFINITION
|
||||||
|
FOR TESTING
|
||||||
|
DURATION SHORT
|
||||||
|
RISK LEVEL HARMLESS.
|
||||||
|
|
||||||
|
PUBLIC SECTION.
|
||||||
|
METHODS:
|
||||||
|
test_set_msg_b FOR TESTING,
|
||||||
|
test_set_msg_c FOR TESTING,
|
||||||
|
test_set_msg_d FOR TESTING,
|
||||||
|
test_set_msg_e FOR TESTING,
|
||||||
|
test_set_msg_z FOR TESTING.
|
||||||
|
PROTECTED SECTION.
|
||||||
|
PRIVATE SECTION.
|
||||||
|
TYPES:
|
||||||
|
BEGIN OF ty_msg,
|
||||||
|
v1 TYPE sy-msgv1,
|
||||||
|
v2 TYPE sy-msgv2,
|
||||||
|
v3 TYPE sy-msgv3,
|
||||||
|
v4 TYPE sy-msgv4,
|
||||||
|
END OF ty_msg.
|
||||||
|
CLASS-METHODS:
|
||||||
|
test_set_msg_vars
|
||||||
|
IMPORTING
|
||||||
|
iv_text TYPE string
|
||||||
|
is_msg TYPE ty_msg.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS ltcl_split_text IMPLEMENTATION.
|
||||||
|
METHOD test_set_msg_b.
|
||||||
|
CONSTANTS:
|
||||||
|
lc_text_b TYPE string VALUE '0123456789012345678901234567890123456789012345678 0123456789',
|
||||||
|
BEGIN OF lc_msg_b,
|
||||||
|
v1 TYPE sy-msgv1 VALUE '0123456789012345678901234567890123456789012345678',
|
||||||
|
v2 TYPE sy-msgv2 VALUE ' 0123456789',
|
||||||
|
v3 TYPE sy-msgv3 VALUE '',
|
||||||
|
v4 TYPE sy-msgv4 VALUE '',
|
||||||
|
END OF lc_msg_b.
|
||||||
|
test_set_msg_vars( iv_text = lc_text_b
|
||||||
|
is_msg = lc_msg_b ).
|
||||||
|
ENDMETHOD.
|
||||||
|
METHOD test_set_msg_c.
|
||||||
|
CONSTANTS:
|
||||||
|
lc_text_c TYPE string VALUE '01234567890123456789012345678901234567890123456789 123456789',
|
||||||
|
BEGIN OF lc_msg_c,
|
||||||
|
v1 TYPE sy-msgv1 VALUE '01234567890123456789012345678901234567890123456789',
|
||||||
|
v2 TYPE sy-msgv2 VALUE ' 123456789',
|
||||||
|
v3 TYPE sy-msgv3 VALUE '',
|
||||||
|
v4 TYPE sy-msgv4 VALUE '',
|
||||||
|
END OF lc_msg_c.
|
||||||
|
test_set_msg_vars( iv_text = lc_text_c
|
||||||
|
is_msg = lc_msg_c ).
|
||||||
|
ENDMETHOD.
|
||||||
|
METHOD test_set_msg_d.
|
||||||
|
CONSTANTS:
|
||||||
|
lc_text_d TYPE string VALUE '012345678901234567890123456789012345678901234567890 23456789',
|
||||||
|
BEGIN OF lc_msg_d,
|
||||||
|
v1 TYPE sy-msgv1 VALUE '01234567890123456789012345678901234567890123456789',
|
||||||
|
v2 TYPE sy-msgv2 VALUE '0 23456789',
|
||||||
|
v3 TYPE sy-msgv3 VALUE '',
|
||||||
|
v4 TYPE sy-msgv4 VALUE '',
|
||||||
|
END OF lc_msg_d.
|
||||||
|
test_set_msg_vars( iv_text = lc_text_d
|
||||||
|
is_msg = lc_msg_d ).
|
||||||
|
ENDMETHOD.
|
||||||
|
METHOD test_set_msg_e.
|
||||||
|
CONSTANTS:
|
||||||
|
lc_text_e TYPE string VALUE '012345678901234567890123456789012345678901234567890123456789',
|
||||||
|
BEGIN OF lc_msg_e,
|
||||||
|
v1 TYPE sy-msgv1 VALUE '01234567890123456789012345678901234567890123456789',
|
||||||
|
v2 TYPE sy-msgv2 VALUE '0123456789',
|
||||||
|
v3 TYPE sy-msgv3 VALUE '',
|
||||||
|
v4 TYPE sy-msgv4 VALUE '',
|
||||||
|
END OF lc_msg_e.
|
||||||
|
test_set_msg_vars( iv_text = lc_text_e
|
||||||
|
is_msg = lc_msg_e ).
|
||||||
|
ENDMETHOD.
|
||||||
|
METHOD test_set_msg_z.
|
||||||
|
CONSTANTS:
|
||||||
|
lc_text_x TYPE string VALUE `Here is a very long text more than 200 characters and we have to invent `,
|
||||||
|
lc_text_y TYPE string VALUE `a nice story about abapGit to fill this long message. abapGit is simply `,
|
||||||
|
lc_text_z TYPE string VALUE `the greatest! #abapGit #awesome #community #opensource`,
|
||||||
|
BEGIN OF lc_msg_z,
|
||||||
|
v1 TYPE sy-msgv1 VALUE `Here is a very long text more than 200 characters`,
|
||||||
|
v2 TYPE sy-msgv2 VALUE ` and we have to invent a nice story about abapGit`,
|
||||||
|
v3 TYPE sy-msgv3 VALUE ` to fill this long message. abapGit is simply the`,
|
||||||
|
v4 TYPE sy-msgv4 VALUE ` greatest! #abapGit #awesome #community`,
|
||||||
|
END OF lc_msg_z.
|
||||||
|
test_set_msg_vars( iv_text = lc_text_x && lc_text_y && lc_text_z
|
||||||
|
is_msg = lc_msg_z ).
|
||||||
|
ENDMETHOD.
|
||||||
|
METHOD test_set_msg_vars.
|
||||||
|
|
||||||
|
zcx_abapgit_exception=>split_text_to_symsg( iv_text ).
|
||||||
|
|
||||||
|
cl_abap_unit_assert=>assert_equals( act = sy-msgv1
|
||||||
|
exp = is_msg-v1 ).
|
||||||
|
cl_abap_unit_assert=>assert_equals( act = sy-msgv2
|
||||||
|
exp = is_msg-v2 ).
|
||||||
|
cl_abap_unit_assert=>assert_equals( act = sy-msgv3
|
||||||
|
exp = is_msg-v3 ).
|
||||||
|
cl_abap_unit_assert=>assert_equals( act = sy-msgv4
|
||||||
|
exp = is_msg-v4 ).
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
ENDCLASS.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user