diff --git a/src/01/00/03/z2ui5_cl_util.clas.abap b/src/01/00/03/z2ui5_cl_util.clas.abap index c4f48f8a..4e03df15 100644 --- a/src/01/00/03/z2ui5_cl_util.clas.abap +++ b/src/01/00/03/z2ui5_cl_util.clas.abap @@ -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 TYPE ANY TABLE. - ASSIGN val TO . - LOOP AT ASSIGNING FIELD-SYMBOL(). - DATA(lt_tab) = msg_get( ). - 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(). - - IF ls_attri->name = 'ITEM'. - lt_tab = msg_get( ). - INSERT LINES OF lt_tab INTO TABLE result. - RETURN. - ELSE. - ls_result = msg_map( name = ls_attri->name val = 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 . - ls_result = msg_map( name = ls_attri_o->name val = 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(). - - CALL METHOD obj->(`IF_BALI_LOG~GET_ALL_ITEMS`) - RECEIVING - item_table = . - - DATA(lt_tab2) = msg_get( ). - INSERT LINES OF lt_tab2 INTO TABLE result. - - CATCH cx_root. - - TRY. - - CREATE DATA lr_tab TYPE ('BAPIRETTAB'). - ASSIGN lr_tab->* TO . - - CALL METHOD obj->(`ZIF_LOGGER~EXPORT_TO_TABLE`) - RECEIVING - rt_bapiret = . - - lt_tab2 = msg_get( ). - 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 . - ls_result = msg_map( name = ls_attri_o->name val = 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. diff --git a/src/01/00/03/z2ui5_cl_util.clas.locals_imp.abap b/src/01/00/03/z2ui5_cl_util.clas.locals_imp.abap index f56ad803..055b6f5e 100644 --- a/src/01/00/03/z2ui5_cl_util.clas.locals_imp.abap +++ b/src/01/00/03/z2ui5_cl_util.clas.locals_imp.abap @@ -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 TYPE ANY TABLE. + ASSIGN val TO . + LOOP AT ASSIGNING FIELD-SYMBOL(). + DATA(lt_tab) = msg_get( ). + 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(). + + IF ls_attri->name = 'ITEM'. + lt_tab = msg_get( ). + INSERT LINES OF lt_tab INTO TABLE result. + RETURN. + ELSE. + ls_result = msg_map( name = ls_attri->name val = 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 . + ls_result = msg_map( name = ls_attri_o->name val = 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(). + + CALL METHOD obj->(`IF_BALI_LOG~GET_ALL_ITEMS`) + RECEIVING + item_table = . + + DATA(lt_tab2) = msg_get( ). + INSERT LINES OF lt_tab2 INTO TABLE result. + + CATCH cx_root. + + TRY. + + CREATE DATA lr_tab TYPE ('BAPIRETTAB'). + ASSIGN lr_tab->* TO . + + CALL METHOD obj->(`ZIF_LOGGER~EXPORT_TO_TABLE`) + RECEIVING + rt_bapiret = . + + lt_tab2 = msg_get( ). + 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 . + ls_result = msg_map( name = ls_attri_o->name val = 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. diff --git a/src/01/00/03/z2ui5_cl_util.clas.testclasses.abap b/src/01/00/03/z2ui5_cl_util.clas.testclasses.abap index bc5c9946..f5a271c7 100644 --- a/src/01/00/03/z2ui5_cl_util.clas.testclasses.abap +++ b/src/01/00/03/z2ui5_cl_util.clas.testclasses.abap @@ -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. diff --git a/src/02/01/z2ui5_cl_pop_bal.clas.abap b/src/02/01/z2ui5_cl_pop_bal.clas.abap index 1d9aacde..16f395bc 100644 --- a/src/02/01/z2ui5_cl_pop_bal.clas.abap +++ b/src/02/01/z2ui5_cl_pop_bal.clas.abap @@ -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'