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

@ -61,15 +61,15 @@ CLASS z2ui5_cl_util DEFINITION
TYPES:
BEGIN OF ty_s_msg,
text TYPE string,
id TYPE string,
no TYPE string,
type TYPE string,
v1 TYPE string,
v2 TYPE string,
v3 TYPE string,
v4 TYPE string,
timestampl type timestampl,
text TYPE string,
id TYPE string,
no TYPE string,
type TYPE string,
v1 TYPE string,
v2 TYPE string,
v3 TYPE string,
v4 TYPE string,
timestampl TYPE timestampl,
END OF ty_s_msg,
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.
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.
@ -1408,114 +1401,7 @@ CLASS z2ui5_cl_util 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 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.
result = lcl_msp_mapper=>msg_get( val ).
ENDMETHOD.
@ -1538,32 +1424,7 @@ CLASS z2ui5_cl_util IMPLEMENTATION.
WHEN 'E' THEN `Error`
WHEN 'S' THEN `Success`
WHEN `W` THEN `Warning`
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.
ELSE `Information` ).
ENDMETHOD.

View File

@ -116,3 +116,166 @@ CLASS lcl_range_to_sql IMPLEMENTATION.
occ = 0 ) }'|.
ENDMETHOD.
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

@ -756,8 +756,8 @@ CLASS ltcl_unit_test IMPLEMENTATION.
END OF ty_struc.
DATA BEGIN OF ms_struc2.
INCLUDE TYPE ty_struc.
INCLUDE TYPE ty_struc_incl.
INCLUDE TYPE ty_struc.
INCLUDE TYPE ty_struc_incl.
DATA END OF ms_struc2.
DATA(lo_datadescr) = cl_abap_typedescr=>describe_by_data( ms_struc2 ).
@ -769,3 +769,128 @@ CLASS ltcl_unit_test IMPLEMENTATION.
ENDMETHOD.
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,21 +77,29 @@ CLASS z2ui5_cl_pop_bal IMPLEMENTATION.
METHOD view_display.
DATA(popup) = z2ui5_cl_xml_view=>factory_popup( ).
popup = popup->dialog( title = `Messages`
popup = popup->dialog( title = `Business Application Log`
contentheight = '50%'
contentwidth = '50%'
verticalScrolling = abap_false
afterclose = client->_event( 'BUTTON_CONTINUE' )
).
afterclose = client->_event( 'BUTTON_CONTINUE' ) ).
popup->message_view( items = client->_bind( mt_msg )
* groupitems = abap_true
)->message_item( type = `{TYPE}`
title = `{TITLE}`
subtitle = `{SUBTITLE}`
* description = `{MESSAGE}`
* groupname = `{GROUP}`
).
DATA(table) = popup->table( client->_bind( mt_msg ) ).
table->columns(
)->column( )->text( 'Date' )->get_parent(
)->column( )->text( 'Time' )->get_parent(
)->column( )->text( 'Type' )->get_parent(
)->column( )->text( 'ID' )->get_parent(
)->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(
)->button( text = 'continue'