Professional Documents
Culture Documents
ZCL Messages Ballog
ZCL Messages Ballog
public
create public .
public section.
constants:
begin of gc_fieldname,
row type fieldname value 'ROW' ##NO_TEXT,
condition type fieldname value 'CONDITION' ##NO_TEXT,
id type fieldname value 'ID' ##NO_TEXT,
end of gc_fieldname .
data MV_SUBOBJ type BALSUBOBJ .
data MV_LOGOBJ type BALOBJ_D .
data GV_CONTEXT type TABNAME value 'ZMESSAGE_CONTEXT' ##NO_TEXT.
constants GC_MESSAGE_TYPES type CHAR6 value 'SIWEAX' ##NO_TEXT.
constants GC_LOGCLASS type BALSUBOBJ value 'ZCL_MESSAGES' ##NO_TEXT.
constants GC_APPLOG_OBJECT type BALOBJ_D value 'Z_APPLOG' ##NO_TEXT.
constants C_LOGOBJ_ZR_AUF type BALOBJ_D value 'ZR_AUF' ##NO_TEXT.
constants C_LOGSUBOBJ_Z_MAT type BALSUBOBJ value 'Z_MAT' ##NO_TEXT.
events ADDED
exporting
value(IS_MSGH) type BALMSGHNDL
value(IS_LAST_MSGH) type BALMSGHNDL .
events DELETED
exporting
value(IT_MSGH) type BAL_T_MSGH .
class-events BATCHMODE
exporting
value(CV_BATCHMODE) type ref to SY-BATCH .
class-methods CLASS_CONSTRUCTOR .
class-methods GET_INSTANCE
importing
!IV_ID type CSEQUENCE optional
!IV_SUBOBJ type BALSUBOBJ optional
!IV_CONTEXT type TABNAME default 'ZMESSAGE_CONTEXT'
!IV_REOPEN type FLAG default SPACE
!IV_LOGOBJ type BALOBJ_D optional
preferred parameter IV_ID
returning
value(EO_INSTANCE) type ref to ZCL_MESSAGES
raising
ZCX_PARAMETER_MISSING
ZCX_NOT_FOUND .
class-methods SHOW_EXCEPTION
importing
!IO_EX type ref to CX_ROOT
!IV_MSGTY type MSGTY default 'I' .
methods ADD
importing
!IV_CONDITION type ZSRS_MSG_CONDITION default SPACE
!IV_MSGID type SYMSGID default SY-MSGID
!IV_MSGTY type SYMSGTY default SY-MSGTY
!IV_MSGNO type SYMSGNO default SY-MSGNO
!IV_MSGV1 type SYMSGV default SY-MSGV1
!IV_MSGV2 type SYMSGV default SY-MSGV2
!IV_MSGV3 type SYMSGV default SY-MSGV3
!IV_MSGV4 type SYMSGV default SY-MSGV4
!IV_ROW type ZSRS_TABIX_4_HTML optional
preferred parameter IV_CONDITION
raising
ZCX_ERROR .
methods ADD_IN_DLG
importing
!IV_TEXT type CSEQUENCE optional
!IV_MSGID type SYMSGID default SY-MSGID
!IV_MSGTY type SYMSGTY default SY-MSGTY
!IV_MSGNO type SYMSGNO default SY-MSGNO
!IV_MSGV1 type SYMSGV default SY-MSGV1
!IV_MSGV2 type SYMSGV default SY-MSGV2
!IV_MSGV3 type SYMSGV default SY-MSGV3
!IV_MSGV4 type SYMSGV default SY-MSGV4
!IV_CONDITION type ZSRS_MSG_CONDITION default SPACE
!IV_ROW type ZSRS_TABIX_4_HTML optional
preferred parameter IV_TEXT
raising
ZCX_ERROR .
methods ADD_BAPIRETURN
importing
!IV_CONDITION type ZSRS_MSG_CONDITION default SPACE
!IT_BAPIRETURN type BAPIRETTAB optional
!IS_BAPIRETURN type ANY optional
preferred parameter IV_CONDITION
returning
value(EV_SEVERITY) type SYMSGTY .
methods ADD_FREE_TEXT
importing
!IV_CONDITION type ZSRS_MSG_CONDITION default SPACE
!IV_ROW type ZSRS_TABIX_4_HTML optional
!IV_MSGTY type SYMSGTY default 'I'
!IV_TEXT type CSEQUENCE .
methods ADD_FROM_BDC
importing
!IT_MSG type ETTCD_MSG_TABTYPE
!IV_CONDITION type ZSRS_MSG_CONDITION default SPACE
returning
value(EV_MSGS) type I .
methods ADD_FROM_EXCEPTION
importing
!IV_CONDITION type ZSRS_MSG_CONDITION default SPACE
!IV_ROW type ZSRS_TABIX_4_HTML optional
!IO_EXCEPTION type ref to CX_ROOT
!IV_MSGTY type SYMSGTY default 'E'
!IV_ROOT_CAUSE type FLAG optional .
methods CONSTRUCTOR
importing
!IV_ID type CSEQUENCE
!IV_SUBOBJ type BALSUBOBJ
!IV_CONTEXT type TABNAME default 'ZMESSAGE_CONTEXT'
!IV_LOG_HANDLE type BALLOGHNDL optional
!IV_REUSE_BAL_MEMORY type FLAG default ABAP_FALSE
!IV_LOGOBJ type BALOBJ_D
raising
ZCX_NOT_FOUND .
methods COPY
importing
!IO_TARGET type ref to ZCL_MESSAGES
!IV_CONDITION type ZSRS_MSG_CONDITION default '*'
!IV_ROW type ZSRS_TABIX_4_HTML optional
raising
ZCX_ERROR .
methods DELETE
importing
!IV_CONDITION type ZSRS_MSG_CONDITION default '*'
!IV_ROW type ZSRS_TABIX_4_HTML optional
!IS_AFTER_MSGH type BALMSGHNDL optional
preferred parameter IV_CONDITION .
methods DELETE_LOG
importing
!IV_ALSO_ON_DB type FLAG default ABAP_FALSE
raising
ZCX_ERROR .
methods DELETE_SINGLE
importing
!IS_MSGH type BALMSGHNDL .
methods DISPLAY
importing
!IV_FULLSCREEN type FLAG default 'X'
!IS_PROF type BAL_S_PROF optional
preferred parameter IV_FULLSCREEN .
methods GET_HANDLE
returning
value(EV_LOG_HANDLE) type BALLOGHNDL .
methods GET_HIGHEST_TYPE
importing
!IV_CONDITION type ZSRS_MSG_CONDITION default '*'
!IV_ROW type ZSRS_TABIX_4_HTML optional
preferred parameter IV_CONDITION
returning
value(EV_TYPE) type SYMSGTY .
methods GET_LAST_MESSAGE
exporting
!ES_MSG type BAL_S_MSG
!ES_MSGH type BALMSGHNDL
raising
ZCX_NOT_FOUND .
methods GET_MESSAGE
importing
!IV_CONDITION type ZSRS_MSG_CONDITION default '*'
!IV_ROW type ZSRS_TABIX_4_HTML optional
exporting
!EV_MSG_TYPE type SYMSGTY
!EV_MSG_TEXT type STRING .
methods GET_MESSAGES
importing
!IV_CONDITION type ZSRS_MSG_CONDITION default '*'
returning
value(ET_MESSAGES) type ZCL_SRS_MESSAGE_TAB .
methods GET_MESSAGES_DETAILED
importing
!IV_CONDITION type ZSRS_MSG_CONDITION default '*'
!IV_ROW type ZSRS_TABIX_4_HTML optional
preferred parameter IV_CONDITION
returning
value(ET_MSG) type AQTBAL_S_MSG .
methods GET_MESSAGES_DETAILED_WITH_HDL
importing
!IV_CONDITION type ZSRS_MSG_CONDITION default '*'
!IV_ROW type ZSRS_TABIX_4_HTML optional
exporting
!ET_MESSAGES type SWF_APP_LOG_EXT_MSG_T .
class-methods ROOT_CAUSE
importing
!IO_EX type ref to CX_ROOT
returning
value(EO_EX) type ref to CX_ROOT .
methods GET_MESSAGE_DETAILED
importing
!IV_CONDITION type ZSRS_MSG_CONDITION default '*'
!IV_ROW type ZSRS_TABIX_4_HTML optional
preferred parameter IV_CONDITION
returning
value(ES_MSG) type BAL_S_MSG .
methods GET_MESSAGE_WITH_HANDLE
importing
!IV_CONDITION type ZSRS_MSG_CONDITION default '*'
!IV_ROW type ZSRS_TABIX_4_HTML optional
exporting
value(ES_MSGH) type BALMSGHNDL
!ES_MSG type BAL_S_MSG .
methods RESET_SECTION .
methods SAVE
importing
!IV_UPDATE_TASK type FLAG default 'X'
exporting
!EV_LOGNUMBER type BALOGNR
!EV_LOG_HANDLE type BALLOGHNDL
raising
ZCX_ERROR .
methods SET_CONTEXT
importing
!IS_CONTEXT type CLIKE .
methods SET_SECTION
importing
!IV_CONDITION type ZSRS_MSG_CONDITION default '*' .
protected section.
*"* protected components of class ZCL_MESSAGES
*"* do not include other source files here!!!
class-methods IN_BATCHMODE
returning
value(EV_BATCHMODE) type FLAG .
methods RECOMPUTE_LAST_MSGH .
methods FILL_CONTEXT
importing
!IV_ROW type ZSRS_TABIX_4_HTML optional
!IV_CONDITION type ZSRS_MSG_CONDITION
returning
value(ES_CONTEXT) type ref to DATA .
methods SEARCH_MESSAGES
importing
!IV_CONDITION type ZSRS_MSG_CONDITION default '*'
!IV_ROW type ZSRS_TABIX_4_HTML optional
preferred parameter IV_CONDITION
returning
value(ET_MSGH) type ref to BAL_T_MSGH .
ENDCLASS.
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_MESSAGES->ADD
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IV_CONDITION TYPE ZSRS_MSG_CONDITION (default
=SPACE)
* | [--->] IV_MSGID TYPE SYMSGID (default =SY-MSGID)
* | [--->] IV_MSGTY TYPE SYMSGTY (default =SY-MSGTY)
* | [--->] IV_MSGNO TYPE SYMSGNO (default =SY-MSGNO)
* | [--->] IV_MSGV1 TYPE SYMSGV (default =SY-MSGV1)
* | [--->] IV_MSGV2 TYPE SYMSGV (default =SY-MSGV2)
* | [--->] IV_MSGV3 TYPE SYMSGV (default =SY-MSGV3)
* | [--->] IV_MSGV4 TYPE SYMSGV (default =SY-MSGV4)
* | [--->] IV_ROW TYPE ZSRS_TABIX_4_HTML(optional)
* | [!CX!] ZCX_ERROR
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
METHOD add .
fill_context(
iv_row = iv_row
iv_condition = iv_condition ).
ASSIGN gs_context->* TO FIELD-SYMBOL(<ls_context>).
DATA(ls_last_msgh) = gs_last_msgh.
READ TABLE lt_msgh INTO gs_last_msgh INDEX 1.
ENDMETHOD.
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_MESSAGES->ADD_BAPIRETURN
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IV_CONDITION TYPE ZSRS_MSG_CONDITION (default
=SPACE)
* | [--->] IT_BAPIRETURN TYPE BAPIRETTAB(optional)
* | [--->] IS_BAPIRETURN TYPE ANY(optional)
* | [<-()] EV_SEVERITY TYPE SYMSGTY
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
method add_bapireturn .
fill_context( iv_condition ).
assign gs_context->* to field-symbol(<ls_context>).
try.
call method lcl_bal=>add_msg_to_handler
exporting
iv_logobj = mv_logobj
iv_subobj = mv_subobj
iv_log_handle = gv_log_handle
iv_context_name = gv_context
iv_context_value = <ls_context>
it_bapireturn = it_bapireturn
is_bapireturn = is_bapireturn
iv_msgid = space " Zeichen, daß keine Einzelnachricht gesammelt
werden soll
importing
ev_log_handle = gv_log_handle
ev_severity = ev_severity
et_msgh = lt_msgh.
data(ls_last_msgh) = gs_last_msgh.
describe table lt_msgh lines sy-tfill.
if sy-tfill > 0.
read table lt_msgh into gs_last_msgh index sy-tfill.
endif.
catch zcx_error.
* Leere BAPIRET-Daten übergeben - ignorieren
endtry.
endmethod.
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_MESSAGES->ADD_FREE_TEXT
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IV_CONDITION TYPE ZSRS_MSG_CONDITION (default
=SPACE)
* | [--->] IV_ROW TYPE ZSRS_TABIX_4_HTML(optional)
* | [--->] IV_MSGTY TYPE SYMSGTY (default ='I')
* | [--->] IV_TEXT TYPE CSEQUENCE
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
METHOD add_free_text .
fill_context(
iv_row = iv_row
iv_condition = iv_condition ).
ASSIGN gs_context->* TO FIELD-SYMBOL(<ls_context>).
TRY.
CALL METHOD lcl_bal=>add_msg_to_handler
EXPORTING
iv_logobj = mv_logobj
iv_subobj = mv_subobj
iv_log_handle = gv_log_handle
iv_context_name = gv_context
iv_context_value = <ls_context>
iv_free_text = CONV text200( iv_text )
iv_msgty = iv_msgty
IMPORTING
ev_log_handle = gv_log_handle
et_msgh = lt_msgh.
DATA(ls_last_msgh) = gs_last_msgh.
READ TABLE lt_msgh INTO gs_last_msgh INDEX 1.
RAISE EVENT added
EXPORTING
is_msgh = gs_last_msgh
is_last_msgh = ls_last_msgh.
ENDMETHOD.
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_MESSAGES->ADD_FROM_BDC
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IT_MSG TYPE ETTCD_MSG_TABTYPE
* | [--->] IV_CONDITION TYPE ZSRS_MSG_CONDITION (default
=SPACE)
* | [<-()] EV_MSGS TYPE I
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
METHOD add_from_bdc.
LOOP AT it_msg
TRANSPORTING NO FIELDS
WHERE msgtyp CA 'EAX'.
EXIT.
ENDLOOP.
IF sy-subrc EQ 0 OR " Die Tabelle enthält Fehlermeldungen -> Log in jedem
Fall schreiben
NOT in_batchmode( ). " Log im Dialog-Modus auf jeden Fall schreiben
LOOP AT it_msg ASSIGNING FIELD-SYMBOL(<ls_msg>).
MESSAGE ID <ls_msg>-msgid TYPE <ls_msg>-msgtyp NUMBER <ls_msg>-msgnr
WITH <ls_msg>-msgv1 <ls_msg>-msgv2 <ls_msg>-msgv3 <ls_msg>-msgv4
INTO sy-msgli.
add( iv_condition = iv_condition ).
ADD 1 TO ev_msgs.
ENDLOOP.
ENDIF.
ENDMETHOD.
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_MESSAGES->ADD_FROM_EXCEPTION
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IV_CONDITION TYPE ZSRS_MSG_CONDITION (default
=SPACE)
* | [--->] IV_ROW TYPE ZSRS_TABIX_4_HTML(optional)
* | [--->] IO_EXCEPTION TYPE REF TO CX_ROOT
* | [--->] IV_MSGTY TYPE SYMSGTY (default ='E')
* | [--->] IV_ROOT_CAUSE TYPE FLAG(optional)
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
METHOD add_from_exception.
IF iv_root_cause = abap_true.
lo_ex = root_cause( io_exception ).
ELSE.
lo_ex = io_exception.
ENDIF.
ENDMETHOD..
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_MESSAGES->ADD_IN_DLG
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IV_TEXT TYPE CSEQUENCE(optional)
* | [--->] IV_MSGID TYPE SYMSGID (default =SY-MSGID)
* | [--->] IV_MSGTY TYPE SYMSGTY (default =SY-MSGTY)
* | [--->] IV_MSGNO TYPE SYMSGNO (default =SY-MSGNO)
* | [--->] IV_MSGV1 TYPE SYMSGV (default =SY-MSGV1)
* | [--->] IV_MSGV2 TYPE SYMSGV (default =SY-MSGV2)
* | [--->] IV_MSGV3 TYPE SYMSGV (default =SY-MSGV3)
* | [--->] IV_MSGV4 TYPE SYMSGV (default =SY-MSGV4)
* | [--->] IV_CONDITION TYPE ZSRS_MSG_CONDITION (default
=SPACE)
* | [--->] IV_ROW TYPE ZSRS_TABIX_4_HTML(optional)
* | [!CX!] ZCX_ERROR
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
method add_in_dlg .
endmethod.
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Static Public Method ZCL_MESSAGES=>CLASS_CONSTRUCTOR
*
+----------------------------------------------------------------------------------
---------------+
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
method CLASS_CONSTRUCTOR.
lcl_debug=>setup( ).
endmethod.
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_MESSAGES->CONSTRUCTOR
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IV_ID TYPE CSEQUENCE
* | [--->] IV_SUBOBJ TYPE BALSUBOBJ
* | [--->] IV_CONTEXT TYPE TABNAME (default
='ZMESSAGE_CONTEXT')
* | [--->] IV_LOG_HANDLE TYPE BALLOGHNDL(optional)
* | [--->] IV_REUSE_BAL_MEMORY TYPE FLAG (default =ABAP_FALSE)
* | [--->] IV_LOGOBJ TYPE BALOBJ_D
* | [!CX!] ZCX_NOT_FOUND
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
METHOD constructor .
gv_context = iv_context.
* Benutzerdefinierte Contextstruktur erzeugen
IF gv_context NE 'ZMESSAGE_CONTEXT'.
TRY.
CREATE DATA gs_context TYPE (gv_context).
CATCH cx_sy_create_data_error INTO lo_ex.
* Das Datenobjekt konnte nicht erzeugt werden. Die Struktur &1 existiert nicht
lv_text = lo_ex->get_text( ).
RAISE EXCEPTION TYPE zcx_not_found
EXPORTING
text = lv_text.
ENDTRY.
ENDIF.
IF iv_log_handle IS INITIAL.
mv_logobj = iv_logobj.
mv_subobj = iv_subobj.
ENDMETHOD.
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_MESSAGES->COPY
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IO_TARGET TYPE REF TO ZCL_MESSAGES
* | [--->] IV_CONDITION TYPE ZSRS_MSG_CONDITION (default
='*')
* | [--->] IV_ROW TYPE ZSRS_TABIX_4_HTML(optional)
* | [!CX!] ZCX_ERROR
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
METHOD copy.
DATA: lt_msg TYPE aqtbal_s_msg,
lv_log_handle TYPE balloghndl,
ls_context TYPE REF TO data,
lv_tabname TYPE baltabname.
* Meldungen holen
IF iv_row IS SUPPLIED.
CALL METHOD get_messages_detailed
EXPORTING
iv_condition = iv_condition
iv_row = iv_row
RECEIVING
et_msg = lt_msg.
ELSE.
CALL METHOD get_messages_detailed
EXPORTING
iv_condition = iv_condition
RECEIVING
et_msg = lt_msg.
ENDIF.
lv_log_handle = io_target->get_handle( ).
* ID im Msg-Context ändern
IF <ls_msg>-context-tabname NE space.
IF lv_tabname NE <ls_msg>-context-tabname.
lv_tabname = <ls_msg>-context-tabname.
CREATE DATA ls_context TYPE (lv_tabname).
IF ls_context IS BOUND.
ASSIGN ls_context->* TO <ls_context>.
ASSIGN COMPONENT gc_fieldname-id OF STRUCTURE <ls_context>
TO <lv_id>.
ENDIF.
ENDIF.
IF <lv_id> IS ASSIGNED.
MOVE <ls_msg>-context-value TO <ls_context>.
<lv_id> = io_target->gv_id.
MOVE <ls_context> TO <ls_msg>-context-value.
ENDIF.
ENDIF.
ENDLOOP.
ENDMETHOD.
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_MESSAGES->DELETE
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IV_CONDITION TYPE ZSRS_MSG_CONDITION (default
='*')
* | [--->] IV_ROW TYPE ZSRS_TABIX_4_HTML(optional)
* | [--->] IS_AFTER_MSGH TYPE BALMSGHNDL(optional)
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
METHOD delete .
* ID als Filter
INSERT VALUE #(
tabname = gv_context
fieldname = gc_fieldname-id
t_range = VALUE #( (
option = 'EQ'
sign = 'I'
low = gv_id ) )
) INTO TABLE lt_cfil.
IF gv_end_last_section >= 0
OR is_after_msgh IS NOT INITIAL.
ls_mfil-msgnumber = VALUE #( (
sign = 'I'
option = 'GT'
low = nmax(
val1 = gv_end_last_section
val2 = is_after_msgh-msgnumber ) ) ).
ENDIF.
* Meldungen suchen
CALL FUNCTION 'BAL_GLB_SEARCH_MSG'
EXPORTING
i_s_msg_filter = ls_mfil
i_t_log_handle = lt_logh
i_t_msg_context_filter = lt_cfil
IMPORTING
e_t_msg_handle = lt_msgh_del
EXCEPTIONS
msg_not_found = 1
OTHERS = 2.
IF sy-subrc = 0.
* Meldungen löschen
LOOP AT lt_msgh_del ASSIGNING FIELD-SYMBOL(<ls_msgh>).
CALL FUNCTION 'BAL_LOG_MSG_DELETE'
EXPORTING
i_s_msg_handle = <ls_msgh>
EXCEPTIONS
OTHERS = 0.
ENDLOOP.
recompute_last_msgh( ).
ENDIF.
ENDIF.
ENDMETHOD.
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_MESSAGES->DELETE_LOG
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IV_ALSO_ON_DB TYPE FLAG (default =ABAP_FALSE)
* | [!CX!] ZCX_ERROR
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
METHOD delete_log .
* Nach Aufruf dieser Methode kann die aktuelle Instanz nicht mehr verwendet werden
* ( Verwendung führt sofort zu Abbrüchen wg. fehlenden Log-Handles,
* und das ist auch richtig so.)
lcl_bal=>delete_log( iv_also_on_db ).
CLEAR:
gs_context,
gs_context_std,
gs_last_msgh,
gv_constructed_at,
gv_context,
gv_end_last_section,
gv_foreign_log,
gv_id,
mv_logobj,
mv_subobj,
gv_log_handle.
ENDMETHOD.
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_MESSAGES->DELETE_SINGLE
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IS_MSGH TYPE BALMSGHNDL
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
METHOD delete_single .
IF gs_last_msgh = is_msgh.
recompute_last_msgh( ).
ENDIF.
ENDMETHOD.
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_MESSAGES->DISPLAY
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IV_FULLSCREEN TYPE FLAG (default ='X')
* | [--->] IS_PROF TYPE BAL_S_PROF(optional)
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
METHOD display .
IF is_prof IS SUPPLIED.
ls_prof = is_prof.
ELSE.
IF iv_fullscreen EQ 'X'.
CALL FUNCTION 'BAL_DSP_PROFILE_NO_TREE_GET'
IMPORTING
e_s_display_profile = ls_prof.
ELSE.
CALL FUNCTION 'BAL_DSP_PROFILE_POPUP_GET'
IMPORTING
e_s_display_profile = ls_prof.
ENDIF.
ls_prof-use_grid = 'X'.
ENDIF.
CALL FUNCTION 'BAL_DSP_LOG_DISPLAY'
EXPORTING
i_s_display_profile = ls_prof
i_t_log_handle = lt_logh
EXCEPTIONS
profile_inconsistent = 1
internal_error = 2
no_data_available = 3
no_authority = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDMETHOD.
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Private Method ZCL_MESSAGES->FILL_CONTEXT
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IV_ROW TYPE ZSRS_TABIX_4_HTML(optional)
* | [--->] IV_CONDITION TYPE ZSRS_MSG_CONDITION
* | [<-()] ES_CONTEXT TYPE REF TO DATA
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
method fill_context.
if gv_context eq 'ZMESSAGE_CONTEXT'.
gs_context = ref #( gs_context_std ).
else.
assign gs_context->* to field-symbol(<ls_context>).
move-corresponding gs_context_std to <ls_context>.
endif.
es_context = gs_context.
endmethod.
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_MESSAGES->GET_HANDLE
*
+----------------------------------------------------------------------------------
---------------+
* | [<-()] EV_LOG_HANDLE TYPE BALLOGHNDL
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
METHOD get_handle .
ev_log_handle = gv_log_handle.
ENDMETHOD.
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_MESSAGES->GET_HIGHEST_TYPE
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IV_CONDITION TYPE ZSRS_MSG_CONDITION (default
='*')
* | [--->] IV_ROW TYPE ZSRS_TABIX_4_HTML(optional)
* | [<-()] EV_TYPE TYPE SYMSGTY
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
METHOD get_highest_type .
IF iv_row IS SUPPLIED.
lt_msg = get_messages_detailed( iv_condition = iv_condition
iv_row = iv_row ).
ELSE.
lt_msg = get_messages_detailed( iv_condition ).
ENDIF.
IF lv_off EQ -1.
ev_type = space.
ELSE.
ev_type = gc_message_types+lv_off(1).
ENDIF.
ENDMETHOD.
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Static Public Method ZCL_MESSAGES=>GET_INSTANCE
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IV_ID TYPE CSEQUENCE(optional)
* | [--->] IV_SUBOBJ TYPE BALSUBOBJ(optional)
* | [--->] IV_CONTEXT TYPE TABNAME (default
='ZMESSAGE_CONTEXT')
* | [--->] IV_REOPEN TYPE FLAG (default =SPACE)
* | [--->] IV_LOGOBJ TYPE BALOBJ_D(optional)
* | [<-()] EO_INSTANCE TYPE REF TO ZCL_MESSAGES
* | [!CX!] ZCX_PARAMETER_MISSING
* | [!CX!] ZCX_NOT_FOUND
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
METHOD get_instance .
ls_instance-id = iv_id.
READ TABLE gt_instances INTO ls_instance
FROM ls_instance.
IF sy-subrc NE 0.
IF iv_logobj IS NOT INITIAL AND iv_subobj IS NOT INITIAL.
ls_instance-id = iv_id.
* ExtNumber übergeben? Dann schauen, ob es das Log auf der DB gibt
IF iv_reopen IS NOT INITIAL.
lv_extnumber = iv_id.
lv_handle = lcl_bal=>read_by_extnumber(
iv_extnumber = lv_extnumber
iv_object = iv_logobj
iv_subobject = iv_subobj ).
ENDIF.
* Log instanziieren
* Eintrag in Instanzverwaltung erfolgt im Konstruktor
CREATE OBJECT ls_instance-messages "ZCL_MESSAGES
EXPORTING
iv_id = ls_instance-id
iv_logobj = iv_logobj
iv_subobj = iv_subobj
iv_context = iv_context
iv_log_handle = lv_handle.
ENDIF.
ENDIF.
eo_instance = ls_instance-messages.
ENDMETHOD.
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_MESSAGES->GET_LAST_MESSAGE
*
+----------------------------------------------------------------------------------
---------------+
* | [<---] ES_MSG TYPE BAL_S_MSG
* | [<---] ES_MSGH TYPE BALMSGHNDL
* | [!CX!] ZCX_NOT_FOUND
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
method get_last_message .
if gs_last_msgh is initial.
raise exception type zcx_not_found.
else.
es_msgh = gs_last_msgh.
call function 'BAL_LOG_MSG_READ'
exporting
i_s_msg_handle = gs_last_msgh
importing
e_s_msg = es_msg
exceptions
log_not_found = 1
msg_not_found = 2
others = 3.
if sy-subrc <> 0.
raise exception type zcx_not_found.
endif.
endif.
endmethod.
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_MESSAGES->GET_MESSAGE
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IV_CONDITION TYPE ZSRS_MSG_CONDITION (default
='*')
* | [--->] IV_ROW TYPE ZSRS_TABIX_4_HTML(optional)
* | [<---] EV_MSG_TYPE TYPE SYMSGTY
* | [<---] EV_MSG_TEXT TYPE STRING
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
method get_message .
data: ls_msg type bal_s_msg.
if iv_row is supplied.
call method get_message_with_handle
exporting
iv_condition = iv_condition
iv_row = iv_row
importing
es_msg = ls_msg.
else.
call method get_message_with_handle
exporting
iv_condition = iv_condition
importing
es_msg = ls_msg.
endif.
ev_msg_type = ls_msg-msgty.
endmethod.
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_MESSAGES->GET_MESSAGES
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IV_CONDITION TYPE ZSRS_MSG_CONDITION (default
='*')
* | [<-()] ET_MESSAGES TYPE ZCL_SRS_MESSAGE_TAB
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
method get_messages .
data: lt_msg type aqtbal_s_msg,
ls_message type zcl_srs_message,
lv_aux type c length 269.
endmethod.
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_MESSAGES->GET_MESSAGES_DETAILED
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IV_CONDITION TYPE ZSRS_MSG_CONDITION (default
='*')
* | [--->] IV_ROW TYPE ZSRS_TABIX_4_HTML(optional)
* | [<-()] ET_MSG TYPE AQTBAL_S_MSG
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
method get_messages_detailed . "#EC CI_VALPAR
if iv_row is supplied.
call method get_messages_detailed_with_hdl
exporting
iv_condition = iv_condition
iv_row = iv_row
importing
et_messages = lt_messages.
else.
call method get_messages_detailed_with_hdl
exporting
iv_condition = iv_condition
importing
et_messages = lt_messages.
endif.
endmethod.
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_MESSAGES->GET_MESSAGES_DETAILED_WITH_HDL
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IV_CONDITION TYPE ZSRS_MSG_CONDITION (default
='*')
* | [--->] IV_ROW TYPE ZSRS_TABIX_4_HTML(optional)
* | [<---] ET_MESSAGES TYPE SWF_APP_LOG_EXT_MSG_T
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
method get_messages_detailed_with_hdl .
* Meldungen suchen
if iv_row is supplied.
lt_msgh = search_messages( iv_condition = iv_condition
iv_row = iv_row ).
else.
lt_msgh = search_messages( iv_condition ).
endif.
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_MESSAGES->GET_MESSAGE_DETAILED
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IV_CONDITION TYPE ZSRS_MSG_CONDITION (default
='*')
* | [--->] IV_ROW TYPE ZSRS_TABIX_4_HTML(optional)
* | [<-()] ES_MSG TYPE BAL_S_MSG
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
method get_message_detailed .
endmethod.
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_MESSAGES->GET_MESSAGE_WITH_HANDLE
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IV_CONDITION TYPE ZSRS_MSG_CONDITION (default
='*')
* | [--->] IV_ROW TYPE ZSRS_TABIX_4_HTML(optional)
* | [<---] ES_MSGH TYPE BALMSGHNDL
* | [<---] ES_MSG TYPE BAL_S_MSG
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
method get_message_with_handle .
data: ls_msg type bal_s_msg,
lt_msgh type ref to bal_t_msgh,
lv_offset type i.
* Meldungen suchen
if iv_row is supplied.
lt_msgh = search_messages( iv_condition = iv_condition
iv_row = iv_row ).
else.
lt_msgh = search_messages( iv_condition = iv_condition ).
endif.
endmethod..
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Static Private Method ZCL_MESSAGES=>IN_BATCHMODE
*
+----------------------------------------------------------------------------------
---------------+
* | [<-()] EV_BATCHMODE TYPE FLAG
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
method in_batchmode.
ev_batchmode = sy-batch.
raise event batchmode
exporting
cv_batchmode = ref #( ev_batchmode ).
endmethod.
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Private Method ZCL_MESSAGES->RECOMPUTE_LAST_MSGH
*
+----------------------------------------------------------------------------------
---------------+
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
method recompute_last_msgh.
if lt_msgh is initial.
clear gs_last_msgh.
else.
gs_last_msgh = lt_msgh[ lines( lt_msgh ) ].
endif.
endmethod.
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_MESSAGES->RESET_SECTION
*
+----------------------------------------------------------------------------------
---------------+
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
method reset_section.
gv_end_last_section = -1.
endmethod.
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Static Public Method ZCL_MESSAGES=>ROOT_CAUSE
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IO_EX TYPE REF TO CX_ROOT
* | [<-()] EO_EX TYPE REF TO CX_ROOT
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
method ROOT_CAUSE.
eo_ex = io_ex.
while eo_ex->previous is bound.
eo_ex = eo_ex->previous.
endwhile.
endmethod.
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_MESSAGES->SAVE
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IV_UPDATE_TASK TYPE FLAG (default ='X')
* | [<---] EV_LOGNUMBER TYPE BALOGNR
* | [<---] EV_LOG_HANDLE TYPE BALLOGHNDL
* | [!CX!] ZCX_ERROR
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
method save .
lcl_bal=>save_log(
iv_log_handle = gv_log_handle
iv_update_task = iv_update_task ).
ev_log_handle = gv_log_handle.
endmethod.
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Private Method ZCL_MESSAGES->SEARCH_MESSAGES
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IV_CONDITION TYPE ZSRS_MSG_CONDITION (default
='*')
* | [--->] IV_ROW TYPE ZSRS_TABIX_4_HTML(optional)
* | [<-()] ET_MSGH TYPE REF TO BAL_T_MSGH
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
method SEARCH_MESSAGES.
endmethod.
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_MESSAGES->SET_CONTEXT
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IS_CONTEXT TYPE CLIKE
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
method set_context.
if gs_context is bound.
assign gs_context->* to <ls_context>.
move-corresponding is_context to <ls_context>.
endif.
endmethod.
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_MESSAGES->SET_SECTION
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IV_CONDITION TYPE ZSRS_MSG_CONDITION (default
='*')
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
method set_section .
clear gv_end_last_section.
loop at lt_msgh->* assigning <ls_msgh>.
if <ls_msgh>-msgnumber > gv_end_last_section.
gv_end_last_section = <ls_msgh>-msgnumber.
endif.
endloop.
endmethod.
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Static Public Method ZCL_MESSAGES=>SHOW_EXCEPTION
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IO_EX TYPE REF TO CX_ROOT
* | [--->] IV_MSGTY TYPE MSGTY (default ='I')
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
METHOD show_exception.
* Vorteil dieser Methode: Eine T100-Meldung wird nicht nur als Text angezeigt,
* sondern zeigt z.B. auch den korrekten Langtext
DEFINE get_msgfield.
ASSIGN io_ex->(&1) TO <lv_any>.
IF sy-subrc EQ 0.
&2 = <lv_any>.
ENDIF.
end-of-definition.
IF ls_msg-msgid NE space.
MESSAGE ID ls_msg-msgid TYPE iv_msgty NUMBER ls_msg-msgno
WITH ls_msg-msgv1 ls_msg-msgv2 ls_msg-msgv3 ls_msg-msgv4.
ELSE.
lv_text = io_ex->get_text( ).
MESSAGE lv_text TYPE iv_msgty.
ENDIF.
ENDMETHOD.
ENDCLASS.4