‎2007 Apr 18 5:23 AM
hI all,
I would like to take print a report of all errors in bdc session where it stores in a log file. how can we get all the errors from a log file through a program. means how can we know the log file name. my idea is if we know the log file name by using ws_upload we will get that data into internal table. by using that internal table we can print a report. where can we get the log file name or is there any other method.
pls help me out.
rewards will be awarded.
‎2007 Apr 18 5:34 AM
Hai
Please Refer this program
&----
*& Report ZSUBTEST_BDC
*&
&----
*&
*&
&----
----
*& Program Name : ZSUBTEST_BDC *
*& Module Name : Human Resource *
*& Sub-Module : Cross Component *
*& Author : Ravi Vadlakunta *
*& Create Date : 05/28/2003 *
*& Logical DB : None *
*& Program Type : Report *
*& SAP Release : 4.7 *
*& Description:
*& Program to read BDC Errors from SM35 and give the output report *
*& in ALV format - Ravi Vadlakunta. *
&----
REPORT ZSUBTEST_BDC NO STANDARD PAGE HEADING
LINE-SIZE 300
LINE-COUNT 65.
TABLES: apqd, apql, apqi, t100, dd03l, dd04t.
DATA : BEGIN OF tbl_apqi OCCURS 0 .
INCLUDE STRUCTURE apqi.
DATA: END OF tbl_apqi.
DATA: dynpro_index TYPE i,
sdat LIKE apqd-vardata,
udat LIKE apqd-vardata,
bdcmhlen TYPE i VALUE 68,
wcount TYPE i,
mfstart TYPE i,
mfende TYPE i,
mflen TYPE i,
mfart(2).
*
DATA: BEGIN OF tf OCCURS 0,
count TYPE i VALUE 0,
trcd(4),
stat(4),
pgm(8),
dyn(4) TYPE n,
fname(35),
farg(80),
fstart(5) TYPE p,
fende(5) TYPE p,
END OF tf.
TYPE-POOLS slis.
DATA : BEGIN OF tbl_apqd OCCURS 0.
INCLUDE STRUCTURE apqd.
DATA: END OF tbl_apqd.
DATA: BEGIN OF all_bdc_dynpro OCCURS 0,
program LIKE sy-cprog,
dynpro LIKE sy-dynnr,
fnam LIKE bdcdata-fnam,
fval LIKE bdcdata-fval,
index TYPE i,
END OF all_bdc_dynpro.
DATA :BEGIN OF bdcmh,
mtype, state,
tcode(20),
prog(40),
dynr(4),
sepc,
filler,
END OF bdcmh.
DATA: BEGIN OF bdcth,
mtype,
state,
tcode(20),
postg,
print,
msgid(20),
END OF bdcth.
DATA: BEGIN OF all_bdc_tcodes OCCURS 0,
index TYPE i,
tcode LIKE sy-tcode,
status(1),
s_text(16),
pernr(400),
groupid LIKE apqi-groupid,
qid LIKE apqi-qid,
END OF all_bdc_tcodes.
DATA:
logtab LIKE bdcld OCCURS 0 WITH HEADER LINE,
tbl_temse LIKE apql OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF tbl_bdcld OCCURS 0,
qid LIKE bdcld-quid.
INCLUDE STRUCTURE bdcld. "
DATA: logname(80), " protokollpfad
local_host(12), " lokaler rechner
cnt TYPE i, " satzzaehler
active(1) TYPE c, " active flag
temseid TYPE rstsoname. " TemSe ID
DATA END OF tbl_bdcld .
DATA : tbl_temp_bdcld LIKE tbl_bdcld OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF tbl_bdclm OCCURS 0,
qid LIKE apqi-qid.
INCLUDE STRUCTURE bdclm.
DATA: counter TYPE i,
longtext TYPE bdc_mpar,
text_caps TYPE bdc_mpar,
END OF tbl_bdclm .
DATA: lm LIKE tbl_bdclm,
save_mpar TYPE bdc_mpar,
mtext(124) TYPE c,
mtext1(124) TYPE c,
mtext2(273) TYPE c,
digits(10) TYPE c VALUE '0123456789'.
DATA: do_condense TYPE c,
mtvaroff TYPE i,
showtyp(05) TYPE c, "showtyp
lmapn(12) TYPE c, "Hilfsfeld log-mapn
date1 TYPE d,
linct0 LIKE sy-linct,
parcnt TYPE i,
sp_len TYPE i,
charcnt TYPE i,
wcnt TYPE i,
mparcnt TYPE i,
qfound(04) TYPE n,
x(1) VALUE 'X'.
DATA :BEGIN OF mt,
off(02) TYPE n,
len(02) TYPE n,
text(80),
END OF mt.
DATA: "Aufbereitung Messagetext
BEGIN OF mttab OCCURS 4,
off(02) TYPE n,
len(02) TYPE n,
text(80),
END OF mttab.
DATA: BEGIN OF par,
len(02) TYPE n,
text(254),
END OF par.
DATA : BEGIN OF tbl_out OCCURS 0,
index LIKE all_bdc_tcodes-index,
info(35),
module LIKE tbl_bdclm-module,
screen LIKE tbl_bdclm-dynr,
error_message LIKE tbl_bdclm-longtext,
groupid LIKE apqi-groupid,
qid LIKE apqi-qid,
END OF tbl_out.
DATA : x_catalog TYPE slis_fieldcat_alv.
DATA : x_sort TYPE slis_sortinfo_alv.
DATA : i_catalog TYPE slis_t_fieldcat_alv.
DATA : i_sort TYPE slis_t_sortinfo_alv.
DATA: gt_list_top_of_page TYPE slis_t_listheader.
DATA : gt_events TYPE slis_t_event.
FIELD-SYMBOLS:
<mtxt>,
<vtxt>.
CONSTANTS : c_x VALUE 'X',
c_i VALUE 'I'.
CONSTANTS : gc_formname_top_of_page TYPE slis_formname
VALUE 'TOP_OF_PAGE'.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME .
PARAMETERS : p_sess LIKE apql-groupid OBLIGATORY,
p_user LIKE apql-creator OBLIGATORY,
p_date LIKE sy-datum OBLIGATORY.
SELECT-OPTIONS: s_time FOR sy-uzeit OBLIGATORY.
PARAMETERS: p_string(35) OBLIGATORY,
p_mess(35) .
SELECT-OPTIONS: s_excl FOR tbl_bdclm-longtext NO INTERVALS.
PARAMETERS: p_lgindx OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-001 .
PARAMETERS: p_err AS CHECKBOX DEFAULT 'X',
p_war AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK b2.
----
START-OF-SELECTION.
PERFORM select_session_data.
PERFORM get_logs.
----
END-OF-SELECTION.
PERFORM move_final_data_to_tblout.
PERFORM build_catalog.
PERFORM sort.
PERFORM display_alv.
&----
*& Form get_session_data
&----
text
----
--> p1 text
<-- p2 text
----
FORM get_session_data.
MOVE tbl_apqd-vardata TO bdcmh.
TRANSLATE bdcmh TO UPPER CASE.
MOVE tbl_apqd-vardata TO sdat.
SHIFT sdat BY bdcmhlen PLACES.
wcount = bdcmhlen.
mfstart = wcount.
mfart = 'FN'.
WHILE wcount LE tbl_apqd-varlen.
IF sdat(1) = bdcmh-sepc.
mfende = wcount.
PERFORM move_tf.
ENDIF.
SHIFT sdat.
wcount = wcount + 1.
ENDWHILE.
ENDFORM. " get_session_data
&----
*& Form MOVE_TF
&----
text
----
--> p1 text
<-- p2 text
----
FORM move_tf.
mflen = mfende - mfstart.
CASE mfart.
WHEN 'FN'.
CLEAR: tf-fname, udat.
tf-fstart = mfstart.
MOVE tbl_apqd-vardata TO udat.
SHIFT udat BY mfstart PLACES.
WRITE udat TO tf-fname+0(mflen).
TRANSLATE tf-fname TO UPPER CASE.
mfstart = mfende + 1.
mfende = 0.
MOVE 'FA' TO mfart.
WHEN 'FA'.
CLEAR: tf-farg, udat.
tf-fende = mfende.
MOVE tbl_apqd-vardata TO udat.
SHIFT udat BY mfstart PLACES.
WRITE udat TO tf-farg+0(mflen).
APPEND tf.
tf-stat = space.
mfstart = mfende + 1.
mfende = 0.
MOVE 'FN' TO mfart.
CHECK NOT tf-fname IS INITIAL.
CLEAR all_bdc_dynpro.
all_bdc_dynpro-index = dynpro_index.
all_bdc_dynpro-fnam = tf-fname.
all_bdc_dynpro-fval = tf-farg.
APPEND all_bdc_dynpro.
WHEN OTHERS.
ENDCASE.
ENDFORM. " MOVE_TF
&----
*& Form get_logs
&----
text
----
--> p1 text
<-- p2 text
----
FORM get_logs.
DATA: BEGIN OF logtable OCCURS 50, " plain log information in TemSe
enterdate LIKE btctle-enterdate,
entertime LIKE btctle-entertime,
logmessage(900) type c,
logmessage(400) TYPE c,
END OF logtable.
LOOP AT tbl_apqi.
SELECT * FROM apql APPENDING TABLE tbl_temse WHERE qid =
tbl_apqi-qid.
ENDLOOP.
CHECK sy-subrc = 0.
DATA: wa_log LIKE LINE OF tbl_temse,
wa_ld LIKE LINE OF tbl_bdcld.
LOOP AT tbl_temse INTO wa_log.
CLEAR wa_ld.
wa_ld-temseid = wa_log-temseid.
wa_ld-lmand = wa_log-mandant.
wa_ld-edate = wa_log-credate.
wa_ld-etime = wa_log-cretime.
wa_ld-luser = wa_log-creator.
wa_ld-grpn = wa_log-groupid.
wa_ld-quid = wa_log-qid.
wa_ld-local_host = wa_log-destsys(8).
wa_ld-qid = wa_log-qid.
APPEND wa_ld TO tbl_bdcld.
ENDLOOP.
SORT tbl_bdcld BY qid ASCENDING edate DESCENDING etime DESCENDING.
read table bdcld index 1.
LOOP AT tbl_bdcld.
MOVE : tbl_bdcld TO tbl_temp_bdcld.
APPEND tbl_temp_bdcld.
AT END OF qid.
SORT tbl_temp_bdcld BY qid ASCENDING edate DESCENDING
etime DESCENDING.
READ TABLE tbl_temp_bdcld INDEX p_lgindx.
PERFORM read_bdc_log_plain
TABLES logtable
USING tbl_temp_bdcld-temseid tbl_temp_bdcld-lmand.
LOOP AT logtable.
CLEAR tbl_bdclm.
tbl_bdclm-indate = logtable-enterdate.
tbl_bdclm-qid = tbl_temp_bdcld-qid.
tbl_bdclm-intime = logtable-entertime.
tbl_bdclm+34(300) = logtable-logmessage.
tbl_bdclm-mpar = logtable-logmessage.
APPEND tbl_bdclm.
ENDLOOP.
REFRESH: tbl_temp_bdcld.
CLEAR tbl_temp_bdcld.
ENDAT.
ENDLOOP.
LOOP AT tbl_bdclm.
lm = tbl_bdclm. save_mpar = tbl_bdclm-mpar.
PERFORM get_text.
tbl_bdclm-longtext = mtext.
tbl_bdclm-mpar = save_mpar.
MOVE tbl_bdclm-longtext TO tbl_bdclm-text_caps.
TRANSLATE tbl_bdclm-text_caps TO UPPER CASE.
MODIFY tbl_bdclm.
ENDLOOP.
IF p_err IS INITIAL.
DELETE tbl_bdclm WHERE mart = 'E'.
ENDIF.
IF p_war IS INITIAL.
DELETE tbl_bdclm WHERE mart = 'W'.
ENDIF.
IF NOT s_excl IS INITIAL.
DELETE tbl_bdclm WHERE text_caps IN s_excl.
ENDIF.
ENDFORM. " get_logs
&----
*& Form READ_BDC_LOG_PLAIN
&----
text
----
-->P_LOGTABLE text
-->P_BDCLD_TEMSEID text
-->P_BDCLD_LMAND text
----
FORM read_bdc_log_plain
TABLES
log_table
USING
log_name log_client.
FREE log_table.
CALL FUNCTION 'RSTS_OPEN_RLC'
EXPORTING
name = log_name
client = log_client
authority = 'BATCH'
prom = 'I'
rectyp = 'VNL----'
EXCEPTIONS
fb_call_handle = 4
fb_error = 8
fb_rsts_noconv = 12
fb_rsts_other = 16
no_object = 20
OTHERS = 24.
IF sy-subrc > 0.
EXIT.
ENDIF.
CALL FUNCTION 'RSTS_READ'
TABLES
datatab = log_table
EXCEPTIONS
fb_call_handle = 4
fb_error = 8
fb_rsts_noconv = 12
fb_rsts_other = 16
OTHERS = 16.
IF sy-subrc > 0.
EXIT.
ENDIF.
CALL FUNCTION 'RSTS_CLOSE'
EXCEPTIONS
OTHERS = 4.
IF sy-subrc > 0.
EXIT.
ENDIF.
ENDFORM. " READ_BDC_LOG_PLAIN
&----
*& Form GET_TEXT
&----
text
----
--> p1 text
<-- p2 text
----
FORM get_text.
DATA: shiftln TYPE i,
vartcnt TYPE i,
fdpos LIKE sy-fdpos.
IF tbl_bdclm-mparcnt CN digits.
tbl_bdclm-mparcnt = 0.
ENDIF.
SELECT SINGLE * FROM t100
WHERE sprsl = sy-langu
AND arbgb = tbl_bdclm-mid
AND msgnr = tbl_bdclm-mnr.
*
IF sy-subrc EQ 0.
CLEAR: mtext,
parcnt,
mparcnt,
charcnt,
wcnt,
mt,
sp_len,
sy-fdpos.
*
MOVE tbl_bdclm-mparcnt TO mparcnt.
*
IF t100-text CA '$&'.
MOVE t100-text TO mtext1.
ELSE.
MOVE t100-text TO mtext.
EXIT.
ENDIF.
REFRESH mttab.
CLEAR shiftln.
DO mparcnt TIMES.
CLEAR: par, mttab.
MOVE tbl_bdclm-mpar TO par.
IF par-len CN digits OR par-len EQ 0.
par-len = 1.
ENDIF.
WRITE par-text TO mttab-text(par-len).
MOVE par-len TO mttab-len.
MOVE mparcnt TO mttab-off.
APPEND mttab.
shiftln = par-len + 2.
SHIFT tbl_bdclm-mpar BY shiftln PLACES.
ENDDO.
*
mtext2 = mtext1.
IF tbl_bdclm-mid EQ '00' AND
tbl_bdclm-mnr EQ '368' AND
tbl_bdclm-mart EQ 'S'.
CLEAR mtext2.
CLEAR mttab.
READ TABLE mttab INDEX 1.
WRITE mttab-text TO mtext2+0(mttab-len).
CLEAR mttab.
READ TABLE mttab INDEX 2.
WRITE mttab-text TO mtext2+35(mttab-len).
mtext = mtext2.
EXIT.
ENDIF.
do_condense = x.
CLEAR: mt, vartcnt, mtvaroff.
WHILE vartcnt LE 3.
vartcnt = vartcnt + 1.
IF mtext1 CA '$&'.
parcnt = parcnt + 1.
IF sy-fdpos GT 0.
fdpos = sy-fdpos - 1.
ELSE.
fdpos = sy-fdpos.
ENDIF.
SHIFT mtext1 BY sy-fdpos PLACES.
IF mtext1(1) EQ '&'.
SHIFT mtext1 BY 1 PLACES.
CASE mtext1(1).
WHEN ' '.
PERFORM replace_var USING '& ' parcnt fdpos.
WHEN '$'.
PERFORM replace_var USING '&&' 0 fdpos.
WHEN '1'.
PERFORM replace_var USING '&1' 1 fdpos.
WHEN '2'.
PERFORM replace_var USING '&2' 2 fdpos.
WHEN '3'.
PERFORM replace_var USING '&3' 3 fdpos.
WHEN '4'.
PERFORM replace_var USING '&4' 4 fdpos.
WHEN OTHERS.
PERFORM replace_var USING '&<' parcnt fdpos.
ENDCASE.
ENDIF.
IF mtext1(1) EQ '$'.
SHIFT mtext1 BY 1 PLACES.
CASE mtext1(1).
WHEN ' '.
PERFORM replace_var USING '$ ' parcnt fdpos.
WHEN '$'.
PERFORM replace_var USING '$$' 0 fdpos.
WHEN '1'.
PERFORM replace_var USING '$1' 1 fdpos.
WHEN '2'.
PERFORM replace_var USING '$2' 2 fdpos.
WHEN '3'.
PERFORM replace_var USING '$3' 3 fdpos.
WHEN '4'.
PERFORM replace_var USING '$4' 4 fdpos.
WHEN OTHERS.
PERFORM replace_var USING '$<' parcnt fdpos.
ENDCASE.
ENDIF.
ENDIF.
ENDWHILE.
*
IF mtext2 CA '%%_D_%%'.
REPLACE '%%_D_%%' WITH '$' INTO mtext2.
ENDIF.
IF mtext2 CA '%%_A_%%'.
REPLACE '%%_A_%%' WITH '&' INTO mtext2.
ENDIF.
IF do_condense EQ space.
mtext = mtext2.
ELSE.
CONDENSE mtext2 .
mtext = mtext2.
ENDIF.
ELSE.
mtext = '???????????????????????????????????????????????????'.
ENDIF.
ENDFORM. " GET_TEXT
&----
*& Form REPLACE_VAR
&----
text
----
-->P_1209 text
-->P_PARCNT text
-->P_FDPOS text
----
FORM replace_var USING vark vari varpos.
DATA: var(02),
var1,
moff TYPE i.
*
CLEAR: mttab , moff.
var = vark.
SHIFT var BY 1 PLACES.
CASE var.
WHEN ' '.
READ TABLE mttab INDEX vari.
IF sy-subrc EQ 0.
moff = varpos + mtvaroff.
ASSIGN mtext2+moff(*) TO <mtxt>.
ASSIGN mttab-text(mttab-len) TO <vtxt>.
var1 = vark.
REPLACE var1 WITH <vtxt> INTO <mtxt>.
mtvaroff = mttab-len.
ELSE.
IF vari GT mparcnt.
moff = varpos + mtvaroff.
ASSIGN mtext2+moff(*) TO <mtxt>.
REPLACE vark WITH ' ' INTO <mtxt>.
mtvaroff = 2.
ELSE.
moff = varpos + mtvaroff.
ASSIGN mtext2+moff(*) TO <mtxt>.
REPLACE vark WITH '%%_Z_%%' INTO <mtxt>.
mtvaroff = 7.
ENDIF.
ENDIF.
WHEN '$'.
moff = varpos + mtvaroff.
ASSIGN mtext2+moff(*) TO <mtxt>.
REPLACE vark WITH '%%_D_%%' INTO <mtxt>.
mtvaroff = 7.
WHEN '&'.
moff = varpos + mtvaroff.
ASSIGN mtext2+moff(*) TO <mtxt>.
REPLACE vark WITH '%%_A_%%' INTO <mtxt>.
mtvaroff = 7.
WHEN '<'.
READ TABLE mttab INDEX vari.
IF sy-subrc EQ 0.
IF vark EQ '&<'.
moff = varpos + mtvaroff.
ASSIGN mtext2+moff(*) TO <mtxt>.
ASSIGN mttab-text(mttab-len) TO <vtxt>.
REPLACE '&' WITH <vtxt> INTO <mtxt>.
mtvaroff = mttab-len.
ENDIF.
IF vark EQ '$<'.
moff = varpos + mtvaroff.
ASSIGN mtext2+moff(*) TO <mtxt>.
ASSIGN mttab-text(mttab-len) TO <vtxt>.
REPLACE '$' WITH <vtxt> INTO <mtxt>.
mtvaroff = mttab-len.
ENDIF.
ELSE.
IF vark EQ '&<'.
moff = varpos + mtvaroff.
ASSIGN mtext2+moff(*) TO <mtxt>.
REPLACE '&' WITH ' ' INTO <mtxt>.
mtvaroff = 1.
ENDIF.
IF vark EQ '$<'.
moff = varpos + mtvaroff.
ASSIGN mtext2+moff(*) TO <mtxt>.
REPLACE '$' WITH ' ' INTO <mtxt>.
mtvaroff = 1.
ENDIF.
ENDIF.
WHEN '1'.
READ TABLE mttab INDEX 1.
IF sy-subrc EQ 0.
moff = varpos + mtvaroff.
ASSIGN mtext2+moff(*) TO <mtxt>.
ASSIGN mttab-text(mttab-len) TO <vtxt>.
REPLACE vark WITH <vtxt> INTO <mtxt>.
mtvaroff = mttab-len.
ELSE.
IF vari GT mparcnt.
moff = varpos + mtvaroff.
ASSIGN mtext2+moff(*) TO <mtxt>.
REPLACE vark WITH ' ' INTO <mtxt>.
mtvaroff = 2.
ELSE.
moff = varpos + mtvaroff.
ASSIGN mtext2+moff(*) TO <mtxt>.
REPLACE vark WITH '%%_Z_%%' INTO <mtxt>.
mtvaroff = 7.
ENDIF.
ENDIF.
WHEN '2'.
READ TABLE mttab INDEX 2.
IF sy-subrc EQ 0.
moff = varpos + mtvaroff.
ASSIGN mtext2+moff(*) TO <mtxt>.
ASSIGN mttab-text(mttab-len) TO <vtxt>.
REPLACE vark WITH <vtxt> INTO <mtxt>.
mtvaroff = mttab-len.
ELSE.
IF vari GT mparcnt.
moff = varpos + mtvaroff.
ASSIGN mtext2+moff(*) TO <mtxt>.
REPLACE vark WITH ' ' INTO <mtxt>.
mtvaroff = 2.
ELSE.
moff = varpos + mtvaroff.
ASSIGN mtext2+moff(*) TO <mtxt>.
REPLACE vark WITH '%%_Z_%%' INTO <mtxt>.
mtvaroff = 7. ""
ENDIF.
ENDIF.
WHEN '3'.
READ TABLE mttab INDEX 3.
IF sy-subrc EQ 0.
moff = varpos + mtvaroff.
ASSIGN mtext2+moff(*) TO <mtxt>.
ASSIGN mttab-text(mttab-len) TO <vtxt>.
REPLACE vark WITH <vtxt> INTO <mtxt>.
mtvaroff = mttab-len.
ELSE.
IF vari GT mparcnt.
moff = varpos + mtvaroff.
ASSIGN mtext2+moff(*) TO <mtxt>.
REPLACE vark WITH ' ' INTO <mtxt>.
mtvaroff = 2.
ELSE.
moff = varpos + mtvaroff.
ASSIGN mtext2+moff(*) TO <mtxt>.
REPLACE vark WITH '%%_Z_%%' INTO <mtxt>.
mtvaroff = 7.
ENDIF.
ENDIF.
WHEN '4'.
READ TABLE mttab INDEX 4.
IF sy-subrc EQ 0.
moff = varpos + mtvaroff.
ASSIGN mtext2+moff(*) TO <mtxt>.
ASSIGN mttab-text(mttab-len) TO <vtxt>.
REPLACE vark WITH <vtxt> INTO <mtxt>.
mtvaroff = mttab-len.
ELSE.
IF vari GT mparcnt.
moff = varpos + mtvaroff.
ASSIGN mtext2+moff(*) TO <mtxt>.
REPLACE vark WITH ' ' INTO <mtxt>.
mtvaroff = 2.
ELSE.
moff = varpos + mtvaroff.
ASSIGN mtext2+moff(*) TO <mtxt>.
REPLACE vark WITH '%%_Z_%%' INTO <mtxt>.
mtvaroff = 7.
ENDIF.
ENDIF.
*
ENDCASE.
*
do_condense = space.
ENDFORM. " REPLACE_VAR
&----
*& Form build_catalog
&----
text
----
--> p1 text
<-- p2 text
----
FORM build_catalog.
DATA : tablenam LIKE dd03l-tabname,
fieldnam LIKE dd03l-fieldname,
pos TYPE i.
SPLIT p_string AT '-' INTO tablenam fieldnam.
SELECT SINGLE * FROM dd03l INTO dd03l WHERE tabname = tablenam AND
fieldname = fieldnam.
SELECT SINGLE * FROM dd04t WHERE rollname = dd03l-rollname AND
ddlanguage = 'E'.
ADD 1 TO pos.
x_catalog-fieldname = 'GROUPID'.
x_catalog-col_pos = 1.
x_catalog-outputlen = '15'.
x_catalog-seltext_l = 'Session Name'(047).
APPEND x_catalog TO i_catalog.
CLEAR x_catalog.
ADD 1 TO pos.
x_catalog-fieldname = 'QID'.
x_catalog-col_pos = 1.
x_catalog-outputlen = '20'.
x_catalog-seltext_l = 'Queue ID'(047).
x_catalog-no_out = 'X'.
APPEND x_catalog TO i_catalog.
CLEAR x_catalog.
ADD 1 TO pos.
x_catalog-fieldname = 'INDEX'.
x_catalog-col_pos = 2.
x_catalog-outputlen = '8'.
x_catalog-seltext_l = 'Index'(047).
APPEND x_catalog TO i_catalog.
CLEAR x_catalog.
ADD 1 TO pos.
x_catalog-fieldname = 'INFO'.
x_catalog-col_pos = 3.
x_catalog-outputlen = '10'.
x_catalog-seltext_l = dd04t-scrtext_s.
APPEND x_catalog TO i_catalog.
CLEAR x_catalog.
ADD 1 TO pos.
x_catalog-fieldname = 'MODULE'.
x_catalog-col_pos = 4.
x_catalog-outputlen = '8'.
x_catalog-seltext_l = 'Program'(007).
APPEND x_catalog TO i_catalog.
CLEAR x_catalog.
ADD 1 TO pos.
x_catalog-fieldname = 'SCREEN'.
x_catalog-col_pos = 5.
x_catalog-outputlen = '4'.
x_catalog-seltext_l = 'Screen'(075).
X_CATALOG-NO_OUT = 'X'.
APPEND x_catalog TO i_catalog.
CLEAR x_catalog.
ADD 1 TO pos.
x_catalog-fieldname = 'ERROR_MESSAGE'.
x_catalog-col_pos = 6.
x_catalog-outputlen = '254'.
x_catalog-seltext_l = 'Error Message'(076).
APPEND x_catalog TO i_catalog.
CLEAR x_catalog.
ENDFORM. " build_catalog
&----
*& Form sort
&----
text
----
--> p1 text
<-- p2 text
----
FORM sort.
DATA : srtpos TYPE i.
ADD 1 TO srtpos.
x_sort-spos = 1.
x_sort-fieldname = 'GROUPID'.
x_sort-up = c_x.
x_sort-subtot = c_x.
APPEND x_sort TO i_sort.
CLEAR x_sort.
*add 1 to srtpos.
x_sort-spos = 1.
x_sort-fieldname = 'QID'.
x_sort-up = c_x.
x_sort-subtot = c_x.
append x_sort to i_sort.
clear x_sort.
ADD 1 TO srtpos.
x_sort-spos = 2.
x_sort-fieldname = 'INDEX'.
x_sort-up = c_x.
x_sort-subtot = c_x.
APPEND x_sort TO i_sort.
CLEAR x_sort.
ADD 1 TO srtpos.
x_sort-spos = 3.
x_sort-fieldname = 'INFO'.
x_sort-up = c_x.
x_sort-subtot = c_x.
APPEND x_sort TO i_sort.
CLEAR x_sort.
ADD 1 TO srtpos.
x_sort-spos = 4.
x_sort-fieldname = 'ERROR_MESSAGE'.
x_sort-up = c_x.
x_sort-subtot = c_x.
APPEND x_sort TO i_sort.
CLEAR x_sort.
ENDFORM. " sort
&----
*& Form display_alv
&----
text
----
--> p1 text
<-- p2 text
----
FORM display_alv.
PERFORM eventtab_build USING gt_events[].
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ' '
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE = ' '
i_callback_program = 'ZSUBTEST_BDC'
I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = ' '
I_CALLBACK_TOP_OF_PAGE = ' '
I_CALLBACK_HTML_TOP_OF_PAGE = ' '
I_CALLBACK_HTML_END_OF_LIST = ' '
I_STRUCTURE_NAME =
I_BACKGROUND_ID = ' '
I_GRID_TITLE = v_grid_title
I_GRID_SETTINGS =
IS_LAYOUT =
it_fieldcat = i_catalog
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
it_sort = i_sort
IT_FILTER =
IS_SEL_HIDE =
I_DEFAULT = 'X'
i_save = 'A'
IS_VARIANT = X_DISVARIANT
it_events = gt_events[]
IT_EVENT_EXIT =
IS_PRINT =
IS_REPREP_ID =
I_SCREEN_START_COLUMN = 0
I_SCREEN_START_LINE = 0
I_SCREEN_END_COLUMN = 0
I_SCREEN_END_LINE = 0
IT_ALV_GRAPHICS =
IT_ADD_FIELDCAT =
IT_HYPERLINK =
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = tbl_out
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " display_alv
----
FORM EVENTTAB_BUILD *
----
........ *
----
--> LT_EVENTS *
----
FORM eventtab_build USING
lt_events TYPE slis_t_event.
DATA: ls_event TYPE slis_alv_event.
*
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = lt_events.
READ TABLE lt_events WITH KEY name = slis_ev_top_of_page
INTO ls_event.
IF sy-subrc = 0.
MOVE gc_formname_top_of_page TO ls_event-form.
APPEND ls_event TO lt_events.
ENDIF.
.
ENDFORM. "eventtab_build
-------------------------------------------------------------------
---------------------------------------------------
FORM top_of_page.
*
PERFORM comment_build USING gt_list_top_of_page[].
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
i_logo = 'TEST_IMAGINEPA_LOGO'
it_list_commentary = gt_list_top_of_page.
ENDFORM. "top_of_page
----
FORM COMMENT_BUILD *
----
........ *
----
--> LT_TOP_OF_PAGE *
----
FORM comment_build USING lt_top_of_page TYPE slis_t_listheader.
DATA: ls_line TYPE slis_listheader,
data(15) TYPE c,
wa_lt LIKE ls_line,
date(10),
time(10).
WRITE : p_date TO date MM/DD/YY.
REFRESH lt_top_of_page.
CLEAR ls_line.
ls_line-typ = 'H'.
ls_line-info = 'BDC LOG REPORT'.
APPEND ls_line TO lt_top_of_page.
CLEAR ls_line.
CLEAR ls_line.
ls_line-typ = 'S'.
ls_line-key = 'Session :'.
ls_line-info = p_sess.
APPEND ls_line TO lt_top_of_page.
CLEAR ls_line.
concatenate date ' at ' s_time-low ' - ' s_time-high into
ls_line-info.
ls_line-typ = 'S'.
ls_line-key = 'Created On:'.
ls_line-info = date.
APPEND ls_line TO lt_top_of_page.
ENDFORM. "comment_build
&----
*& Form move_final_data_to_tblout
&----
text
----
--> p1 text
<-- p2 text
----
FORM move_final_data_to_tblout.
LOOP AT all_bdc_tcodes.
LOOP AT tbl_bdclm WHERE qid = all_bdc_tcodes-qid AND
tcnt = all_bdc_tcodes-index.
IF NOT p_mess IS INITIAL.
IF tbl_bdclm-longtext CS p_mess.
PERFORM build_tbl_out.
ENDIF.
ELSE.
PERFORM build_tbl_out.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDFORM. " move_final_data_to_tblout
&----
*& Form select_session_data
&----
text
----
--> p1 text
<-- p2 text
----
FORM select_session_data.
DO.
IF p_sess CA '*'.
TRANSLATE p_sess USING '*%'.
ELSE.
EXIT.
ENDIF.
ENDDO.
SELECT * FROM apqi INTO TABLE tbl_apqi
WHERE mandant = sy-mandt AND
groupid LIKE p_sess AND
creator = p_user AND
credate = p_date AND
cretime IN s_time.
LOOP AT tbl_apqi.
SELECT * FROM apqd WHERE qid = tbl_apqi-qid AND
block = 1 ORDER BY PRIMARY KEY.
MOVE apqd-vardata TO bdcth.
CHECK bdcth-state = 'E'.
all_bdc_tcodes-index = apqd-trans.
all_bdc_tcodes-tcode = bdcth-tcode.
all_bdc_tcodes-status = bdcth-state.
all_bdc_tcodes-groupid = tbl_apqi-groupid.
all_bdc_tcodes-qid = tbl_apqi-qid.
APPEND all_bdc_tcodes.
ENDSELECT.
ENDLOOP.
LOOP AT all_bdc_tcodes.
REFRESH: tf, tbl_apqd.
CLEAR: tbl_apqd, tf.
SELECT * FROM apqd INTO TABLE tbl_apqd WHERE
qid = all_bdc_tcodes-qid
AND trans = all_bdc_tcodes-index.
LOOP AT tbl_apqd.
IF tbl_apqd-vardata(1) = 'M'.
PERFORM get_session_data.
ENDIF.
ENDLOOP.
LOOP AT tf.
IF tf-fname = p_string.
MOVE tf-farg TO all_bdc_tcodes-pernr.
MODIFY all_bdc_tcodes.
EXIT.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDFORM. " select_session_data
&----
*& Form build_tbl_out
&----
text
----
--> p1 text
<-- p2 text
----
FORM build_tbl_out.
MOVE : all_bdc_tcodes-index TO tbl_out-index,
all_bdc_tcodes-pernr TO tbl_out-info,
tbl_bdclm-module TO tbl_out-module,
tbl_bdclm-dynr TO tbl_out-screen,
tbl_bdclm-longtext TO tbl_out-error_message,
all_bdc_tcodes-groupid TO tbl_out-groupid,
all_bdc_tcodes-qid TO tbl_out-qid.
APPEND tbl_out.
ENDFORM. " build_tbl_out
<b>its very useful for u....</b>
**Please reward suitable points***
With Regards
Navin Khedikar
‎2007 Apr 18 5:38 AM
Hi Pavan,
1.GO to sm35
2.In Incorrect Tab,Select your transaction.
3.You can see one button " Log " on the application tool bar.click on that.....
4.Click on the Display button which is on the application tool bar.
5.Then here you can see the <b>ERROR LOG</b> for that transaction ....
<b>
Hope your problem is solved...
Reward all helpful answers.</b>
Regards,
V.Raghavender.
‎2007 Apr 18 5:46 AM
Hi,
I want error log file name not how to see error log in sm35. thanks for your information.
‎2007 Apr 18 6:00 AM
Hi Pavan,
Check out this sample program to understand the same
REPORT ztest_report
NO STANDARD PAGE HEADING
LINE-SIZE 255
MESSAGE-ID ZRASH.
************************************************************************
* Internal Table Declarations *
************************************************************************
*--Internal Table for Data Uploading.
DATA : BEGIN OF IT_FFCUST OCCURS 0,
KUNNR(10),
BUKRS(4),
KTOKD(4),
ANRED(15),
NAME1(35),
SORTL(10),
STRAS(35),
ORT01(35),
PSTLZ(10),
LAND1(3),
SPRAS(2),
AKONT(10),
END OF IT_FFCUST.
*--Internal Table to Store Error Records.
DATA : BEGIN OF IT_ERRCUST OCCURS 0,
KUNNR(10),
EMSG(255),
END OF IT_ERRCUST.
*--Internal Table to Store Successful Records.
DATA : BEGIN OF IT_SUCCUST OCCURS 0,
KUNNR(10),
SMSG(255),
END OF IT_SUCCUST.
*--Internal Table for Storing the BDC data.
DATA : IT_CUSTBDC LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
*--Internal Table for storing the messages.
DATA : IT_CUSTMSG LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
DATA : V_FLAG1(1) VALUE ' ',
"Flag used for opening session.
V_TLINES LIKE SY-TABIX,
"For storing total records processed.
V_ELINES LIKE SY-TABIX,
"For storing the no of error records.
V_SLINES LIKE SY-TABIX.
"For storing the no of success records.
************************************************************************
* Selection screen *
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK B1.
PARAMETERS : V_FNAME LIKE RLGRAP-FILENAME,
V_SESNAM LIKE RLGRAP-FILENAME.
SELECTION-SCREEN END OF BLOCK B1.
************************************************************************
* Start-of-selection *
************************************************************************
START-OF-SELECTION.
*-- Form to upload flatfile data into the internal table.
PERFORM FORM_UPLOADFF.
************************************************************************
* TOP-OF-PAGE *
************************************************************************
TOP-OF-PAGE.
WRITE:/ 'Details of the error and success records for the transaction'
.
ULINE.
SKIP.
************************************************************************
* End of Selection *
************************************************************************
END-OF-SELECTION.
*-- Form to Generate a BDC from the Uploaded Internal table
PERFORM FORM_BDCGENERATE.
*--To write the totals and the session name.
PERFORM FORM_WRITEOP.
*&---------------------------------------------------------------------*
*& Form form_uploadff
*&---------------------------------------------------------------------*
* Form to upload flatfile data into the internal table.
*----------------------------------------------------------------------*
FORM FORM_UPLOADFF .
*--Variable to change the type of the parameter file name.
DATA : LV_FILE TYPE STRING.
LV_FILE = V_FNAME.
*--Function to upload the flat file to the internal table.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = LV_FILE
* FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = 'X'
* HEADER_LENGTH = 0
* READ_BY_LINE = 'X'
* DAT_MODE = ' '
* IMPORTING
* FILELENGTH =
* HEADER =
TABLES
DATA_TAB = IT_FFCUST
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_READ_ERROR = 2
NO_BATCH = 3
GUI_REFUSE_FILETRANSFER = 4
INVALID_TYPE = 5
NO_AUTHORITY = 6
UNKNOWN_ERROR = 7
BAD_DATA_FORMAT = 8
HEADER_NOT_ALLOWED = 9
SEPARATOR_NOT_ALLOWED = 10
HEADER_TOO_LONG = 11
UNKNOWN_DP_ERROR = 12
ACCESS_DENIED = 13
DP_OUT_OF_MEMORY = 14
DISK_FULL = 15
DP_TIMEOUT = 16
OTHERS = 17
.
IF SY-SUBRC = 0.
*--Deleting the headings from the internal table.
DELETE IT_FFCUST INDEX 1.
*--Getting the total number of records uploaded.
DESCRIBE TABLE IT_FFCUST LINES V_TLINES.
ENDIF.
ENDFORM. " form_uploadff
*&---------------------------------------------------------------------*
*& Form Form_bdcgenerate
*&---------------------------------------------------------------------*
* Form to Generate a BDC from the Uploaded Internal table
*----------------------------------------------------------------------*
FORM FORM_BDCGENERATE .
*--Generating the BDC table for the fields of the internal table.
LOOP AT IT_FFCUST.
PERFORM POPULATEBDC USING :
'X' 'SAPMF02D' '0105',
' ' 'BDC_OKCODE' '/00' ,
' ' 'RF02D-KUNNR' IT_FFCUST-KUNNR,
' ' 'RF02D-BUKRS' IT_FFCUST-BUKRS,
' ' 'RF02D-KTOKD' IT_FFCUST-KTOKD,
'X' 'SAPMF02D' '0110' ,
' ' 'BDC_OKCODE' '/00',
' ' 'KNA1-ANRED' IT_FFCUST-ANRED,
' ' 'KNA1-NAME1' IT_FFCUST-NAME1,
' ' 'KNA1-SORTL' IT_FFCUST-SORTL,
' ' 'KNA1-STRAS' IT_FFCUST-STRAS,
' ' 'KNA1-ORT01' IT_FFCUST-ORT01,
' ' 'KNA1-PSTLZ' IT_FFCUST-PSTLZ,
' ' 'KNA1-LAND1' IT_FFCUST-LAND1,
' ' 'KNA1-SPRAS' IT_FFCUST-SPRAS,
'X' 'SAPMFO2D' '0120',
' ' 'BDC_OKCODE' '/00',
'X' 'SAPMF02D' '0125',
' ' 'BDC_OKCODE' '/00',
'X' 'SAPMF02D' '0130',
' ' 'BDC_OKCODE' '=ENTR',
'X' 'SAPMF02D' '0340',
' ' 'BDC_OKCODE' '=ENTR',
'X' 'SAPMF02D' '0360',
' ' 'BDC_OKCODE' '=ENTR',
'X' 'SAPMF02D' '0210',
' ' 'KNB1-AKONT' IT_FFCUST-AKONT,
' ' 'BDC_OKCODE' '/00',
'X' 'SAPMF02D' '0215',
' ' 'BDC_OKCODE' '/00',
'X' 'SAPMF02D' '0220',
' ' 'BDC_OKCODE' '/00',
'X' 'SAPMF02D' '0230',
' ' 'BDC_OKCODE' '=UPDA'.
*--Calling the transaction 'fd01'.
CALL TRANSACTION 'FD01' USING IT_CUSTBDC MODE 'N' UPDATE 'S'
MESSAGES INTO IT_CUSTMSG.
IF SY-SUBRC <> 0.
*--Populating the error records internal table.
IT_ERRCUST-KUNNR = IT_FFCUST-KUNNR.
APPEND IT_ERRCUST.
CLEAR IT_ERRCUST.
*--Opening a session if there is an error record.
IF V_FLAG1 = ' '.
PERFORM FORM_OPENSESSION.
V_FLAG1 = 'X'.
ENDIF.
*--Inserting the error records into already open session.
IF V_FLAG1 = 'X'.
PERFORM FORM_INSERT.
ENDIF.
*--Populating the Success records internal table.
ELSE.
IT_SUCCUST-KUNNR = IT_FFCUST-KUNNR.
APPEND IT_SUCCUST.
CLEAR IT_SUCCUST.
ENDIF.
*--Displaying the messages.
IF NOT IT_CUSTMSG[] IS INITIAL.
PERFORM FORM_FORMATMSG.
ENDIF.
*--Clearing the message and bdc tables.
CLEAR : IT_CUSTBDC[],IT_CUSTMSG[].
ENDLOOP.
*--Getting the total no of error records.
DESCRIBE TABLE IT_ERRCUST LINES V_ELINES.
*--Getting the total no of successful records.
DESCRIBE TABLE IT_SUCCUST LINES V_SLINES.
*--Closing the session only if it is open.
IF V_FLAG1 = 'X'.
PERFORM FORM_CLOSESESS.
ENDIF.
ENDFORM. " Form_bdcgenerate
*&---------------------------------------------------------------------*
*& Form populatebdc
*&---------------------------------------------------------------------*
* FOrm to Populate the BDC table.
*----------------------------------------------------------------------*
FORM POPULATEBDC USING VALUE(P_0178)
VALUE(P_0179)
VALUE(P_0180).
IF P_0178 = 'X'.
IT_CUSTBDC-PROGRAM = P_0179.
IT_CUSTBDC-DYNPRO = P_0180.
IT_CUSTBDC-DYNBEGIN = 'X'.
ELSE.
IT_CUSTBDC-FNAM = P_0179.
IT_CUSTBDC-FVAL = P_0180.
ENDIF.
APPEND IT_CUSTBDC.
CLEAR IT_CUSTBDC.
ENDFORM. " populatebdc
*&---------------------------------------------------------------------*
*& Form FORM_OPENSESSION
*&---------------------------------------------------------------------*
* Form to Open a session.
*----------------------------------------------------------------------*
FORM FORM_OPENSESSION .
*--Variable to convert the given session name into reqd type.
DATA : LV_SESNAM(12).
LV_SESNAM = V_SESNAM.
*--Opening a session.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT = SY-MANDT
GROUP = LV_SESNAM
HOLDDATE = '20040805'
KEEP = 'X'
USER = SY-UNAME
PROG = SY-CPROG
* IMPORTING
* QID =
EXCEPTIONS
CLIENT_INVALID = 1
DESTINATION_INVALID = 2
GROUP_INVALID = 3
GROUP_IS_LOCKED = 4
HOLDDATE_INVALID = 5
INTERNAL_ERROR = 6
QUEUE_ERROR = 7
RUNNING = 8
SYSTEM_LOCK_ERROR = 9
USER_INVALID = 10
OTHERS = 11
.
IF SY-SUBRC <> 0.
WRITE :/ 'Session not open'.
ENDIF.
ENDFORM. " FORM_OPENSESSION
*&---------------------------------------------------------------------*
*& Form FORM_INSERT
*&---------------------------------------------------------------------*
* fORM TO INSERT ERROR RECOED INTO A SESSION.
*----------------------------------------------------------------------*
FORM FORM_INSERT .
*--Inserting the record into session.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE = 'FD01'
* POST_LOCAL = NOVBLOCAL
* PRINTING = NOPRINT
* SIMUBATCH = ' '
* CTUPARAMS = ' '
TABLES
DYNPROTAB = IT_CUSTBDC
EXCEPTIONS
INTERNAL_ERROR = 1
NOT_OPEN = 2
QUEUE_ERROR = 3
TCODE_INVALID = 4
PRINTING_INVALID = 5
POSTING_INVALID = 6
OTHERS = 7
.
IF SY-SUBRC <> 0.
WRITE :/ 'Unable to insert the record'.
ENDIF.
ENDFORM. " FORM_INSERT
*&---------------------------------------------------------------------*
*& Form FORM_CLOSESESS
*&---------------------------------------------------------------------*
* Form to Close the Open Session.
*----------------------------------------------------------------------*
FORM FORM_CLOSESESS .
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
NOT_OPEN = 1
QUEUE_ERROR = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
ENDIF.
ENDFORM. " FORM_CLOSESESS
*&---------------------------------------------------------------------*
*& Form FORM_FORMATMSG
*&---------------------------------------------------------------------*
* Form to format messages.
*----------------------------------------------------------------------*
FORM FORM_FORMATMSG .
*--Var to store the formatted msg.
DATA : LV_MSG(255).
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
ID = SY-MSGID
LANG = SY-LANGU
NO = SY-MSGNO
V1 = SY-MSGV1
V2 = SY-MSGV2
V3 = SY-MSGV3
V4 = SY-MSGV4
IMPORTING
MSG = LV_MSG
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC = 0.
WRITE :/ LV_MSG.
ENDIF.
ULINE.
ENDFORM. " FORM_FORMATMSG
*&---------------------------------------------------------------------*
*& Form form_writeop
*&---------------------------------------------------------------------*
* To write the totals and the session name.
*----------------------------------------------------------------------*
FORM FORM_WRITEOP .
WRITE :/ 'Total Records Uploaded :',V_TLINES,
/ 'No of Error Records :',V_ELINES,
/ 'No of Success Records :',V_SLINES,
/ 'Name of the Session :',V_SESNAM.
ULINE.
ENDFORM. " form_writeop