‎2011 Mar 15 5:25 AM
Hi,
I want to download to excel all the error log messages which I get in SLG1 when I do mass article data upload for MM42 using BAPI.
Could someone tell me how to get message in SLG1 in the calling program so as to download only the text in excel.
Thanks in advance.
‎2011 Mar 15 10:00 AM
hi try functions like that
sample comes here:
TYPE-POOLS: icon.
Tabellen
DATA:
gt_log_handle TYPE bal_t_logh,
gt_lognumber TYPE bal_t_logn,
gt_msg_handle TYPE bal_t_msgh,
gt_log_header TYPE balhdr_t,
*
gt_log_filter TYPE bal_s_lfil, "Filter gesamt
gt_log_filter_obj TYPE bal_s_lfil-object, "Objekt
gt_log_filter_sub TYPE bal_s_lfil-subobject, "Unterobjekt
gt_log_filter_extn TYPE bal_s_lfil-extnumber, "Ext.Identifikation
gt_log_filter_user TYPE bal_s_lfil-aluser, "User
gt_log_filter_prcl TYPE bal_s_lfil-probclass, "Protokollklasse
gt_log_filter_dttm TYPE bal_s_lfil-date_time, "Datum/Zeit von-bis
gt_log_filter_alprog TYPE bal_s_lfil-alprog. "Programmname
Strukturen
DATA:
gs_log_header TYPE LINE OF balhdr_t,
gs_log_handle TYPE LINE OF bal_t_logh,
gs_lognumber TYPE LINE OF bal_t_logn,
gs_msg_ret TYPE bal_s_msg,
gs_msg_handle TYPE LINE OF bal_t_msgh,
gs_balloghndl TYPE balloghndl,
*
gs_log_filter_obj TYPE LINE OF bal_s_lfil-object, "Objekt
gs_log_filter_sub TYPE LINE OF bal_s_lfil-subobject, "Unterobjekt
gs_log_filter_extn TYPE LINE OF bal_s_lfil-extnumber, "Ext.Ident.
gs_log_filter_user TYPE LINE OF bal_s_lfil-aluser, "User
gs_log_filter_prcl TYPE LINE OF bal_s_lfil-probclass, "Protokollklasse
gs_log_filter_dttm TYPE bal_s_lfil-date_time, "Datum/Zeit
gs_log_filter_alprog TYPE LINE OF bal_s_lfil-alprog. "Programmname
Arbeitsfelder
DATA:
gs_txt_msg TYPE c,
gs_msg_text(90) TYPE c,
gv_do_not_load_messages TYPE boolean,
gv_tabix TYPE sy-tabix,
gs_marav TYPE marav.
*----
*
Abgrenzungen *
*----
*
SELECTION-SCREEN BEGIN OF BLOCK 1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_object FOR gs_log_filter_obj, "Objekt
s_subobj FOR gs_log_filter_sub, "SubObjekt
s_extnum FOR gs_log_filter_extn, "Ext.Ident.
s_aluser FOR gs_log_filter_user, "Benutzer
s_prcl FOR gs_log_filter_prcl, "Protokollklasse
s_alprog FOR gs_log_filter_alprog. "Programmname
PARAMETERS: p_err DEFAULT 'X' RADIOBUTTON GROUP r1,
p_all RADIOBUTTON GROUP r1.
SELECTION-SCREEN END OF BLOCK 1.
*
SELECTION-SCREEN BEGIN OF BLOCK 2 WITH FRAME TITLE text-002.
PARAMETERS: p_datev TYPE sy-datum DEFAULT sy-datum,
p_timev TYPE sy-uzeit DEFAULT '000000',
p_dateb TYPE sy-datum DEFAULT sy-datum,
p_timeb TYPE sy-uzeit DEFAULT '235959'.
SELECTION-SCREEN END OF BLOCK 2.
*----
*
Initialisierung *
*----
*
INITIALIZATION.
Objektname
gs_log_filter_obj-low = 'ZPP_MSG'.
gs_log_filter_obj-option = 'EQ'.
gs_log_filter_obj-sign = 'I'.
APPEND gs_log_filter_obj TO s_object.
Sub-Objekt
gs_log_filter_sub-low = 'EDOK2ERP_STAMM'.
gs_log_filter_sub-option = 'EQ'.
gs_log_filter_sub-sign = 'I'.
APPEND gs_log_filter_sub TO s_subobj.
Benutzer
gs_log_filter_user-low = sy-uname.
gs_log_filter_user-option = 'EQ'.
gs_log_filter_user-sign = 'I'.
APPEND gs_log_filter_user TO s_aluser.
*----
*
Datenselektion *
*----
*
START-OF-SELECTION.
Selektionstabellen übergeben
gt_log_filter-object[] = s_object[]. "Objekt
gt_log_filter-subobject[] = s_subobj[]. "SubObjekt
gt_log_filter-extnumber[] = s_extnum[]. "Ext.Ident.
gt_log_filter-aluser[] = s_aluser[]. "Benutzer
gt_log_filter-probclass[] = s_prcl[]. "Protokollklasse
gt_log_filter-alprog[] = s_alprog[]. "Programmname
Datum
gt_log_filter-date_time-date_from = p_datev.
gt_log_filter-date_time-time_from = p_timev.
gt_log_filter-date_time-date_to = p_dateb.
gt_log_filter-date_time-time_to = p_timeb.
Log's suchen
CALL FUNCTION 'BAL_DB_SEARCH'
EXPORTING
i_s_log_filter = gt_log_filter
IMPORTING
e_t_log_header = gt_log_header
EXCEPTIONS
log_not_found = 1
no_filter_criteria = 2
OTHERS = 3.
IF sy-subrc <> 0.
STOP.
ENDIF.
Log's in den Hauptspeicher laden
CALL FUNCTION 'BAL_DB_LOAD'
EXPORTING
i_t_log_header = gt_log_header
i_t_log_handle = gt_log_handle
i_t_lognumber = gt_lognumber
i_do_not_load_messages = gv_do_not_load_messages
I_DO_NOT_LOAD_MESSAGES = 'X'
IMPORTING
e_t_log_handle = gt_log_handle
e_t_msg_handle = gt_msg_handle
EXCEPTIONS
no_logs_specified = 1
log_not_found = 2
log_already_loaded = 3
OTHERS = 4.
IF sy-subrc <> 0.
STOP.
ENDIF.
LOOP AT gt_log_header INTO gs_log_header.
IF p_err <> space.
CHECK gs_log_header-msg_cnt_a > 0 OR
gs_log_header-msg_cnt_e > 0.
ELSEIF p_all <> space.
CHECK gs_log_header-msg_cnt_a > 0 OR
gs_log_header-msg_cnt_e > 0 OR
gs_log_header-msg_cnt_w > 0 OR
gs_log_header-msg_cnt_i > 0 OR
gs_log_header-msg_cnt_s > 0.
ENDIF.
Meldungen zum Log lesen
LOOP AT gt_msg_handle INTO gs_msg_handle.
CHECK gs_msg_handle(22) EQ gs_log_header-log_handle.
CALL FUNCTION 'BAL_LOG_MSG_READ'
EXPORTING
i_s_msg_handle = gs_msg_handle
i_s_msg_handle = gs_balmsghndl
i_langu = sy-langu
IMPORTING
e_s_msg = gs_msg_ret
E_EXISTS_ON_DB = 'X'
E_TXT_MSGTY =
E_TXT_MSGID =
E_TXT_DETLEVEL =
E_TXT_PROBCLASS =
e_txt_msg = gs_txt_msg
E_WARNING_TEXT_NOT_FOUND =
EXCEPTIONS
log_not_found = 1
msg_not_found = 2
OTHERS = 3.
Meldungstext aufbereiten
IF sy-subrc EQ 0.
CLEAR: gs_msg_text.
CALL FUNCTION 'BAL_DSP_TXT_MSG_READ'
EXPORTING
i_langu = sy-langu
i_msgid = gs_msg_ret-msgid
i_msgno = gs_msg_ret-msgno
i_msgv1 = gs_msg_ret-msgv1
i_msgv2 = gs_msg_ret-msgv2
i_msgv3 = gs_msg_ret-msgv3
i_msgv4 = gs_msg_ret-msgv4
IMPORTING
e_message_text = gs_msg_text.
WRITE: / gs_log_header-extnumber(18),
21 gs_log_header-aldate,
33 gs_log_header-altime,
42 gs_log_header-probclass,
50 gs_log_header-aluser,
64 gs_log_header-alprog(25),
89 gs_msg_ret-msgid,
91 gs_msg_ret-msgno,
99 gs_msg_text.
ENDIF.
ENDLOOP.
ENDLOOP.
Log's wieder freigeben
LOOP AT gt_log_handle INTO gs_log_handle.
gs_balloghndl = gs_log_handle.
CALL FUNCTION 'BAL_LOG_REFRESH'
EXPORTING
i_log_handle = gs_balloghndl
EXCEPTIONS
log_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
ENDLOOP.