bal and message functions (#1565)

* bal and message functions

* update

* fix
This commit is contained in:
oblomov-dev 2024-11-23 13:28:39 +01:00 committed by GitHub
parent 20500bd40a
commit 4a115007f1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 320 additions and 163 deletions

View File

@ -69,7 +69,7 @@ CLASS z2ui5_cl_util DEFINITION
v2 TYPE string, v2 TYPE string,
v3 TYPE string, v3 TYPE string,
v4 TYPE string, v4 TYPE string,
timestampl type timestampl, timestampl TYPE timestampl,
END OF ty_s_msg, END OF ty_s_msg,
ty_t_msg TYPE STANDARD TABLE OF ty_S_msg WITH EMPTY KEY. ty_t_msg TYPE STANDARD TABLE OF ty_S_msg WITH EMPTY KEY.
@ -459,13 +459,6 @@ CLASS z2ui5_cl_util DEFINITION
VALUE(result) TYPE abap_bool. VALUE(result) TYPE abap_bool.
PROTECTED SECTION. PROTECTED SECTION.
CLASS-METHODS msg_map
IMPORTING
name TYPE clike
val TYPE data
is_msg TYPE z2ui5_cl_util=>ty_s_msg
RETURNING
VALUE(result) TYPE z2ui5_cl_util=>ty_s_msg.
PRIVATE SECTION. PRIVATE SECTION.
@ -1408,114 +1401,7 @@ CLASS z2ui5_cl_util IMPLEMENTATION.
METHOD msg_get. METHOD msg_get.
DATA(lv_kind) = z2ui5_cl_util=>rtti_get_type_kind( val ). result = lcl_msp_mapper=>msg_get( val ).
CASE lv_kind.
WHEN cl_abap_datadescr=>typekind_table.
FIELD-SYMBOLS <tab> TYPE ANY TABLE.
ASSIGN val TO <tab>.
LOOP AT <tab> ASSIGNING FIELD-SYMBOL(<row>).
DATA(lt_tab) = msg_get( <row> ).
INSERT LINES OF lt_tab INTO TABLE result.
ENDLOOP.
WHEN cl_abap_datadescr=>typekind_struct1 OR cl_abap_datadescr=>typekind_struct2.
IF val IS INITIAL.
RETURN.
ENDIF.
DATA(lt_attri) = z2ui5_cl_util=>rtti_get_t_attri_by_any( val ).
DATA(ls_result) = VALUE ty_s_msg( ).
LOOP AT lt_attri REFERENCE INTO DATA(ls_attri).
DATA(lv_name) = |VAL-{ ls_attri->name }|.
ASSIGN (lv_name) TO FIELD-SYMBOL(<comp>).
IF ls_attri->name = 'ITEM'.
lt_tab = msg_get( <comp> ).
INSERT LINES OF lt_tab INTO TABLE result.
RETURN.
ELSE.
ls_result = msg_map( name = ls_attri->name val = <comp> is_msg = ls_result ).
ENDIF.
ENDLOOP.
IF ls_result-text IS INITIAL AND ls_result-id IS NOT INITIAL.
MESSAGE ID ls_result-id TYPE 'I' NUMBER ls_result-no
WITH ls_result-v1 ls_result-v2 ls_result-v3 ls_result-v4
INTO ls_result-text.
ENDIF.
INSERT ls_result INTO TABLE result.
WHEN cl_abap_datadescr=>typekind_oref.
TRY.
DATA(lx) = CAST cx_root( val ).
ls_result = VALUE #( type = 'E' text = lx->get_text( ) ).
DATA(lt_attri_o) = z2ui5_cl_util=>rtti_get_t_attri_by_oref( val ).
LOOP AT lt_attri_o REFERENCE INTO DATA(ls_attri_o)
WHERE visibility = 'U'.
lv_name = |VAL->{ ls_attri_o->name }|.
ASSIGN (lv_name) TO <comp>.
ls_result = msg_map( name = ls_attri_o->name val = <comp> is_msg = ls_result ).
ENDLOOP.
INSERT ls_result INTO TABLE result.
CATCH cx_root.
DATA obj TYPE REF TO object.
obj = val.
TRY.
DATA lr_tab TYPE REF TO data.
CREATE DATA lr_tab TYPE ('if_bali_log=>ty_item_table').
ASSIGN lr_tab->* TO FIELD-SYMBOL(<tab2>).
CALL METHOD obj->(`IF_BALI_LOG~GET_ALL_ITEMS`)
RECEIVING
item_table = <tab2>.
DATA(lt_tab2) = msg_get( <tab2> ).
INSERT LINES OF lt_tab2 INTO TABLE result.
CATCH cx_root.
TRY.
CREATE DATA lr_tab TYPE ('BAPIRETTAB').
ASSIGN lr_tab->* TO <tab2>.
CALL METHOD obj->(`ZIF_LOGGER~EXPORT_TO_TABLE`)
RECEIVING
rt_bapiret = <tab2>.
lt_tab2 = msg_get( <tab2> ).
INSERT LINES OF lt_tab2 INTO TABLE result.
CATCH cx_root INTO DATA(lx2).
lt_attri_o = z2ui5_cl_util=>rtti_get_t_attri_by_oref( val ).
LOOP AT lt_attri_o REFERENCE INTO ls_attri_o
WHERE visibility = 'U'.
lv_name = |OBJ->{ ls_attri_o->name }|.
ASSIGN (lv_name) TO <comp>.
ls_result = msg_map( name = ls_attri_o->name val = <comp> is_msg = ls_result ).
ENDLOOP.
INSERT ls_result INTO TABLE result.
ENDTRY.
ENDTRY.
ENDTRY.
WHEN OTHERS.
IF rtti_check_clike( val ).
INSERT VALUE #( text = val
)
INTO TABLE result.
ENDIF.
ENDCASE.
ENDMETHOD. ENDMETHOD.
@ -1538,32 +1424,7 @@ CLASS z2ui5_cl_util IMPLEMENTATION.
WHEN 'E' THEN `Error` WHEN 'E' THEN `Error`
WHEN 'S' THEN `Success` WHEN 'S' THEN `Success`
WHEN `W` THEN `Warning` WHEN `W` THEN `Warning`
ELSE `Information` ELSE `Information` ).
).
ENDMETHOD.
METHOD msg_map.
result = is_msg.
CASE name.
WHEN 'ID' OR 'MSGID'.
result-id = val.
WHEN 'NO' OR 'NUMBER' OR 'MSGNO'.
result-no = val.
WHEN 'MESSAGE' OR 'TEXT'.
result-text = val.
WHEN 'TYPE' OR 'MSGTY'.
result-type = val.
WHEN 'MESSAGE_V1' OR 'MSGV1' OR 'V1'.
result-v1 = val.
WHEN 'MESSAGE_V2' OR 'MSGV2' OR 'V2'.
result-v2 = val.
WHEN 'MESSAGE_V3' OR 'MSGV3' OR 'V3'.
result-v3 = val.
WHEN 'MESSAGE_V4' OR 'MSGV4' OR 'V4'.
result-v4 = val.
ENDCASE.
ENDMETHOD. ENDMETHOD.

View File

@ -116,3 +116,166 @@ CLASS lcl_range_to_sql IMPLEMENTATION.
occ = 0 ) }'|. occ = 0 ) }'|.
ENDMETHOD. ENDMETHOD.
ENDCLASS. ENDCLASS.
CLASS lcl_msp_mapper DEFINITION
FINAL CREATE PUBLIC.
PUBLIC SECTION.
CLASS-METHODS msg_map
IMPORTING
name TYPE clike
val TYPE data
is_msg TYPE z2ui5_cl_util=>ty_s_msg
RETURNING
VALUE(result) TYPE z2ui5_cl_util=>ty_s_msg.
CLASS-METHODS msg_get
IMPORTING
val TYPE any
RETURNING
VALUE(result) TYPE z2ui5_cl_util=>ty_t_msg.
ENDCLASS.
CLASS lcl_msp_mapper IMPLEMENTATION.
METHOD msg_get.
DATA(lv_kind) = z2ui5_cl_util=>rtti_get_type_kind( val ).
CASE lv_kind.
WHEN cl_abap_datadescr=>typekind_table.
FIELD-SYMBOLS <tab> TYPE ANY TABLE.
ASSIGN val TO <tab>.
LOOP AT <tab> ASSIGNING FIELD-SYMBOL(<row>).
DATA(lt_tab) = msg_get( <row> ).
INSERT LINES OF lt_tab INTO TABLE result.
ENDLOOP.
WHEN cl_abap_datadescr=>typekind_struct1 OR cl_abap_datadescr=>typekind_struct2.
IF val IS INITIAL.
RETURN.
ENDIF.
DATA(lt_attri) = z2ui5_cl_util=>rtti_get_t_attri_by_any( val ).
DATA(ls_result) = VALUE z2ui5_cl_util=>ty_s_msg( ).
LOOP AT lt_attri REFERENCE INTO DATA(ls_attri).
DATA(lv_name) = |VAL-{ ls_attri->name }|.
ASSIGN (lv_name) TO FIELD-SYMBOL(<comp>).
IF ls_attri->name = 'ITEM'.
lt_tab = msg_get( <comp> ).
INSERT LINES OF lt_tab INTO TABLE result.
RETURN.
ELSE.
ls_result = msg_map( name = ls_attri->name val = <comp> is_msg = ls_result ).
ENDIF.
ENDLOOP.
IF ls_result-text IS INITIAL AND ls_result-id IS NOT INITIAL.
MESSAGE ID ls_result-id TYPE 'I' NUMBER ls_result-no
WITH ls_result-v1 ls_result-v2 ls_result-v3 ls_result-v4
INTO ls_result-text.
ENDIF.
INSERT ls_result INTO TABLE result.
WHEN cl_abap_datadescr=>typekind_oref.
TRY.
DATA(lx) = CAST cx_root( val ).
ls_result = VALUE #( type = 'E' text = lx->get_text( ) ).
DATA(lt_attri_o) = z2ui5_cl_util=>rtti_get_t_attri_by_oref( val ).
LOOP AT lt_attri_o REFERENCE INTO DATA(ls_attri_o)
WHERE visibility = 'U'.
lv_name = |VAL->{ ls_attri_o->name }|.
ASSIGN (lv_name) TO <comp>.
ls_result = msg_map( name = ls_attri_o->name val = <comp> is_msg = ls_result ).
ENDLOOP.
INSERT ls_result INTO TABLE result.
CATCH cx_root.
DATA obj TYPE REF TO object.
obj = val.
TRY.
DATA lr_tab TYPE REF TO data.
CREATE DATA lr_tab TYPE ('if_bali_log=>ty_item_table').
ASSIGN lr_tab->* TO FIELD-SYMBOL(<tab2>).
CALL METHOD obj->(`IF_BALI_LOG~GET_ALL_ITEMS`)
RECEIVING
item_table = <tab2>.
DATA(lt_tab2) = msg_get( <tab2> ).
INSERT LINES OF lt_tab2 INTO TABLE result.
CATCH cx_root.
TRY.
CREATE DATA lr_tab TYPE ('BAPIRETTAB').
ASSIGN lr_tab->* TO <tab2>.
CALL METHOD obj->(`ZIF_LOGGER~EXPORT_TO_TABLE`)
RECEIVING
rt_bapiret = <tab2>.
lt_tab2 = msg_get( <tab2> ).
INSERT LINES OF lt_tab2 INTO TABLE result.
CATCH cx_root INTO DATA(lx2).
lt_attri_o = z2ui5_cl_util=>rtti_get_t_attri_by_oref( val ).
LOOP AT lt_attri_o REFERENCE INTO ls_attri_o
WHERE visibility = 'U'.
lv_name = |OBJ->{ ls_attri_o->name }|.
ASSIGN (lv_name) TO <comp>.
ls_result = msg_map( name = ls_attri_o->name val = <comp> is_msg = ls_result ).
ENDLOOP.
INSERT ls_result INTO TABLE result.
ENDTRY.
ENDTRY.
ENDTRY.
WHEN OTHERS.
IF z2ui5_cl_util=>rtti_check_clike( val ).
INSERT VALUE #( text = val
)
INTO TABLE result.
ENDIF.
ENDCASE.
ENDMETHOD.
METHOD msg_map.
result = is_msg.
CASE name.
WHEN 'ID' OR 'MSGID'.
result-id = val.
WHEN 'NO' OR 'NUMBER' OR 'MSGNO'.
result-no = val.
WHEN 'MESSAGE' OR 'TEXT'.
result-text = val.
WHEN 'TYPE' OR 'MSGTY'.
result-type = val.
WHEN 'MESSAGE_V1' OR 'MSGV1' OR 'V1'.
result-v1 = val.
WHEN 'MESSAGE_V2' OR 'MSGV2' OR 'V2'.
result-v2 = val.
WHEN 'MESSAGE_V3' OR 'MSGV3' OR 'V3'.
result-v3 = val.
WHEN 'MESSAGE_V4' OR 'MSGV4' OR 'V4'.
result-v4 = val.
WHEN 'TIME_STMP'.
result-timestampl = val.
ENDCASE.
ENDMETHOD.
ENDCLASS.

View File

@ -769,3 +769,128 @@ CLASS ltcl_unit_test IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
ENDCLASS. ENDCLASS.
CLASS ltcl_unit_test_msg_mapper DEFINITION FINAL
FOR TESTING RISK LEVEL HARMLESS DURATION SHORT.
PRIVATE SECTION.
METHODS test_bal FOR TESTING RAISING cx_static_check.
METHODS test_cx FOR TESTING RAISING cx_static_check.
METHODS test_bapiret FOR TESTING RAISING cx_static_check.
METHODS test_bapirettab FOR TESTING RAISING cx_static_check.
METHODS test_sy FOR TESTING RAISING cx_static_check.
ENDCLASS.
CLASS ltcl_unit_test_msg_mapper IMPLEMENTATION.
METHOD test_sy.
IF sy-sysid = 'ABC'.
RETURN.
ENDIF.
MESSAGE ID 'NET' TYPE 'I' NUMBER '001' INTO DATA(lv_dummy).
DATA(lt_result) = lcl_msp_mapper=>msg_get( sy ).
cl_abap_unit_assert=>assert_equals( exp = `NET`
act = lt_result[ 1 ]-id ).
cl_abap_unit_assert=>assert_equals( exp = `001`
act = lt_result[ 1 ]-no ).
cl_abap_unit_assert=>assert_equals( exp = `I`
act = lt_result[ 1 ]-type ).
ENDMETHOD.
METHOD test_bapiret.
IF sy-sysid = 'ABC'.
RETURN.
ENDIF.
DATA(lt_msg) = VALUE bapirettab(
( type = 'E' id = 'MSG1' number = '001' message = 'An empty Report field causes an empty XML Message to be sent' )
).
DATA(lt_result) = lcl_msp_mapper=>msg_get( lt_msg[ 1 ] ).
cl_abap_unit_assert=>assert_equals( exp = `MSG1`
act = lt_result[ 1 ]-id ).
cl_abap_unit_assert=>assert_equals( exp = `001`
act = lt_result[ 1 ]-no ).
cl_abap_unit_assert=>assert_equals( exp = `E`
act = lt_result[ 1 ]-type ).
ENDMETHOD.
METHOD test_bapirettab.
IF sy-sysid = 'ABC'.
RETURN.
ENDIF.
DATA(lt_msg) = VALUE bapirettab(
( type = 'E' id = 'MSG1' number = '001' message = 'An empty Report field causes an empty XML Message to be sent' )
( type = 'I' id = 'MSG2' number = '002' message = 'Product already in use' ) ).
DATA(lt_result) = lcl_msp_mapper=>msg_get( lt_msg ).
cl_abap_unit_assert=>assert_equals( exp = `MSG1`
act = lt_result[ 1 ]-id ).
cl_abap_unit_assert=>assert_equals( exp = `001`
act = lt_result[ 1 ]-no ).
cl_abap_unit_assert=>assert_equals( exp = `E`
act = lt_result[ 1 ]-type ).
ENDMETHOD.
METHOD test_cx.
TRY.
DATA(lv_val) = 1 / 0.
CATCH cx_root INTO DATA(lx).
DATA(lt_result) = lcl_msp_mapper=>msg_get( lx ).
ENDTRY.
cl_abap_unit_assert=>assert_equals( exp = `E`
act = lt_result[ 1 ]-type ).
ENDMETHOD.
method test_bal.
TYPES: BEGIN OF ty_log_entry,
msgnumber TYPE n LENGTH 6, " Application Log: Internal Message Serial Number
msgty TYPE c LENGTH 1, " Message Type
msgid TYPE c LENGTH 20, " Message Class
msgno TYPE n LENGTH 3, " Message Number
msgv1 TYPE c LENGTH 50, " Message Variable
msgv2 TYPE c LENGTH 50, " Message Variable
msgv3 TYPE c LENGTH 50, " Message Variable
msgv4 TYPE c LENGTH 50, " Message Variable
msgv1_src TYPE c LENGTH 15, " Origin of a Message Variable
msgv2_src TYPE c LENGTH 15, " Origin of a Message Variable
msgv3_src TYPE c LENGTH 15, " Origin of a Message Variable
msgv4_src TYPE c LENGTH 15, " Origin of a Message Variable
detlevel TYPE c LENGTH 1, " Level of Detail
probclass TYPE c LENGTH 1, " Problem Class
alsort TYPE c LENGTH 3, " Sort Criterion/Grouping
time_stmp TYPE p LENGTH 8 DECIMALS 7, " Message Time Stamp
msg_count TYPE i, " Cumulated Message Count
context TYPE c LENGTH 255, " Context (Generic Placeholder)
params TYPE c LENGTH 255, " Parameters (Generic Placeholder)
msg_txt TYPE string, " Message Text
END OF ty_log_entry.
endmethod.
ENDCLASS.

View File

@ -77,20 +77,28 @@ CLASS z2ui5_cl_pop_bal IMPLEMENTATION.
METHOD view_display. METHOD view_display.
DATA(popup) = z2ui5_cl_xml_view=>factory_popup( ). DATA(popup) = z2ui5_cl_xml_view=>factory_popup( ).
popup = popup->dialog( title = `Messages` popup = popup->dialog( title = `Business Application Log`
contentheight = '50%' contentheight = '50%'
contentwidth = '50%' contentwidth = '50%'
verticalScrolling = abap_false verticalScrolling = abap_false
afterclose = client->_event( 'BUTTON_CONTINUE' ) afterclose = client->_event( 'BUTTON_CONTINUE' ) ).
).
popup->message_view( items = client->_bind( mt_msg ) DATA(table) = popup->table( client->_bind( mt_msg ) ).
* groupitems = abap_true table->columns(
)->message_item( type = `{TYPE}` )->column( )->text( 'Date' )->get_parent(
title = `{TITLE}` )->column( )->text( 'Time' )->get_parent(
subtitle = `{SUBTITLE}` )->column( )->text( 'Type' )->get_parent(
* description = `{MESSAGE}` )->column( )->text( 'ID' )->get_parent(
* groupname = `{GROUP}` )->column( )->text( 'No' )->get_parent(
)->column( )->text( 'Message' ).
table->items( )->column_list_item( )->cells(
)->text( '{DATE}'
)->text( '{TIME}'
)->text( '{TYPE}'
)->text( '{ID}'
)->text( '{NUMBER}'
)->text( '{MESSAGE}'
). ).
popup->buttons( popup->buttons(