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