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

Popular posts from this blog

ALV with field catalog merge

SAP ABAP real-time Interview Questions with answers

Using GUI Upload in SAP ABAP