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