Traducir
Select Language
English French German
Código fuente -
Plantillas
Martes, 22 de Julio de 2003 17:17
Batch Input: Combination of two methods
REPORT ZVVSC003 LINE-SIZE 120
LINE-COUNT 66
NO STANDARD PAGE HEADING .
************************************************************************
* Description : Upload data from tabs delimited text file
* and perform =something= automatically->
* First all records processed using
* 'CALL TRANSACTION USING...';
* Then erroneous records are added to BDC Session.
* All the lines with '=something=' or '=to be customized='
* words are empty template only and need to be filled with
* real data. Transactions XX01, XX02, XX03 are templates
* as well and should be changed with real ones.
* For demo reasons the LIBS transaction is used for call
* (LIBS is SAP guide for Lists Design).
* Inputs : PC Input File Name
* : BDC Session Name
* Outputs : '=something= statistics & errors' report
* Error/Return Codes : None
* External References: WS_FILENAME_GET, WS_UPLOAD,
* : BDC_OPEN_GROUP, BDC_INSERT, BDC_CLOSE_GROUP,
* : MESSAGE_PREPARE,
* : transactions LIBS, XX01.
************************************************************************
********* TABLES *******************************************************
********* CONSTANS *****************************************************
CONSTANTS : C_X(1) TYPE C VALUE 'X' ,
C_MODE(1) TYPE C VALUE 'N' , "Call Transaction display mode
* A - display all;
* E - display only error;
* N - No display.
C_UPDATE(1) TYPE C VALUE 'S' . "Call Transaction update type
* S - continue processing when update is completed (synchronous);
* A - continue procwssing immediately;
* L - local update.
********* DATA: VARIABLES **********************************************
DATA : W_MSG(50) TYPE C, "Message string by Input File Proc.
W_N0 LIKE SY-TABIX, "Counter: records read
W_N1 LIKE SY-TABIX, "Counter: records selected
W_N2 LIKE SY-TABIX, "Counter: records processed
W_N3 LIKE SY-TABIX, "Counter: records submitted
W_MSGTXT(273) TYPE C. "Formatted message text
********* DATA: INTERNAL TABLES, RANGES ********************************
*-------- BDC table ----------------------------------------------------
DATA : IT_BDC LIKE BDCDATA OCCURS 0 WITH HEADER LINE ,
IT_BDCMSG LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE ,
*-------- BDC data with error records to be submitted ------------------
BEGIN OF IT_FILE_BDC OCCURS 0,
ER_BDC LIKE BDCDATA OCCURS 0,
END OF IT_FILE_BDC.
*-------- Input file ---------------------------------------------------
DATA : BEGIN OF IT_FILE OCCURS 0,
* =something= data field(s), "Input file fields
END OF IT_FILE,
********* FIELD GROUPS *************************************************
********* FIELD SYMBOLS ************************************************
********* SELECT-OPTIONS AND PARAMETERS ********************************
PARAMETERS : P_FNAME LIKE RLGRAP-FILENAME OBLIGATORY , "Filename Prefix
P_GROUP LIKE APQI-GROUPID OBLIGATORY . "BDC Session Name
********* MACROS *******************************************************
***************
INITIALIZATION .
***************
*************************
**** at selection-screen.
*************************
*--------- F4 for PC Input file ----------------------------------------
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FNAME.
PERFORM SELECT_FILE.
*--------- PC Input file -----------------------------------------------
AT SELECTION-SCREEN ON P_FNAME.
PERFORM TRY_UPLOAD_FILE.
*--------- Company Code ------------------------------------------------
AT SELECTION-SCREEN ON P_BUKRS.
PERFORM CHECK_COMPANY_CODE.
********************
* at selection-screen.
********************
*******************
START-OF-SELECTION .
*******************
PERFORM NUMERATE_LINES.
PERFORM VALIDATE_FILE.
*****************
END-OF-SELECTION .
*****************
PERFORM PROCESS_FILE_CALL.
DESCRIBE TABLE IT_FILE_BDC[] LINES W_N3.
IF W_N3 > 0.
PERFORM PROCESS_FILE_BDC.
ENDIF .
PERFORM PRINT_STATISTIC.
PERFORM PRINT_FOOTER.
************
TOP-OF-PAGE .
************
PERFORM PRINT_HEADER.
**********************************
* top-of-page during line-selection.
**********************************
******************
* at line-selection.
******************
********
* at pf01.
********
****************
* at user-command.
****************
************************************************************************
FORM PRINT_HEADER.
* =to be customized=
* can be used:
* SY-TITLE, SY-TCODE, SY-REPID, SY-DATUM, SY-UZEIT, SY-PAGNO.
WRITE : 'Page: ' , SY-PAGNO .
* =to be customized=
* WRITE: / " =something= 'columns headers'(nnn),
ENDFORM .
************************************************************************
FORM PRINT_FOOTER.
* =to be customized=
WRITE /'*** End Of Report ***' .
ENDFORM .
************************************************************************
FORM PRINT_INPUT_LINE.
* =to be customized=
* WRITE: / "=something= field(s) under text-=something=
* " (under columns headers) color col_key,
ENDFORM .
************************************************************************
FORM PRINT_STATISTIC.
SKIP 1.
WRITE : / 'Read Lines' (014) INTENSIFIED ON ,
AT 40 W_N0 INTENSIFIED OFF.
WRITE : / 'Selected Lines' (015) INTENSIFIED ON ,
AT 40 W_N1 INTENSIFIED OFF.
WRITE : / 'Processed Lines' (016) INTENSIFIED ON ,
AT 40 W_N2 INTENSIFIED OFF.
WRITE : / 'Submitted Lines' (017) INTENSIFIED ON ,
AT 40 W_N3 INTENSIFIED OFF.
ENDFORM .
************************************************************************
FORM VALIDATE_FILE.
LOOP AT IT_FILE.
* validation for =something=, if needed
* CHECK .....
DELETE IT_FILE.
ENDLOOP .
DESCRIBE TABLE IT_FILE LINES W_N1.
ENDFORM .
************************************************************************
FORM PROCESS_FILE_CALL.
LOOP AT IT_FILE.
PERFORM PROCESS_LINE.
ENDLOOP .
ENDFORM .
************************************************************************
FORM PROCESS_FILE_BDC.
PERFORM OPEN_BDC.
LOOP AT IT_FILE_BDC.
PERFORM BDC_INSERT_LINE.
ENDLOOP .
PERFORM CLOSE_BDC.
ENDFORM .
************************************************************************
FORM NUMERATE_LINES.
DESCRIBE TABLE IT_FILE LINES W_N0.
ENDFORM .
************************************************************************
FORM SELECT_FILE.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
DEF_PATH = 'c:\'
MASK = ',Text Files,*.txt;*.doc,All Files,*.*.' (101)
TITLE = 'Select File' (100)
IMPORTING
FILENAME = P_FNAME
EXCEPTIONS
INV_WINSYS = 1
NO_BATCH = 2
SELECTION_CANCEL = 3
SELECTION_ERROR = 4
OTHERS = 5.
IF SY-SUBRC <> 0 AND SY-SUBRC <> 3.
MESSAGE E102(YB) WITH 'Error Selecting File' (007).
ENDIF .
ENDFORM .
************************************************************************
FORM TRY_UPLOAD_FILE.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME = P_FNAME
FILETYPE = 'DAT'
TABLES
DATA_TAB = IT_FILE
EXCEPTIONS
CONVERSION_ERROR = 1
FILE_OPEN_ERROR = 2
FILE_READ_ERROR = 3
INVALID_TABLE_WIDTH = 4
INVALID_TYPE = 5
NO_BATCH = 6
UNKNOWN_ERROR = 7
OTHERS = 8.
IF SY-SUBRC <> 0.
CASE SY-SUBRC.
* =to be customized=: text-006 = 'Uploading Error:'
* text-06n = Concrete Error Description
WHEN 1. CONCATENATE TEXT-006 TEXT-061 INTO W_MSG SEPARATED BY SPACE .
WHEN 2. CONCATENATE TEXT-006 TEXT-062 INTO W_MSG SEPARATED BY SPACE .
WHEN 3. CONCATENATE TEXT-006 TEXT-063 INTO W_MSG SEPARATED BY SPACE .
WHEN 4. CONCATENATE TEXT-006 TEXT-064 INTO W_MSG SEPARATED BY SPACE .
WHEN 5. CONCATENATE TEXT-006 TEXT-065 INTO W_MSG SEPARATED BY SPACE .
WHEN 6. CONCATENATE TEXT-006 TEXT-066 INTO W_MSG SEPARATED BY SPACE .
WHEN 7. CONCATENATE TEXT-006 TEXT-067 INTO W_MSG SEPARATED BY SPACE .
WHEN 8. CONCATENATE TEXT-006 TEXT-068 INTO W_MSG SEPARATED BY SPACE .
ENDCASE .
MESSAGE E102(YB) WITH W_MSG.
ENDIF .
IF IT_FILE IS INITIAL .
MESSAGE E102(YB) WITH 'Empty File!(013).
ENDIF .
ENDFORM .
************************************************************************
FORM PROCESS_LINE.
PERFORM PRINT_INPUT_LINE.
PERFORM BDC_XX01_PREPARE.
PERFORM BDC_XX01_CALL .
ENDFORM .
************************************************************************
FORM BDC_XX01_PREPARE.
REFRESH IT_BDC.
* add lines to BDC data table using forms: -----------------------------
* bdc_dynpro
* bdc_field
* bdc_okcode
* for example:
* perform bdc_dynpro using 'SAPML03T' '0112'. "Confirm Single Item
* perform bdc_field using 'LTAP-NISTA' it_file-umlme. "Quantity
* perform bdc_okcode using '/00'. "Enter
ENDFORM .
************************************************************************
FORM BDC_XX01_CALL .
CLEAR : IT_BDCMSG[], IT_BDCMSG.
CALL TRANSACTION 'LIBS' USING IT_BDC
MODE C_MODE
UPDATE C_UPDATE
MESSAGES INTO IT_BDCMSG.
IF SY-SUBRC <> 0.
IT_FILE_BDC-ER_BDC = IT_BDC[].
APPEND IT_FILE_BDC.
LOOP AT IT_BDCMSG.
PERFORM PRINT_ERROR_LINE.
ENDLOOP .
ELSE .
ADD 1 TO W_N2.
ENDIF .
ENDFORM .
************************************************************************
FORM BDC_INSERT_LINE.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE = 'LIBS'
* POST_LOCAL = NOVBLOCAL
* PRINTING = NOPRINT
TABLES
DYNPROTAB = IT_BDC
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 : 'Error inserting BDC data' (517) COLOR COL_NEGATIVE, SY-SUBRC.
SUBTRACT 1 FROM W_N3.
ENDIF .
ENDFORM .
************************************************************************
FORM BDC_DYNPRO USING VALUE (P_PROGRAM) TYPE C
VALUE (P_DYNPRO) TYPE C.
CLEAR IT_BDC.
MOVE : P_PROGRAM TO IT_BDC-PROGRAM,
P_DYNPRO TO IT_BDC-DYNPRO,
C_X TO IT_BDC-DYNBEGIN.
APPEND IT_BDC.
ENDFORM .
************************************************************************
FORM BDC_FIELD USING VALUE (P_FIELD) TYPE C
VALUE (P_VALUE).
CLEAR IT_BDC.
MOVE P_FIELD TO IT_BDC-FNAM.
WRITE P_VALUE TO IT_BDC-FVAL LEFT-JUSTIFIED .
APPEND IT_BDC.
ENDFORM .
************************************************************************
FORM BDC_OKCODE USING VALUE (P_CODE) TYPE C.
CLEAR IT_BDC.
MOVE : 'BDC_OKCODE' TO IT_BDC-FNAM,
P_CODE TO IT_BDC-FVAL.
APPEND IT_BDC.
ENDFORM .
************************************************************************
FORM OPEN_BDC.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
* CLIENT = SY-MANDT
* DEST = FILLER8
GROUP = P_GROUP
* HOLDDATE = FILLER8
* KEEP = FILLER1
USER = SY-UNAME
* RECORD = FILLER1
* 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.
CLEAR W_N3.
CASE SY-SUBRC.
* =to be customized=: text-600 = 'Error Creating BDC group:'
* text-6nn = Concrete Error Description
WHEN 1. CONCATENATE TEXT-600 TEXT-601 INTO W_MSG SEPARATED BY SPACE .
WHEN 2. CONCATENATE TEXT-600 TEXT-602 INTO W_MSG SEPARATED BY SPACE .
WHEN 3. CONCATENATE TEXT-600 TEXT-603 INTO W_MSG SEPARATED BY SPACE .
WHEN 4. CONCATENATE TEXT-600 TEXT-604 INTO W_MSG SEPARATED BY SPACE .
WHEN 5. CONCATENATE TEXT-600 TEXT-605 INTO W_MSG SEPARATED BY SPACE .
WHEN 6. CONCATENATE TEXT-600 TEXT-606 INTO W_MSG SEPARATED BY SPACE .
WHEN 7. CONCATENATE TEXT-600 TEXT-607 INTO W_MSG SEPARATED BY SPACE .
WHEN 8. CONCATENATE TEXT-600 TEXT-608 INTO W_MSG SEPARATED BY SPACE .
WHEN 9. CONCATENATE TEXT-600 TEXT-609 INTO W_MSG SEPARATED BY SPACE .
WHEN 10.CONCATENATE TEXT-600 TEXT-610 INTO W_MSG SEPARATED BY SPACE .
WHEN 11.CONCATENATE TEXT-600 TEXT-611 INTO W_MSG SEPARATED BY SPACE .
ENDCASE .
MESSAGE E102(YB) WITH W_MSG.
ENDIF .
ENDFORM .
************************************************************************
FORM CLOSE_BDC.
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
NOT_OPEN = 1
QUEUE_ERROR = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
CLEAR W_N3.
CASE SY-SUBRC.
* =to be customized=: text-700 = 'Error Closing BDC group:'
* text-70n = Concrete Error Description
WHEN 1. CONCATENATE TEXT-700 TEXT-701 INTO W_MSG SEPARATED BY SPACE .
WHEN 2. CONCATENATE TEXT-700 TEXT-702 INTO W_MSG SEPARATED BY SPACE .
WHEN 3. CONCATENATE TEXT-700 TEXT-703 INTO W_MSG SEPARATED BY SPACE .
ENDCASE .
MESSAGE E102(YB) WITH W_MSG.
ENDIF .
ENDFORM .
************************************************************************
FORM PRINT_ERROR_LINE.
WRITE : / IT_BDCMSG-TCODE,
AT 6 IT_BDCMSG-DYNAME,
AT 15 IT_BDCMSG-DYNUMB,
AT 20 IT_BDCMSG-MSGTYP,
AT 21 IT_BDCMSG-MSGNR,
AT 24 '(' ,
AT 25 IT_BDCMSG-MSGID,
AT 27 ')' ,
AT 29 IT_BDCMSG-FLDNAME.
CALL FUNCTION 'MESSAGE_PREPARE'
EXPORTING
LANGUAGE = IT_BDCMSG-MSGSPRA
MSG_ID = IT_BDCMSG-MSGID
MSG_NO = IT_BDCMSG-MSGNR
MSG_VAR1 = IT_BDCMSG-MSGV1
MSG_VAR2 = IT_BDCMSG-MSGV2
MSG_VAR3 = IT_BDCMSG-MSGV3
MSG_VAR4 = IT_BDCMSG-MSGV4
IMPORTING
MSG_TEXT = W_MSGTXT
EXCEPTIONS
FUNCTION_NOT_COMPLETED = 1
MESSAGE_NOT_FOUND = 2
OTHERS = 3.
CASE SY-SUBRC.
WHEN 0. WRITE : / W_MSGTXT COLOR COL_NEGATIVE.
WHEN 1. WRITE : / 'Error Processing Message' (015).
WHEN 2. WRITE : / 'Unknown Error Message' (016).
WHEN 3. WRITE : / 'Unknown Error' (017).
ENDCASE .
ENDFORM .
************************************************************************