REPORT ZUTBDCER.
*----------------------------------------------------------------------*
* Topic: Batch Input Session analyzer *
* *
* Description: The program will take information about a BDC session *
* (name, create date and create time) and it will print *
* out the transactions that were in error. It expands on *
* the ANALYSIS button when you display the log file. *
* *
* It will show you the screen flow and the field contents *
* *
* Implementing: *
* *
* Customizing: None. *
* *
* Change of Check tables. *
* release: *
* *
* SAP Releases:2.2x - 3.0x *
* *
* Programmer: Contribution from Caras Howard Howard.Caras@sni-usa.com *
* who has made som modification to abap program from the *
* SAP-R3-LIST with unknown originally creator *
* *
* Date: may 1997 *
* *
* Submitting: By transaction SA38 or by batch job scheduling. *
* *
* Authori- : None *
* zation *
* *
* Sel. options Groupid: *
* Credate: *
* Cretime: *
* *
*-------------------------------Corrections----------------------------*
* Date Userid Correction *
* ??-??-???? ?????? *
*----------------------------------------------------------------------*
TABLES: APQI, APQD, *APQD, DDFTX, D021T.
DATA: SKIP_TRANS LIKE APQD-TRANS,
NO_ERRORS(5) TYPE N,
PROG_NAME LIKE D021T-PROG,
DYNR_NAME LIKE D021T-DYNR,
FLD_NAME(15),
FLD_NAME2(15),
TABLE_NAME(15),
FLD_DESC(40),
FLD_VALUE(38),
LENGTH LIKE SY-FDPOS,
DATA_OFFSET LIKE SY-FDPOS.
DATA: BEGIN OF DELIM,
HEX_# TYPE X VALUE 00,
END OF DELIM.
SELECT-OPTIONS: GROUPID FOR APQI-GROUPID, "Session Name
CREDATE FOR APQI-CREDATE, "Date Created
CRETIME FOR APQI-CRETIME. "Time Created
FIELD-SYMBOLS <F1>.
SELECT * FROM APQI WHERE GROUPID IN GROUPID
AND CREDATE IN CREDATE
AND CRETIME IN CRETIME.
SKIP.
WRITE: / 'SESSION NAME :', APQI-GROUPID.
WRITE: / 'PROCESSING DATE:', APQI-CREDATE.
WRITE: / 'PROCESSING TIME:', APQI-CRETIME.
NO_ERRORS = 'Y'.
SELECT * FROM APQD WHERE QID = APQI-QID
ORDER BY TRANS BLOCK SEGMT MSGCOUNT.
IF APQD-BLOCK = 1.
CLEAR SKIP_TRANS.
IF APQD-VARDATA+1(1) NE 'E'.
SKIP_TRANS = APQD-TRANS.
ELSE.
ADD 1 TO NO_ERRORS.
SKIP.
WRITE:/2 'Error in transaction #', APQD-TRANS.
CHECK 'x' NE 'x'.
ENDIF.
ENDIF.
CHECK SKIP_TRANS NE APQD-TRANS.
PROG_NAME = APQD-VARDATA+6(8).
DYNR_NAME = APQD-VARDATA+14(4).
WRITE:/4 'Program name:', APQD-VARDATA+6(8),
'screen:', APQD-VARDATA+14(4).
SHIFT APQD-VARDATA LEFT BY 20 PLACES.
WHILE SY-SUBRC = 0.
CALL FUNCTION 'STRING_SPLIT'
EXPORTING
DELIMITER = DELIM
STRING = APQD-VARDATA
IMPORTING
HEAD = FLD_NAME
TAIL = APQD-VARDATA
EXCEPTIONS
NOT_FOUND = 01
NOT_VALID = 02
TOO_LONG = 03
TOO_SMALL = 04.
CHECK SY-SUBRC = 0.
PERFORM FIND_FIELD_DESCRIPTION.
CALL FUNCTION 'STRING_SPLIT'
EXPORTING
DELIMITER = DELIM
STRING = APQD-VARDATA
IMPORTING
HEAD = FLD_VALUE
TAIL = APQD-VARDATA
EXCEPTIONS
NOT_FOUND = 01
NOT_VALID = 02
TOO_LONG = 03
TOO_SMALL = 04.
CHECK SY-SUBRC = 0.
IF FLD_NAME = 'BDC_OKCODE'.
FLD_DESC = 'OK CODE'.
ENDIF.
WRITE:/6 'Field name:', FLD_DESC, 'value:', FLD_VALUE,
' (',FLD_NAME,')'.
ENDWHILE.
ENDSELECT.
IF NO_ERRORS IS INITIAL.
WRITE:/ 'No errors'.
ELSE.
SKIP 3.
ULINE.
WRITE:/ 'There were',NO_ERRORS,'errors in this batch.'.
ULINE.
ENDIF.
NEW-PAGE.
ENDSELECT.
*&---------------------------------------------------------------------*
*& Form FIND_FIELD_DESCRIPTION
*&---------------------------------------------------------------------*
FORM FIND_FIELD_DESCRIPTION.
CALL FUNCTION 'STRING_SPLIT'
EXPORTING
DELIMITER = '-'
STRING = FLD_NAME
IMPORTING
HEAD = TABLE_NAME
TAIL = FLD_NAME2
EXCEPTIONS
NOT_FOUND = 01
NOT_VALID = 02
TOO_LONG = 03
TOO_SMALL = 04.
CHECK SY-SUBRC = 0.
CHECK NOT FLD_NAME IS INITIAL.
SELECT SINGLE * FROM DDFTX
WHERE TABNAME = TABLE_NAME
AND FIELDNAME = FLD_NAME2(5)
AND DDLANGUAGE = SY-LANGU.
IF SY-SUBRC = 0.
FLD_DESC = DDFTX-SCRTEXT_L.
IF FLD_DESC IS INITIAL.
SELECT SINGLE * FROM D021T
WHERE PROG = PROG_NAME
AND DYNR = DYNR_NAME
AND LANG = SY-LANGU
AND FLDN = FLD_NAME.
IF SY-SUBRC = 0.
FLD_DESC = D021T-DTXT.
ELSE.
FLD_DESC = 'field name not found'.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " FIND_FIELD_DESCRIPTION