From 921d326fc5d3f5ee7dcf0b0c24f1cc02c9a37786 Mon Sep 17 00:00:00 2001 From: Marc Bernard Date: Mon, 9 Dec 2024 17:57:33 +0000 Subject: [PATCH] Enhance logging with message id and number The abapGit log now collects the message id and number. This way, when displaying the log, you will be able to view the longtex of the message. In particular, message id and number are added for activation errors. Also fixes a bug showed the wrong longtext, if the message id of an exception was longer than 2 characters. --- .../zcl_abapgit_objects_activation.clas.abap | 21 +++++++-- src/ui/lib/zcl_abapgit_log_viewer.clas.abap | 47 +++++++++++-------- src/utils/zcl_abapgit_log.clas.abap | 12 +++-- .../zcl_abapgit_log.clas.testclasses.abap | 41 +++++++++++++++- src/utils/zif_abapgit_log.intf.abap | 20 +++++--- 5 files changed, 105 insertions(+), 36 deletions(-) diff --git a/src/objects/core/zcl_abapgit_objects_activation.clas.abap b/src/objects/core/zcl_abapgit_objects_activation.clas.abap index 09d549be6..2aa608696 100644 --- a/src/objects/core/zcl_abapgit_objects_activation.clas.abap +++ b/src/objects/core/zcl_abapgit_objects_activation.clas.abap @@ -398,9 +398,18 @@ CLASS zcl_abapgit_objects_activation IMPLEMENTATION. WHERE type = -show_req->object_type. ENDIF. LOOP AT -mtext ASSIGNING . - ii_log->add_error( - iv_msg = - is_item = ls_item ). + IF sy-tabix = 1. + ii_log->add( + iv_type = 'E' + iv_msg = + iv_class = -message-msgid + iv_number = -message-msgno + is_item = ls_item ). + ELSE. + ii_log->add_error( + iv_msg = + is_item = ls_item ). + ENDIF. ENDLOOP. ENDLOOP. @@ -439,8 +448,10 @@ CLASS zcl_abapgit_objects_activation IMPLEMENTATION. DELETE lt_lines WHERE class = 'D0' AND number = '319'. LOOP AT lt_lines ASSIGNING . - ii_log->add( iv_msg = -line - iv_type = -severity ). + ii_log->add( iv_msg = -line + iv_type = -severity + iv_class = -class + iv_number = |{ -number }| ). ENDLOOP. ii_log->add_info( |View complete activation log in program RSPUTPRT (type D, log name { iv_logname })| ). diff --git a/src/ui/lib/zcl_abapgit_log_viewer.clas.abap b/src/ui/lib/zcl_abapgit_log_viewer.clas.abap index 9c86a540a..125f1fd3b 100644 --- a/src/ui/lib/zcl_abapgit_log_viewer.clas.abap +++ b/src/ui/lib/zcl_abapgit_log_viewer.clas.abap @@ -30,6 +30,8 @@ CLASS zcl_abapgit_log_viewer DEFINITION source TYPE icon_d, callstack TYPE icon_d, cell_type TYPE salv_t_int4_column, + id TYPE sy-msgid, + number TYPE sy-msgno, END OF ty_log_out. TYPES: ty_log_outs TYPE STANDARD TABLE OF ty_log_out @@ -91,7 +93,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_LOG_VIEWER IMPLEMENTATION. +CLASS zcl_abapgit_log_viewer IMPLEMENTATION. METHOD calculate_cell_type. @@ -230,7 +232,7 @@ CLASS ZCL_ABAPGIT_LOG_VIEWER IMPLEMENTATION. CLEAR: ls_log. - ls_log-msg = lr_message->text. + ls_log-msg = lr_message->text. ls_log-exception = lr_message->exception. CASE lr_message->type. @@ -268,6 +270,10 @@ CLASS ZCL_ABAPGIT_LOG_VIEWER IMPLEMENTATION. CATCH cx_sy_move_cast_error ##NO_HANDLER. ENDTRY. + ELSEIF lr_message->id IS NOT INITIAL AND lr_message->number IS NOT INITIAL. + ls_log-id = lr_message->id. + ls_log-number = lr_message->number. + ls_log-longtext = icon_system_help. ENDIF. ls_log-obj_type = lr_message->obj_type. @@ -424,31 +430,34 @@ CLASS ZCL_ABAPGIT_LOG_VIEWER IMPLEMENTATION. lt_dummy2 TYPE TABLE OF dval, ls_help_info TYPE help_info. - IF is_log-exception IS NOT BOUND. + IF is_log-exception IS BOUND. + TRY. + lx_abapgit ?= is_log-exception. + CATCH cx_sy_move_cast_error. + RETURN. + ENDTRY. + + lv_docu_object = lx_abapgit->if_t100_message~t100key-msgid && lx_abapgit->if_t100_message~t100key-msgno. + ls_help_info-messageid = lx_abapgit->if_t100_message~t100key-msgid. + ls_help_info-messagenr = lx_abapgit->if_t100_message~t100key-msgno. + ls_help_info-msgv1 = lx_abapgit->msgv1. + ls_help_info-msgv2 = lx_abapgit->msgv2. + ls_help_info-msgv3 = lx_abapgit->msgv3. + ls_help_info-msgv4 = lx_abapgit->msgv4. + ELSEIF is_log-id IS NOT INITIAL AND is_log-number IS NOT INITIAL. + lv_docu_object = is_log-id && is_log-number. + ls_help_info-messageid = is_log-id. + ls_help_info-messagenr = is_log-number. + ELSE. RETURN. ENDIF. - TRY. - lx_abapgit ?= is_log-exception. - CATCH cx_sy_move_cast_error. - RETURN. - ENDTRY. - - lv_docu_object = lx_abapgit->if_t100_message~t100key-msgid. - lv_docu_object+2 = lx_abapgit->if_t100_message~t100key-msgno. - ls_help_info-call = 'D'. ls_help_info-spras = sy-langu. - ls_help_info-messageid = lx_abapgit->if_t100_message~t100key-msgid. - ls_help_info-messagenr = lx_abapgit->if_t100_message~t100key-msgno. ls_help_info-message = is_log-msg. ls_help_info-title = 'Longtext'. ls_help_info-docuid = 'NA'. - ls_help_info-docuobject = lv_docu_object. - ls_help_info-msgv1 = lx_abapgit->msgv1. - ls_help_info-msgv2 = lx_abapgit->msgv2. - ls_help_info-msgv3 = lx_abapgit->msgv3. - ls_help_info-msgv4 = lx_abapgit->msgv4. + ls_help_info-docuobject = condense( lv_docu_object ). CALL FUNCTION 'HELP_START' EXPORTING diff --git a/src/utils/zcl_abapgit_log.clas.abap b/src/utils/zcl_abapgit_log.clas.abap index a22becf90..098d1537a 100644 --- a/src/utils/zcl_abapgit_log.clas.abap +++ b/src/utils/zcl_abapgit_log.clas.abap @@ -90,10 +90,12 @@ CLASS zcl_abapgit_log IMPLEMENTATION. FIELD-SYMBOLS: LIKE LINE OF mt_log. APPEND INITIAL LINE TO mt_log ASSIGNING . - -msg-text = iv_msg. - -msg-type = iv_type. - -item = is_item. - -exception = ix_exc. + -msg-text = iv_msg. + -msg-type = iv_type. + -msg-id = iv_class. + -msg-number = iv_number. + -item = is_item. + -exception = ix_exc. CASE iv_type. WHEN 'E' OR 'A' OR 'X'. @@ -252,6 +254,8 @@ CLASS zcl_abapgit_log IMPLEMENTATION. FIELD-SYMBOLS TYPE ty_log. LOOP AT mt_log ASSIGNING . ls_msg-type = -msg-type. + ls_msg-id = -msg-id. + ls_msg-number = -msg-number. ls_msg-text = -msg-text. ls_msg-obj_type = -item-obj_type. ls_msg-obj_name = -item-obj_name. diff --git a/src/utils/zcl_abapgit_log.clas.testclasses.abap b/src/utils/zcl_abapgit_log.clas.testclasses.abap index d23c5e975..dd897dc12 100644 --- a/src/utils/zcl_abapgit_log.clas.testclasses.abap +++ b/src/utils/zcl_abapgit_log.clas.testclasses.abap @@ -14,7 +14,8 @@ CLASS ltcl_test DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS FINAL. merge_with_min_level FOR TESTING, empty FOR TESTING, clone FOR TESTING, - add FOR TESTING. + add FOR TESTING, + add_with_id_number FOR TESTING. ENDCLASS. @@ -64,6 +65,44 @@ CLASS ltcl_test IMPLEMENTATION. ENDMETHOD. + METHOD add_with_id_number. + + DATA lv_message TYPE string. + DATA lt_messages TYPE zif_abapgit_log=>ty_log_outs. + DATA ls_message LIKE LINE OF lt_messages. + + lv_message = 'abracadabra'. + + mi_cut->add( + iv_msg = lv_message + iv_type = 'W' + iv_class = 'SL' + iv_number = '123' ). + + cl_abap_unit_assert=>assert_equals( + act = mi_cut->count( ) + exp = 1 ). + + cl_abap_unit_assert=>assert_equals( + act = mi_cut->get_status( ) + exp = 'W' ). + + lt_messages = mi_cut->get_messages( ). + READ TABLE lt_messages INDEX 1 INTO ls_message. + cl_abap_unit_assert=>assert_subrc( ). + + cl_abap_unit_assert=>assert_equals( + act = ls_message-text + exp = lv_message ). + cl_abap_unit_assert=>assert_equals( + act = ls_message-id + exp = 'SL' ). + cl_abap_unit_assert=>assert_equals( + act = ls_message-number + exp = '123' ). + + ENDMETHOD. + METHOD get_status. DATA lo_x TYPE REF TO zcx_abapgit_exception. diff --git a/src/utils/zif_abapgit_log.intf.abap b/src/utils/zif_abapgit_log.intf.abap index aeb4ea669..8e18e69be 100644 --- a/src/utils/zif_abapgit_log.intf.abap +++ b/src/utils/zif_abapgit_log.intf.abap @@ -19,6 +19,8 @@ INTERFACE zif_abapgit_log TYPES: BEGIN OF ty_log_out, type TYPE sy-msgty, + id TYPE sy-msgid, + number TYPE sy-msgno, text TYPE string, obj_type TYPE tadir-object, obj_name TYPE tadir-obj_name, @@ -29,9 +31,11 @@ INTERFACE zif_abapgit_log WITH NON-UNIQUE DEFAULT KEY . TYPES: BEGIN OF ty_msg, - text TYPE string, - type TYPE sy-msgty, - level TYPE i, + text TYPE string, + type TYPE sy-msgty, + id TYPE sy-msgid, + number TYPE sy-msgno, + level TYPE i, END OF ty_msg . TYPES: ty_msgs TYPE STANDARD TABLE OF ty_msg @@ -48,10 +52,12 @@ INTERFACE zif_abapgit_log METHODS add IMPORTING - !iv_msg TYPE csequence - !iv_type TYPE sy-msgty DEFAULT 'E' - !is_item TYPE zif_abapgit_definitions=>ty_item OPTIONAL - !ix_exc TYPE REF TO cx_root OPTIONAL . + !iv_msg TYPE csequence + !iv_type TYPE sy-msgty DEFAULT 'E' + !iv_class TYPE sy-msgid OPTIONAL + !iv_number TYPE sy-msgno OPTIONAL + !is_item TYPE zif_abapgit_definitions=>ty_item OPTIONAL + !ix_exc TYPE REF TO cx_root OPTIONAL . METHODS add_error IMPORTING !iv_msg TYPE csequence