PDA

Ver la Versión Completa : Log Bi


carlosalcala
20/07/06, 07:40:24
Hola foro!!!

Como podría recuperar un log completo del JD a partir de la ID de Cola?? y sino es posible, como podria 'cazar' estos resultados??

Muchas Gracias!

sap2006
20/07/06, 10:36:37
Lo que buscas esta en la sm35.
Salu2.

apozosanz
24/07/06, 07:44:57
Gracias pero lo que estoy buscando es recuperar el log que aparece en la SM35 para tratar los documentos contables dados de alta y poder bloquear los pedidos de venta, lo conseguí con este report
************************************************************************
* Listado que muestra la información de un log resultado de la *
* ejecución de un batch input. *
* Útil para analizar resultados tras la ejecución *
* *
* Andrés Picazo 18/11/2002 http://www.sapabap.cc *
* *
************************************************************************
REPORT z_logs_batch_input LINE-SIZE 255 line-count 58.

TABLES: apqd, apql, tst01, bapiret2.

DATA: BEGIN OF logtable OCCURS 50, " plain log information in TemSe
enterdate LIKE btctle-enterdate,
entertime LIKE btctle-entertime,
logmessage(400) TYPE c,
END OF logtable.
DATA: l_logtable LIKE logtable.
DATA: i_apql LIKE apql OCCURS 100 WITH HEADER LINE.

DATA BEGIN OF BDCLM OCCURS 0. " ITabelle der Messageseintraege
INCLUDE STRUCTURE BDCLM. " LogTabelle
DATA: COUNTER TYPE I,
LONGTEXT TYPE BDC_MPAR,
END OF BDCLM .

DATA: "Aufbereitung Messagetext
BEGIN OF MTTAB OCCURS 4,
OFF(02) TYPE N,
LEN(02) TYPE N,
TEXT(80),
END OF MTTAB.

DATA:
DIGITS(10) TYPE C VALUE '0123456789',
MTEXT(124) TYPE C, "Messagetext
MTEXT1(124) TYPE C, "Messagetext
MTEXT2(273) TYPE C, "Messagetext
DO_CONDENSE TYPE C,
MTVAROFF TYPE I,
PARCNT TYPE I,
MPARCNT TYPE I,
X(1) TYPE C VALUE 'X'.

FIELD-SYMBOLS:
<MTXT>,
<VTXT>.

SELECTION-SCREEN BEGIN OF BLOCK a1 WITH FRAME.
SELECT-OPTIONS: s_credat FOR apql-credate, "Fecha creación batch input
s_groupi FOR apql-groupid OBLIGATORY, "N. juego datos
s_creato FOR apql-creator. "Usuario que lo creo
SELECTION-SCREEN END OF BLOCK a1.


SELECTION-SCREEN BEGIN OF BLOCK a2 WITH FRAME.
SELECT-OPTIONS: s_date FOR sy-datum, "Fecha log
s_time FOR sy-uzeit. "Hora log
SELECTION-SCREEN END OF BLOCK a2.

SELECTION-SCREEN BEGIN OF BLOCK a3 WITH FRAME.
SELECT-OPTIONS: s_MSGTY FOR sy-MSGTY, "Tipo de Mensaje
s_MSGID FOR sy-MSGID, "ID del mensaje
s_MSGNO FOR sy-MSGNO. "Número de Mensaje
SELECTION-SCREEN END OF BLOCK a3.

data: miMSGNO like sy-MSGNO.

START-OF-SELECTION.

SELECT * FROM apql
INTO TABLE i_apql
WHERE credate IN s_credat
AND groupid IN s_groupi
AND creator IN s_creato
AND mandant = sy-mandt.

LOOP AT i_apql.

WRITE: / 'Inicio log',
i_apql-groupid.
SKIP.

FREE logtable.
PERFORM read_bdc_log_plain(rsbdc_protocol)
TABLES
logtable
USING
i_apql-temseid i_apql-mandant.

LOOP AT logtable WHERE enterdate IN s_date
AND entertime IN s_time.
l_logtable = logtable.
AT FIRST.
WRITE: / 'Fecha: ', l_logtable-enterdate,
l_logtable-entertime.
SKIP.
ENDAT.
IF logtable-logmessage+9(20) NE ''.
if not S_MSGTY[] is initial.
check logtable-logmessage+73(1) in s_MSGTY.
endif.
if not S_MSGID[] is initial.
check logtable-logmessage+74(16) in s_MSGID.
endif.
if not S_MSGNO[] is initial.
miMSGNO = logtable-logmessage+94(3).
check miMSGNO in s_MSGNO.
endif.
WRITE: / logtable-entertime,
logtable-logmessage+3(6), "Indice
(4) logtable-logmessage+9(20), "Transacción
(12) logtable-logmessage+29(40), "Programa
logtable-logmessage+69(4), "Nº dynpro
logtable-logmessage+73(1), "Tipo mensaje
(3) logtable-logmessage+74(16), "Clase mensaje
logtable-logmessage+94(3), "Nº mensaje
logtable-logmessage+100(20). "Var1

* bapiret2-id = logtable-logmessage+74(16).
* bapiret2-number = logtable-logmessage+94(3).
* bapiret2-message_v1 = logtable-logmessage+100(20).
* CALL FUNCTION 'BAPI_MESSAGE_GETDETAIL'
* EXPORTING
* id = bapiret2-id
* number = bapiret2-number
* textformat = 'ASC'
* message_v1 = bapiret2-message_v1
* IMPORTING
* message = bapiret2-message.
*
* WRITE: (60) bapiret2-message.
clear: bdclm.
BDCLM+14 = LOGTABLE-LOGMESSAGE.
* perform get_Text(rsbdc_protocol).
perform get_Text.
write: (60) MTEXT.

ENDIF.

AT LAST.
SKIP.
ULINE.
SKIP.
ENDAT.
ENDLOOP.
ENDLOOP.



*---------------------------------------------------------------------*
* FORM : get_text *
*---------------------------------------------------------------------*
FORM GET_TEXT.
tables: t100.

*
DATA: "ParameterAufbereitung
BEGIN OF PAR,
LEN(02) TYPE N,
TEXT(254),
END OF PAR.
*
*** Aufbereiten des Messagetextes
*
DATA: SHIFTLN TYPE I,
VARTCNT TYPE I,
FDPOS LIKE SY-FDPOS.

IF BDCLM-MPARCNT CN DIGITS. "Korrupter Datensatz:
BDCLM-MPARCNT = 0. "z.B. Hexnullen
ENDIF.

SELECT SINGLE * FROM T100
WHERE SPRSL = SY-LANGU
AND ARBGB = BDCLM-MID
AND MSGNR = BDCLM-MNR.
*
IF SY-SUBRC EQ 0.
CLEAR: MTEXT,
PARCNT,
MPARCNT,
SY-FDPOS.
*
MOVE BDCLM-MPARCNT TO MPARCNT.
*
IF T100-TEXT CA '$&'. "Kennung fuer parameter:
MOVE T100-TEXT TO MTEXT1. " alt '$' --- neu '&'
ELSE.
MOVE T100-TEXT TO MTEXT.
EXIT.
ENDIF.
* variable teile aus batch-input protokoll in mttab bringen.
REFRESH MTTAB.
CLEAR SHIFTLN.
DO MPARCNT TIMES.
CLEAR: PAR, MTTAB.
MOVE BDCLM-MPAR TO PAR.
IF PAR-LEN CN DIGITS OR PAR-LEN EQ 0. "convert_no_number
PAR-LEN = 1. "entschärfen
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 BDCLM-MPAR BY SHIFTLN PLACES.
ENDDO.
*
MTEXT2 = MTEXT1.
IF BDCLM-MID EQ '00' AND " sonderbehandlung s00368
BDCLM-MNR EQ '368' AND
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: VARTCNT, MTVAROFF.
WHILE VARTCNT LE 3.
VARTCNT = VARTCNT + 1.
IF MTEXT1 CA '$&'.
PARCNT = PARCNT + 1.
IF SY-FDPOS GT 0.
FDPOS = SY-FDPOS - 1. " neu 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'. "'&1'
PERFORM REPLACE_VAR
USING '&1' 1 FDPOS.
WHEN '2'. "'&2'
PERFORM REPLACE_VAR
USING '&2' 2 FDPOS.
WHEN '3'. "'&3'
PERFORM REPLACE_VAR
USING '&3' 3 FDPOS.
WHEN '4'. "'&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'. "'$1'
PERFORM REPLACE_VAR
USING '$1' 1 FDPOS.
WHEN '2'. "'$2'
PERFORM REPLACE_VAR
USING '$2' 2 FDPOS.
WHEN '3'. "'$3'
PERFORM REPLACE_VAR
USING '$3' 3 FDPOS.
WHEN '4'. "'$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 *
* *
*---------------------------------------------------------------------*
FORM REPLACE_VAR USING VARK
VARI TYPE I
VARPOS.
*
* ersetzen der variablen teile einer fehlermeldung
*
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. "neu
ASSIGN MTEXT2+MOFF(*) TO <MTXT>. "neu
ASSIGN MTTAB-TEXT(MTTAB-LEN) TO <VTXT>.
VAR1 = VARK.
REPLACE VAR1 WITH <VTXT> INTO <MTXT>. "neu
MTVAROFF = MTTAB-LEN. "neu
ELSE.
IF VARI GT MPARCNT.
MOFF = VARPOS + MTVAROFF. "neu
ASSIGN MTEXT2+MOFF(*) TO <MTXT>. "neu
REPLACE VARK WITH ' ' INTO <MTXT>. "neu
MTVAROFF = 2. "neu
ELSE.
MOFF = VARPOS + MTVAROFF. "neu
ASSIGN MTEXT2+MOFF(*) TO <MTXT>. "neu
REPLACE VARK WITH '%%_Z_%%' INTO <MTXT>. "neu
MTVAROFF = 7. "neu
ENDIF.
ENDIF.
WHEN '$'. "'&&'
MOFF = VARPOS + MTVAROFF. "neu
ASSIGN MTEXT2+MOFF(*) TO <MTXT>. "neu
REPLACE VARK WITH '%%_D_%%' INTO <MTXT>. "neu
MTVAROFF = 7. "neu
WHEN '&'. "'&&'
MOFF = VARPOS + MTVAROFF. "neu
ASSIGN MTEXT2+MOFF(*) TO <MTXT>. "neu
REPLACE VARK WITH '%%_A_%%' INTO <MTXT>. "neu
MTVAROFF = 7. "neu
WHEN '<'. "'&1'
READ TABLE MTTAB INDEX VARI.
IF SY-SUBRC EQ 0.
IF VARK EQ '&<'.
MOFF = VARPOS + MTVAROFF. "neu
ASSIGN MTEXT2+MOFF(*) TO <MTXT>. "neu
ASSIGN MTTAB-TEXT(MTTAB-LEN) TO <VTXT>.
REPLACE '&' WITH <VTXT> INTO <MTXT>. "neu
MTVAROFF = MTTAB-LEN. "neu
ENDIF.
IF VARK EQ '$<'.
MOFF = VARPOS + MTVAROFF. "neu
ASSIGN MTEXT2+MOFF(*) TO <MTXT>. "neu
ASSIGN MTTAB-TEXT(MTTAB-LEN) TO <VTXT>.
REPLACE '$' WITH <VTXT> INTO <MTXT>. "neu
MTVAROFF = MTTAB-LEN. "neu
ENDIF.
ELSE.
IF VARK EQ '&<'.
MOFF = VARPOS + MTVAROFF. "neu
ASSIGN MTEXT2+MOFF(*) TO <MTXT>. "neu
REPLACE '&' WITH ' ' INTO <MTXT>. "neu
MTVAROFF = 1. "neu
ENDIF.
IF VARK EQ '$<'.
MOFF = VARPOS + MTVAROFF. "neu
ASSIGN MTEXT2+MOFF(*) TO <MTXT>. "neu
REPLACE '$' WITH ' ' INTO <MTXT>. "neu
MTVAROFF = 1. "neu
ENDIF.
ENDIF.
WHEN '1'. "'&1'
READ TABLE MTTAB INDEX 1.
IF SY-SUBRC EQ 0.
MOFF = VARPOS + MTVAROFF. "neu
ASSIGN MTEXT2+MOFF(*) TO <MTXT>. "neu
ASSIGN MTTAB-TEXT(MTTAB-LEN) TO <VTXT>.
REPLACE VARK WITH <VTXT> INTO <MTXT>. "neu
MTVAROFF = MTTAB-LEN. "neu
ELSE.
IF VARI GT MPARCNT.
MOFF = VARPOS + MTVAROFF. "neu
ASSIGN MTEXT2+MOFF(*) TO <MTXT>. "neu
REPLACE VARK WITH ' ' INTO <MTXT>. "neu
MTVAROFF = 2. "neu
ELSE.
MOFF = VARPOS + MTVAROFF. "neu
ASSIGN MTEXT2+MOFF(*) TO <MTXT>. "neu
REPLACE VARK WITH '%%_Z_%%' INTO <MTXT>. "neu
MTVAROFF = 7. "neu
ENDIF.
ENDIF.
WHEN '2'. "'&2'
READ TABLE MTTAB INDEX 2.
IF SY-SUBRC EQ 0.
MOFF = VARPOS + MTVAROFF. "neu
ASSIGN MTEXT2+MOFF(*) TO <MTXT>. "neu
ASSIGN MTTAB-TEXT(MTTAB-LEN) TO <VTXT>.
REPLACE VARK WITH <VTXT> INTO <MTXT>. "neu
MTVAROFF = MTTAB-LEN. "neu
ELSE.
IF VARI GT MPARCNT.
MOFF = VARPOS + MTVAROFF. "neu
ASSIGN MTEXT2+MOFF(*) TO <MTXT>. "neu
REPLACE VARK WITH ' ' INTO <MTXT>. "neu
MTVAROFF = 2. "neu
ELSE.
MOFF = VARPOS + MTVAROFF. "neu
ASSIGN MTEXT2+MOFF(*) TO <MTXT>. "neu
REPLACE VARK WITH '%%_Z_%%' INTO <MTXT>. "neu
MTVAROFF = 7. "neu
ENDIF.
ENDIF.
WHEN '3'. "'&3'
READ TABLE MTTAB INDEX 3.
IF SY-SUBRC EQ 0.
MOFF = VARPOS + MTVAROFF. "neu
ASSIGN MTEXT2+MOFF(*) TO <MTXT>. "neu
ASSIGN MTTAB-TEXT(MTTAB-LEN) TO <VTXT>.
REPLACE VARK WITH <VTXT> INTO <MTXT>. "neu
MTVAROFF = MTTAB-LEN. "neu
ELSE.
IF VARI GT MPARCNT.
MOFF = VARPOS + MTVAROFF. "neu
ASSIGN MTEXT2+MOFF(*) TO <MTXT>. "neu
REPLACE VARK WITH ' ' INTO <MTXT>. "neu
MTVAROFF = 2. "neu
ELSE.
MOFF = VARPOS + MTVAROFF. "neu
ASSIGN MTEXT2+MOFF(*) TO <MTXT>. "neu
REPLACE VARK WITH '%%_Z_%%' INTO <MTXT>. "neu
MTVAROFF = 7. "neu
ENDIF.
ENDIF.
WHEN '4'. "'&4'
READ TABLE MTTAB INDEX 4.
IF SY-SUBRC EQ 0.
MOFF = VARPOS + MTVAROFF. "neu
ASSIGN MTEXT2+MOFF(*) TO <MTXT>. "neu
ASSIGN MTTAB-TEXT(MTTAB-LEN) TO <VTXT>.
REPLACE VARK WITH <VTXT> INTO <MTXT>. "neu
MTVAROFF = MTTAB-LEN. "neu
ELSE.
IF VARI GT MPARCNT.
MOFF = VARPOS + MTVAROFF. "neu
ASSIGN MTEXT2+MOFF(*) TO <MTXT>. "neu
REPLACE VARK WITH ' ' INTO <MTXT>. "neu
MTVAROFF = 2. "neu
ELSE.
MOFF = VARPOS + MTVAROFF. "neu
ASSIGN MTEXT2+MOFF(*) TO <MTXT>. "neu
REPLACE VARK WITH '%%_Z_%%' INTO <MTXT>. "neu
MTVAROFF = 7. "neu
ENDIF.
ENDIF.
*
ENDCASE.
*
DO_CONDENSE = SPACE.
*
ENDFORM. "replace_var