‎2007 Jul 17 10:42 AM
Hello
I'm running a Batch Input (in a FM) and I want to create a session for records with errors. In case of error (output parameter of the FM subrc NE 0) I send it to that session for later running.
Can you explain how do I do this? Thanks!
‎2007 Jul 17 11:05 AM
‎2007 Jul 17 10:43 AM
hi,
In Batch input session errors are handled seperately in LOG.
‎2007 Jul 17 10:51 AM
‎2007 Jul 17 11:05 AM
‎2007 Jul 17 11:08 AM
hi,
Look at the sample program
REPORT Z_BDC_CUSTOMER_R07
NO STANDARD PAGE HEADING LINE-SIZE 255.
INCLUDE Z_CUSTOMER_BDC_R02.
*-----AT SELECTION-SCREEN
AT SELECTION-SCREEN.
IF SY-UCOMM = 'ONLI'.
*-----group and user must be filled to create a session
IF SESSION = 'X' AND
GROUP = SPACE OR USER = SPACE.
MESSAGE E613(MS).
ENDIF.
*----Presentation File name should be entered
IF SESSION = 'X' AND RB_PRE = 'X'
AND P_FILE = '' .
MESSAGE E004(ZROJA).
ELSEIF CTU = 'X' AND RB_PRE = 'X'
AND P_FILE = '' .
MESSAGE E004(ZROJA).
ENDIF.
*----Application File name should be entered
IF SESSION = 'X' AND RB_APP = 'X'
AND P_FILE_A = '' .
MESSAGE E004(ZROJA).
ELSEIF CTU = 'X' AND RB_APP = 'X'
AND P_FILE_A = '' .
MESSAGE E004(ZROJA).
ENDIF.
ENDIF.
*-----AT SELECTION-SCREEN OUTPUT
AT SELECTION-SCREEN OUTPUT.
*----When file from Presentation server is selected
IF RB_PRE = 'X'.
*----To make the application server inactive
LOOP AT SCREEN.
IF SCREEN-GROUP1 = 'AAA'.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ELSE.
*----When file from Presentation server is selected
RB_APP = 'X'.
*----To make the application server inactive
LOOP AT SCREEN.
IF SCREEN-GROUP1 = 'BBB'.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.
*
*-----AT SELECTION-SCREEN ON VALUE-REQUEST
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE_A.
CALL FUNCTION 'F4_DXFILENAME_TOPRECURSION'
EXPORTING
I_LOCATION_FLAG = 'A'
I_SERVER = ' '
FILEOPERATION = 'R'
IMPORTING
O_PATH = P_FILE_A
EXCEPTIONS
RFC_ERROR = 1
ERROR_WITH_GUI = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*-----AT SELECTION-SCREEN ON VALUE-REQUEST
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
*-----Function module for value-request
CALL FUNCTION 'F4_FILENAME'
EXPORTING
PROGRAM_NAME = SYST-CPROG
DYNPRO_NUMBER = SYST-DYNNR
FIELD_NAME = ' '
IMPORTING
FILE_NAME = V_FILE_NAME.
*----Assigning the flatfile to parameter
P_FILE = V_FILE_NAME.
*-----START-OF-SELECTION
START-OF-SELECTION.
DATA: FILENAME TYPE STRING.
*----When file from Presentation Server is selected
IF RB_PRE = 'X'.
FILENAME = P_FILE.
*-----Function module to upload data from the presentation server
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = FILENAME
FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = 'X'
TABLES
DATA_TAB = IT_KNA1
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.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ELSE.
*----Upload the File from Application Server
OPEN DATASET P_FILE_A FOR INPUT IN TEXT MODE ENCODING DEFAULT.
*-----to display an error if the file is not in application server
IF SY-SUBRC NE 0.
MESSAGE E006(ZROJA).
ELSE.
DO.
READ DATASET P_FILE_A INTO X_KNA1.
IF SY-SUBRC EQ 0.
APPEND X_KNA1 TO IT_KNA1.
ELSE.
EXIT.
ENDIF.
ENDDO.
ENDIF.
CLOSE DATASET P_FILE_A.
ENDIF.
*-----To open a batchinput session
IF SESSION = 'X'.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT = SY-MANDT
GROUP = GROUP
KEEP = KEEP
USER = USER
PROG = SY-CPROG
EXCEPTIONS
CLIENT_INVALID = 1
DESTINATION_INVALID = 2
GROUP_INVALID = 3
GROUP_IS_LOCKED = 4
INTERNAL_ERROR = 6
QUEUE_ERROR = 7
RUNNING = 8
SYSTEM_LOCK_ERROR = 9
USER_INVALID = 10
OTHERS = 11.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
*-----Filling the BDCDATA using the Internal Table
LOOP AT IT_KNA1 INTO X_KNA1.
PERFORM BDC_DYNPRO USING 'SAPMF02D' '0100'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RF02D-KTOKD'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'RF02D-KUNNR'
X_KNA1-KUNNR.
PERFORM BDC_FIELD USING 'RF02D-KTOKD'
X_KNA1-KTOKD.
PERFORM BDC_DYNPRO USING 'SAPMF02D' '0110'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'KNA1-SPRAS'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'KNA1-NAME1'
X_KNA1-NAME1.
PERFORM BDC_FIELD USING 'KNA1-SORTL'
X_KNA1-SORTL.
PERFORM BDC_FIELD USING 'KNA1-ORT01'
X_KNA1-ORT01.
PERFORM BDC_FIELD USING 'KNA1-PSTLZ'
X_KNA1-PSTLZ.
PERFORM BDC_FIELD USING 'KNA1-LAND1'
X_KNA1-LAND1.
PERFORM BDC_FIELD USING 'KNA1-SPRAS'
X_KNA1-SPRAS.
PERFORM BDC_DYNPRO USING 'SAPMF02D' '0120'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'KNA1-LZONE'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'KNA1-LZONE'
X_KNA1-LZONE.
PERFORM BDC_DYNPRO USING 'SAPMF02D' '0125'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'KNA1-NIELS'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_DYNPRO USING 'SAPMF02D' '0130'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'KNBK-BANKS(01)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=ENTR'.
PERFORM BDC_DYNPRO USING 'SAPMF02D' '0340'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RF02D-KUNNR'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=ENTR'.
PERFORM BDC_DYNPRO USING 'SAPMF02D' '0370'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RF02D-KUNNR'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=ENTR'.
PERFORM BDC_FIELD USING 'KNA1-CIVVE'
'X'.
PERFORM BDC_DYNPRO USING 'SAPMF02D' '0360'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'KNVK-NAMEV(01)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=ENTR'.
*----If Session is selected
IF SESSION = 'X'.
*----To insert data into batch input session
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE = 'XD01'
TABLES
DYNPROTAB = IT_BDCDATA.
REFRESH IT_BDCDATA.
AT LAST.
SKIP.
WRITE:/ TEXT-001.
ENDAT.
ELSE.
*----Calling the transaction
CALL TRANSACTION 'XD01' USING IT_BDCDATA
MODE CTUMODE
UPDATE CUPDATE
MESSAGES INTO IT_BDCMSGCOLL.
CLEAR IT_BDCDATA.
REFRESH IT_BDCDATA.
ENDIF.
ENDLOOP.
*----If Session is Selected
IF SESSION = 'X'.
*----To close the session
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
NOT_OPEN = 1
QUEUE_ERROR = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
*-----END-OF-SELECTION
END-OF-SELECTION.
*----To display the success messages
LOOP AT IT_BDCMSGCOLL INTO X_BDCMSGCOLL WHERE MSGTYP = 'S' .
*-----If Message Type Differs
ON CHANGE OF X_BDCMSGCOLL-MSGTYP.
WRITE:/ TEXT-002.
SKIP.
ULINE (58).
WRITE:/01 SY-VLINE,02 TEXT-003,
14 SY-VLINE,15 TEXT-004,
21 SY-VLINE,22 TEXT-005,
35 SY-VLINE,36 TEXT-006,
58 SY-VLINE,/01 SY-ULINE(58).
ENDON.
WRITE:/01 SY-VLINE,02 X_BDCMSGCOLL-MSGTYP,
14 SY-VLINE,15 X_BDCMSGCOLL-TCODE,
21 SY-VLINE,22 X_BDCMSGCOLL-MSGV1,
35 SY-VLINE,36 TEXT-007,
58 SY-VLINE,/01 SY-ULINE(58).
ENDLOOP.
SKIP 2.
*----To display the error messages
LOOP AT IT_BDCMSGCOLL INTO X_BDCMSGCOLL WHERE MSGTYP = 'E'.
*-----If Message Type Differs
ON CHANGE OF X_BDCMSGCOLL-MSGTYP.
WRITE:/ TEXT-008.
SKIP.
ULINE (58).
WRITE:/01 SY-VLINE,02 TEXT-003,
14 SY-VLINE,15 TEXT-004,
21 SY-VLINE,22 TEXT-005,
35 SY-VLINE,36 TEXT-006,
58 SY-VLINE,/01 SY-ULINE(58).
ENDON.
WRITE:/01 SY-VLINE,02 X_BDCMSGCOLL-MSGTYP,
14 SY-VLINE,15 X_BDCMSGCOLL-TCODE,
21 SY-VLINE,22 X_BDCMSGCOLL-MSGV1,
35 SY-VLINE,36 'Customer Already Exits',
58 SY-VLINE,/01 SY-ULINE(58).
ENDLOOP.
*-----FORM fill_bdcdata
FORM FILL_BDCDATA USING L_DYNPRO TYPE ANY
L_FNAME TYPE ANY
L_FVALUE TYPE ANY.
CLEAR X_BDCDATA.
IF L_DYNPRO = 'X'.
X_BDCDATA-DYNBEGIN = 'X'.
X_BDCDATA-PROGRAM = L_FNAME.
X_BDCDATA-DYNPRO = L_FVALUE.
ELSE.
X_BDCDATA-FNAM = L_FNAME.
X_BDCDATA-FVAL = L_FVALUE.
ENDIF.
APPEND X_BDCDATA TO IT_BDCDATA.
ENDFORM. "BDC_FIELD
*-----Start new screen
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR IT_BDCDATA.
IT_BDCDATA-PROGRAM = PROGRAM.
IT_BDCDATA-DYNPRO = DYNPRO.
IT_BDCDATA-DYNBEGIN = 'X'.
APPEND IT_BDCDATA.
ENDFORM. "BDC_DYNPRO
*-----Insert field
FORM BDC_FIELD USING FNAM FVAL.
IF FVAL <> SPACE.
CLEAR IT_BDCDATA.
IT_BDCDATA-FNAM = FNAM.
IT_BDCDATA-FVAL = FVAL.
APPEND IT_BDCDATA.
ENDIF.
ENDFORM. "BDC_FIELD
‎2007 Jul 17 11:16 AM