Real-time example of BDC session method in SAP
Real-time example of using BDC session method in SAP ABAP.
REPORT ZSESSION_XD01. DATA: BEGIN OF ITAB OCCURS 1, KUNNR(10), BUKRS(4), KTOKD(4), NAME1(30), SORTL(10), STRAS(30), ORT01(25), LAND1(3), AKONT(10), ZUAWA(3), END OF ITAB. DATA: IT_BDCDATA LIKE BDCDATA OCCURS 1 WITH HEADER LINE. DATA: V_FLAG. PARAMETERS: P_FILE LIKE RLGRAP-FILENAME. AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE. PERFORM BROWSE_FILE. START-OF-SELECTION. PERFORM READ_FILE. PERFORM POPULATE_BDCDATA. END-OF-SELECTION. PERFORM MEMORY_FREE. *&---------------------------------------------------------------------* *& Form BROWSE_FILE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM BROWSE_FILE . CALL FUNCTION 'F4_FILENAME' IMPORTING FILE_NAME = P_FILE. ENDFORM. " BROWSE_FILE *&---------------------------------------------------------------------* *& Form READ_FILE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM READ_FILE . DATA: V_FILE TYPE STRING. V_FILE = P_FILE. CALL FUNCTION 'GUI_UPLOAD' EXPORTING FILENAME = V_FILE FILETYPE = 'ASC' HAS_FIELD_SEPARATOR = 'X' TABLES DATA_TAB = ITAB 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. ENDFORM. " READ_FILE *&---------------------------------------------------------------------* *& Form POPULATE_BDCDATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM POPULATE_BDCDATA . *--Creating BI Session PERFORM CREATE_BI_SESSION. IF V_FLAG = 'X'. LOOP AT ITAB. PERFORM BDCDATA_POPULATION. PERFORM WRITE_DATA_TO_BI_SESSION. CLEAR: IT_BDCDATA,IT_BDCDATA[]. ENDLOOP. MESSAGE S000(Z00) WITH 'Data has been written to Batch Input Session'. PERFORM CLOSE_BI_SESSION. ENDIF. ENDFORM. " POPULATE_BDCDATA FORM BDCDATA_POPULATION . *--1ST SCREEN PERFORM BDC_DYNPRO USING 'SAPMF02D' '0100'. PERFORM BDC_FIELD USING 'BDC_OKCODE' '/00'. PERFORM BDC_FIELD USING 'RF02D-KUNNR' ITAB-KUNNR. PERFORM BDC_FIELD USING 'RF02D-BUKRS' ITAB-BUKRS. PERFORM BDC_FIELD USING 'RF02D-KTOKD' ITAB-KTOKD. *--2ND SCREEN PERFORM BDC_DYNPRO USING 'SAPMF02D' '0110'. PERFORM BDC_FIELD USING 'BDC_OKCODE' '/00'. PERFORM BDC_FIELD USING 'KNA1-NAME1' ITAB-NAME1. PERFORM BDC_FIELD USING 'KNA1-SORTL' ITAB-SORTL. PERFORM BDC_FIELD USING 'KNA1-STRAS' ITAB-STRAS. PERFORM BDC_FIELD USING 'KNA1-ORT01' ITAB-ORT01. PERFORM BDC_FIELD USING 'KNA1-LAND1' ITAB-LAND1. PERFORM BDC_FIELD USING 'KNA1-SPRAS' SY-LANGU. *--3RD-SCREEN PERFORM BDC_DYNPRO USING 'SAPMF02D' '0120'. PERFORM BDC_FIELD USING 'BDC_OKCODE' '/00'. *--4TH SCREEN PERFORM BDC_DYNPRO USING 'SAPMF02D' '0125'. PERFORM BDC_FIELD USING 'BDC_OKCODE' '/00'. *--5TH SCREEN PERFORM BDC_DYNPRO USING 'SAPMF02D' '0130'. PERFORM BDC_FIELD USING 'BDC_OKCODE' '=ENTR'. *--6TH SCREEN PERFORM BDC_DYNPRO USING 'SAPMF02D' '0340'. PERFORM BDC_FIELD USING 'BDC_OKCODE' '=ENTR'. *--7TH SCREEN PERFORM BDC_DYNPRO USING 'SAPMF02D' '0360'. PERFORM BDC_FIELD USING 'BDC_OKCODE' '=ENTR'. *--8TH SCREEN PERFORM BDC_DYNPRO USING 'SAPMF02D' '0210'. PERFORM BDC_FIELD USING 'BDC_OKCODE' '=UPDA'. PERFORM BDC_FIELD USING 'KNB1-AKONT' ITAB-AKONT. PERFORM BDC_FIELD USING 'KNB1-ZUAWA' ITAB-ZUAWA. ENDFORM. " BDCDATA_POPULATION 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 FORM BDC_FIELD USING FNAM FVAL. IF NOT FVAL IS INITIAL. CLEAR IT_BDCDATA. IT_BDCDATA-FNAM = FNAM. IT_BDCDATA-FVAL = FVAL. APPEND IT_BDCDATA. ENDIF. ENDFORM. "BDC_FIELD FORM MEMORY_FREE . REFRESH: ITAB, IT_BDCDATA. FREE: ITAB,IT_BDCDATA. ENDFORM. " MEMORY_FREE FORM CREATE_BI_SESSION . CALL FUNCTION 'BDC_OPEN_GROUP' EXPORTING CLIENT = SY-MANDT GROUP = 'ZXD01' HOLDDATE = SY-DATUM KEEP = 'X' USER = SY-UNAME 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. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ELSE. V_FLAG = 'X'. MESSAGE S000(Z00) WITH 'Batch Input Session has been created'. ENDIF. ENDFORM. " CREATE_BI_SESSION FORM WRITE_DATA_TO_BI_SESSION . CALL FUNCTION 'BDC_INSERT' EXPORTING TCODE = 'XD01' * CTUPARAMS = ' ' TABLES DYNPROTAB = IT_BDCDATA[] 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. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. ENDFORM. " WRITE_DATA_TO_BI_SESSION FORM CLOSE_BI_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. ENDFORM. " CLOSE_BI_SESSION