From 54aa1fc5d80386d19d5a8c093f5edbe743e66d72 Mon Sep 17 00:00:00 2001 From: oblomov-dev <102328295+oblomov-dev@users.noreply.github.com> Date: Thu, 21 Nov 2024 11:52:48 +0100 Subject: [PATCH] extended message handling and popups (#1552) --- src/01/00/03/z2ui5_cl_util.clas.abap | 133 +++++++++++++++------- src/02/01/z2ui5_cl_pop_bal.clas.abap | 123 ++++++++++++++++++++ src/02/01/z2ui5_cl_pop_bal.clas.xml | 16 +++ src/02/01/z2ui5_cl_pop_messages.clas.abap | 2 +- 4 files changed, 232 insertions(+), 42 deletions(-) create mode 100644 src/02/01/z2ui5_cl_pop_bal.clas.abap create mode 100644 src/02/01/z2ui5_cl_pop_bal.clas.xml diff --git a/src/01/00/03/z2ui5_cl_util.clas.abap b/src/01/00/03/z2ui5_cl_util.clas.abap index 536fbe1c..c4f48f8a 100644 --- a/src/01/00/03/z2ui5_cl_util.clas.abap +++ b/src/01/00/03/z2ui5_cl_util.clas.abap @@ -60,7 +60,7 @@ CLASS z2ui5_cl_util DEFINITION END OF ty_s_sql. TYPES: - BEGIN OF ty_S_msg, + BEGIN OF ty_s_msg, text TYPE string, id TYPE string, no TYPE string, @@ -69,8 +69,9 @@ CLASS z2ui5_cl_util DEFINITION 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. + ty_t_msg TYPE STANDARD TABLE OF ty_S_msg WITH EMPTY KEY. CLASS-METHODS ui5_get_msg_type IMPORTING @@ -82,7 +83,7 @@ CLASS z2ui5_cl_util DEFINITION IMPORTING val TYPE any RETURNING - VALUE(result) TYPE ty_T_msg. + VALUE(result) TYPE ty_t_msg. CLASS-METHODS rtti_get_t_attri_by_include IMPORTING @@ -458,6 +459,13 @@ 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. @@ -1404,7 +1412,7 @@ CLASS z2ui5_cl_util IMPLEMENTATION. CASE lv_kind. WHEN cl_abap_datadescr=>typekind_table. - FIELD-SYMBOLS TYPE STANDARD TABLE. + FIELD-SYMBOLS TYPE ANY TABLE. ASSIGN val TO . LOOP AT ASSIGNING FIELD-SYMBOL(). DATA(lt_tab) = msg_get( ). @@ -1423,24 +1431,15 @@ CLASS z2ui5_cl_util IMPLEMENTATION. LOOP AT lt_attri REFERENCE INTO DATA(ls_attri). DATA(lv_name) = |VAL-{ ls_attri->name }|. ASSIGN (lv_name) TO FIELD-SYMBOL(). - CASE ls_attri->name. - WHEN 'ID' OR 'MSGID'. - ls_result-id = . - WHEN 'NO' OR 'NUMBER' OR 'MSGNO'. - ls_result-no = . - WHEN 'MESSAGE' OR 'TEXT'. - ls_result-text = . - WHEN 'TYPE' OR 'MSGTY'. - ls_result-type = . - WHEN 'MESSAGE_V1' OR 'MSGV1' OR 'V1'. - ls_result-v1 = . - WHEN 'MESSAGE_V2' OR 'MSGV2' OR 'V2'. - ls_result-v2 = . - WHEN 'MESSAGE_V3' OR 'MSGV3' OR 'V3'. - ls_result-v3 = . - WHEN 'MESSAGE_V4' OR 'MSGV4' OR 'V4'. - ls_result-v4 = . - ENDCASE. + + 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 @@ -1458,28 +1457,55 @@ CLASS z2ui5_cl_util IMPLEMENTATION. WHERE visibility = 'U'. lv_name = |VAL->{ ls_attri_o->name }|. ASSIGN (lv_name) TO . - CASE ls_attri_o->name. - WHEN 'ID' OR 'MSGID'. - ls_result-id = . - WHEN 'NO' OR 'NUMBER' OR 'MSGNO'. - ls_result-no = . - WHEN 'MESSAGE'. - ls_result-text = . - WHEN 'TYPE' OR 'MSGTY'. - ls_result-type = . - WHEN 'MESSAGE_V1' OR 'MSGV1'. - ls_result-v1 = . - WHEN 'MESSAGE_V2' OR 'MSGV2'. - ls_result-v2 = . - WHEN 'MESSAGE_V3' OR 'MSGV3'. - ls_result-v3 = . - WHEN 'MESSAGE_V4' OR 'MSGV4'. - ls_result-v4 = . - ENDCASE. - + 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. @@ -1516,4 +1542,29 @@ CLASS z2ui5_cl_util IMPLEMENTATION. ). 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. + ENDCLASS. diff --git a/src/02/01/z2ui5_cl_pop_bal.clas.abap b/src/02/01/z2ui5_cl_pop_bal.clas.abap new file mode 100644 index 00000000..1d9aacde --- /dev/null +++ b/src/02/01/z2ui5_cl_pop_bal.clas.abap @@ -0,0 +1,123 @@ +CLASS z2ui5_cl_pop_bal DEFINITION + PUBLIC FINAL + CREATE PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + TYPES: + BEGIN OF ty_s_msg, + type TYPE string, + id TYPE string, + title TYPE string, + subtitle TYPE string, + number TYPE string, + time TYPE string, + date TYPE string, + message TYPE string, + message_v1 TYPE string, + message_v2 TYPE string, + message_v3 TYPE string, + message_v4 TYPE string, + group TYPE string, + END OF ty_s_msg. + TYPES ty_t_msg TYPE STANDARD TABLE OF ty_s_msg. + + DATA mt_msg TYPE ty_t_msg. + + CLASS-METHODS factory + IMPORTING + i_messages TYPE any + i_title TYPE string DEFAULT `abap2UI5 - Business Application Log` + RETURNING + VALUE(r_result) TYPE REF TO z2ui5_cl_pop_bal. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + DATA title TYPE string. + DATA check_initialized TYPE abap_bool. + + METHODS view_display. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_pop_bal IMPLEMENTATION. + METHOD factory. + + r_result = NEW #( ). + + "read log infos + "handle + ".. + + "read messages.. + DATA(lt_msg) = z2ui5_cl_util=>msg_get( i_messages ). + LOOP AT lt_msg REFERENCE INTO DATA(lr_row). + + DATA(ls_row) = VALUE ty_s_msg( ). + ls_row-type = z2ui5_cl_util=>ui5_get_msg_type( lr_row->type ). + ls_row-title = lr_row->text. +* lr_row->title = `title`. +* lr_row->message = `message`. + ls_row-subtitle = |{ lr_row->id } { lr_row->no }|. + ls_row-date = z2ui5_cl_util=>time_get_date_by_stampl( lr_row->timestampl ). + ls_row-time = z2ui5_cl_util=>time_get_time_by_stampl( lr_row->timestampl ). +* lr_row->group = `001`. + + INSERT ls_row INTO TABLE r_result->mt_msg. + ENDLOOP. + + r_result->title = i_title. + + ENDMETHOD. + + METHOD view_display. + + DATA(popup) = z2ui5_cl_xml_view=>factory_popup( ). + popup = popup->dialog( title = `Messages` + contentheight = '50%' + contentwidth = '50%' + verticalScrolling = abap_false + 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}` + ). + + popup->buttons( + )->button( text = 'continue' + press = client->_event( 'BUTTON_CONTINUE' ) + type = 'Emphasized' ). + + client->popup_display( popup->stringify( ) ). + + ENDMETHOD. + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + view_display( ). + RETURN. + ENDIF. + + CASE client->get( )-event. + WHEN `BUTTON_CONTINUE`. + client->popup_destroy( ). + client->nav_app_leave( ). + WHEN OTHERS. + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_pop_bal.clas.xml b/src/02/01/z2ui5_cl_pop_bal.clas.xml new file mode 100644 index 00000000..1cde7da1 --- /dev/null +++ b/src/02/01/z2ui5_cl_pop_bal.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_POP_BAL + E + ui - business application log + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_pop_messages.clas.abap b/src/02/01/z2ui5_cl_pop_messages.clas.abap index 993ac7ea..6461ce89 100644 --- a/src/02/01/z2ui5_cl_pop_messages.clas.abap +++ b/src/02/01/z2ui5_cl_pop_messages.clas.abap @@ -26,7 +26,7 @@ CLASS z2ui5_cl_pop_messages DEFINITION CLASS-METHODS factory IMPORTING - i_messages TYPE STANDARD TABLE + i_messages TYPE any i_title TYPE string DEFAULT `abap2UI5 - Message Popup` RETURNING VALUE(r_result) TYPE REF TO z2ui5_cl_pop_messages.