Real-time BDC call transaction method in SAP ABAP

Real-time example of using BDC call transaction method in SAP ABAP
REPORT  ZCALL_TRAN_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: BEGIN OF IT_ERR OCCURS 1,
        KUNNR(10),
        BUKRS(4),
        KTOKD(4),
        NAME1(30),
        SORTL(10),
        STRAS(30),
        ORT01(25),
        LAND1(3),
        AKONT(10),
        ZUAWA(3),
        MSG(150),
      END OF IT_ERR.

DATA: IT_BDCDATA LIKE BDCDATA OCCURS 1 WITH HEADER LINE.
DATA: IT_MSGS    LIKE BDCMSGCOLL OCCURS 1 WITH HEADER LINE.

DATA: V_MSG TYPE CHAR255,
      V_MODE.

PARAMETERS: P_FILE LIKE RLGRAP-FILENAME.

PARAMETERS: P_A RADIOBUTTON GROUP G1,
            P_E RADIOBUTTON GROUP G1,
            P_N RADIOBUTTON GROUP G1 DEFAULT 'X'.


AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
  PERFORM BROWSE_FILE.

START-OF-SELECTION.
  PERFORM READ_FILE.
  PERFORM POPULATE_BDCDATA.


END-OF-SELECTION.
  IF NOT IT_ERR[] IS INITIAL.
    PERFORM DOWNLOAD_ERR_RECS.
  ENDIF.
  PERFORM MEMORY_FREE.
FORM BROWSE_FILE .
  CALL FUNCTION 'F4_FILENAME'
    IMPORTING
      FILE_NAME = P_FILE.

ENDFORM.                    " BROWSE_FILE
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 .
*--DETERMINE THE MODE
  IF P_A = 'X'.
    V_MODE = 'A'.
  ELSEIF P_E = 'X'.
    V_MODE = 'E'.
  ELSEIF P_N = 'X'.
    V_MODE = 'N'.
  ENDIF.

  LOOP AT ITAB.
    PERFORM BDCDATA_POPULATION.
*--call transaction with it_bdcdata
    CALL TRANSACTION 'XD01' USING IT_BDCDATA
                            MODE  V_MODE
                          UPDATE  'S'
                          MESSAGES INTO IT_MSGS.

    IF SY-SUBRC = 0.
      PERFORM SUCC_RECS.
      CLEAR: IT_MSGS,IT_MSGS[].
    ELSE.
      PERFORM ERR_RECS.
      CLEAR: IT_MSGS,IT_MSGS[].
    ENDIF.

    REFRESH IT_BDCDATA.
  ENDLOOP.

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 SUCC_RECS .
  READ TABLE IT_MSGS WITH KEY MSGTYP = 'S'.
  IF SY-SUBRC = 0.
    CALL FUNCTION 'FORMAT_MESSAGE'
      EXPORTING
        ID        = IT_MSGS-MSGID
        LANG      = SY-LANGU
        NO        = IT_MSGS-MSGNR
        V1        = IT_MSGS-MSGV1
        V2        = IT_MSGS-MSGV2
        V3        = IT_MSGS-MSGV3
        V4        = IT_MSGS-MSGV4
      IMPORTING
        MSG       = V_MSG
      EXCEPTIONS
        NOT_FOUND = 1
        OTHERS    = 2.

    IF SY-SUBRC <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ELSE.
      WRITE:/ V_MSG.
    ENDIF.

  ENDIF.

ENDFORM.                    " SUCC_RECS
FORM ERR_RECS .
  READ TABLE IT_MSGS WITH KEY MSGTYP = 'E'.
  IF SY-SUBRC = 0.
    CALL FUNCTION 'FORMAT_MESSAGE'
      EXPORTING
        ID        = IT_MSGS-MSGID
        LANG      = SY-LANGU
        NO        = IT_MSGS-MSGNR
        V1        = IT_MSGS-MSGV1
        V2        = IT_MSGS-MSGV2
        V3        = IT_MSGS-MSGV3
        V4        = IT_MSGS-MSGV4
      IMPORTING
        MSG       = V_MSG
      EXCEPTIONS
        NOT_FOUND = 1
        OTHERS    = 2.

    IF SY-SUBRC <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ELSE.
      MOVE ITAB TO IT_ERR.
      MOVE V_MSG TO IT_ERR-MSG.
      APPEND IT_ERR.
      DELETE ITAB.
    ENDIF.
  ENDIF.
ENDFORM.                    " ERR_RECS
FORM DOWNLOAD_ERR_RECS .
  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      FILENAME                = 'C:\XD01_ERR.XLS'
      FILETYPE                = 'ASC'
      WRITE_FIELD_SEPARATOR   = 'X'
    TABLES
      DATA_TAB                = IT_ERR
    EXCEPTIONS
      FILE_WRITE_ERROR        = 1
      NO_BATCH                = 2
      GUI_REFUSE_FILETRANSFER = 3
      INVALID_TYPE            = 4
      NO_AUTHORITY            = 5
      UNKNOWN_ERROR           = 6
      HEADER_NOT_ALLOWED      = 7
      SEPARATOR_NOT_ALLOWED   = 8
      FILESIZE_NOT_ALLOWED    = 9
      HEADER_TOO_LONG         = 10
      DP_ERROR_CREATE         = 11
      DP_ERROR_SEND           = 12
      DP_ERROR_WRITE          = 13
      UNKNOWN_DP_ERROR        = 14
      ACCESS_DENIED           = 15
      DP_OUT_OF_MEMORY        = 16
      DISK_FULL               = 17
      DP_TIMEOUT              = 18
      FILE_NOT_FOUND          = 19
      DATAPROVIDER_EXCEPTION  = 20
      CONTROL_FLUSH_ERROR     = 21
      OTHERS                  = 22.

  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ELSE.
    MESSAGE I000(Z00) WITH 'Error Records downloaded'.
  ENDIF.

ENDFORM.                    " DOWNLOAD_ERR_RECS
FORM MEMORY_FREE .
  REFRESH: ITAB, IT_ERR, IT_BDCDATA, IT_MSGS.
  FREE: ITAB, IT_ERR, IT_BDCDATA, IT_MSGS.

ENDFORM.                    " MEMORY_FREE

Popular posts from this blog

ALV with field catalog merge

SAP ABAP real-time Interview Questions with answers

Using GUI Upload in SAP ABAP