이전 글에서 BDC에 대한 설명을 하면서 BDC 프로그램 유형으로 ‘CALL TRANSACTION 처리에 의한 온라인(실시간) 처리 방법의 BDC‘와 ‘세션 처리에 의한 배치(Batch) 실행 방법의 BDC‘ 이렇게 2가지 유형에 대해 설명한 적이 있습니다.
이번 글에서는 ABAP BDC 프로그램의 CALL TRANSACTION(실시간) 처리에 대한 실제 예제를 배워보겠습니다.
BDC 프로그램 예제 소스
– 이전 글에서 설명한 ABAP BDC 프로그램 개발을 위한 트랜잭션 리코더(Record) 방법에서 레코딩한 예제를 프로그램으로 작성한 예제 입니다.
PROGRAM ZBDC0001.
DATA: BEGIN OF IT_DATA OCCURS 0,
MATNR LIKE MARA-MATNR, “자재번호
MAKTX LIKE MAKT-MAKTX, “자재내역
BISMT LIKE MARA-BISMT, “기존자재번호
END OF IT_DATA.
*– BDC DATA
DATA : BEGIN OF BDC_TAB OCCURS 5000.
INCLUDE STRUCTURE BDCDATA.
DATA : END OF BDC_TAB.
DATA MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-T01.
PARAMETERS: P_FILE LIKE RLGRAP-FILENAME DEFAULT ‘C:\TEMP\’,
P_MODE(1) TYPE C DEFAULT ‘N’.
SELECTION-SCREEN END OF BLOCK B1.
*—
START-OF-SELECTION.
PERFORM UPLOAD_DATA.
PERFORM BDC_MM02.
*&———————————————————————*
*& Form UPLOAD_DATA
*&———————————————————————*
FORM UPLOAD_DATA .
DATA: LV_FILE TYPE STRING,
LV_FILE_TABLE TYPE TABLE OF FILE_TABLE,
LV_FILETABLE TYPE FILE_TABLE,
LV_RC TYPE I,
LV_P_DEF_FILE TYPE STRING,
LV_USR_ACT TYPE I,
LV_CNT TYPE I.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
EXPORTING
DEFAULT_FILENAME = LV_P_DEF_FILE
CHANGING
FILE_TABLE = LV_FILE_TABLE
RC = LV_RC
USER_ACTION = LV_USR_ACT
EXCEPTIONS
FILE_OPEN_DIALOG_FAILED = 1
CNTL_ERROR = 2
ERROR_NO_GUI = 3
NOT_SUPPORTED_BY_GUI = 4
OTHERS = 5.
IF SY-SUBRC = 0 AND LV_USR_ACT <> CL_GUI_FRONTEND_SERVICES=>ACTION_CANCEL.
LOOP AT LV_FILE_TABLE INTO LV_FILETABLE.
LV_FILE = LV_FILETABLE.
EXIT.
ENDLOOP.
CALL FUNCTION ‘GUI_UPLOAD’
EXPORTING
FILENAME = LV_FILE
FILETYPE = ‘DAT’
TABLES
DATA_TAB = IT_DATA.
ENDIF.
ENDFORM. ” UPLOAD_DATA
*&———————————————————————*
*& Form BDC_MM02
*&———————————————————————*
FORM BDC_MM02 .
LOOP AT IT_DATA.
CLEAR: BDC_TAB. REFRESH BDC_TAB.
PERFORM DYNPRO USING:
‘X’ ‘SAPLMGMM’ ‘0060’,
‘ ‘ ‘RMMG1-MATNR’ IT_DATA-MATNR,
‘ ‘ ‘BDC_OKCODE’ ‘=ENTR’.
PERFORM DYNPRO USING:
‘X’ ‘SAPLMGMM’ ‘0070’,
‘ ‘ ‘MSICHTAUSW-KZSEL(01)’ ‘X’,
‘ ‘ ‘BDC_OKCODE’ ‘=ENTR’.
PERFORM DYNPRO USING:
‘X’ ‘SAPLMGMM’ ‘4004’,
‘ ‘ ‘MAKT-MAKTX’ IT_DATA-MAKTX,
‘ ‘ ‘MARA-BISMT’ IT_DATA-BISMT,
‘ ‘ ‘BDC_OKCODE’ ‘=BU’.
CALL TRANSACTION ‘MM02’ USING BDC_TAB
MODE P_MODE
UPDATE ‘S’
MESSAGES INTO MESSTAB.
ENDLOOP.
ENDFORM. ” BDC_MM02
*&———————————————————————*
*& Form DYNPRO
*&———————————————————————*
* text
*———————————————————————-*
* –>P_0251 text
* –>P_0252 text
* –>P_0253 text
*———————————————————————-*
FORM DYNPRO USING DYNBEGIN NAME VALUE.
IF DYNBEGIN = ‘X’.
CLEAR BDC_TAB.
MOVE : NAME TO BDC_TAB-PROGRAM,
VALUE TO BDC_TAB-DYNPRO,
‘X’ TO BDC_TAB-DYNBEGIN.
APPEND BDC_TAB.
ELSE.
CLEAR BDC_TAB.
MOVE : NAME TO BDC_TAB-FNAM,
VALUE TO BDC_TAB-FVAL.
APPEND BDC_TAB.
ENDIF.
ENDFORM. ” DYNPRO
|
BDC 처리 로직만 따로 확인
– 프로그램의 이해를 돕기 위해 이전 글의 ABAP BDC 프로그램 개발을 위한 트랜잭션 리코더(Record) 방법의 BDC 처리 부분만 따로 화면 캡쳐해서 소스 코드와 서로 연결로 표시하였습니다.
LOOP로 반복 처리하지 않고 한번만 처리하는 BDC 프로그램도 많습니다.
– BDC 프로그램은 주로 파일을 업로딩해서 LOOP로 돌리며 처리하지만 아래 예제 처럼 프로그램 내에서 처리 내용을 가져와서 단건으로 처리하는 경우도 많이 있습니다.
CLEAR: BDC_TAB. REFRESH BDC_TAB.
PERFORM DYNPRO USING:
‘X’ ‘SAPLMGMM’ ‘0060’,
‘ ‘ ‘RMMG1-MATNR’ ‘3W3OGW750N’,
‘ ‘ ‘BDC_OKCODE’ ‘=ENTR’.
PERFORM DYNPRO USING:
‘X’ ‘SAPLMGMM’ ‘0070’,
‘ ‘ ‘MSICHTAUSW-KZSEL(01)’ ‘X’,
‘ ‘ ‘BDC_OKCODE’ ‘=ENTR’.
PERFORM DYNPRO USING:
‘X’ ‘SAPLMGMM’ ‘4004’,
‘ ‘ ‘MAKT-MAKTX’ ‘D16X27.4D6/CB0080N+125VN1GP #22 D16X’,
‘ ‘ ‘MARA-BISMT’ ‘300000’,
‘ ‘ ‘BDC_OKCODE’ ‘=BU’.
CALL TRANSACTION ‘MM02’ USING BDC_TAB
MODE P_MODE
UPDATE ‘S’
MESSAGES INTO MESSTAB.
|
마무리
이상으로 ABAP BDC 프로그램의 CALL TRANSACTION(실시간) 처리에 대한 예제를 간단하게 살펴보았습니다.
SAP ABAP 프로그램 개발에 있어 BDC 프로그램도 의외로 많이 개발하게 되는 프로그램 종류입니다.
※ 함께 읽으면 도움이 될 만한 다른 포스팅 글입니다.
- ABAP BDC 프로그램의 Call Transaction 처리에서 MODE와 UPDATE에 대해서 알아보기
- ABAP BDC 프로그램의 세션 처리에 의한 배치(Batch) 실행에 대한 예제
- SAP의 판매, 납품, 대금청구 문서 생성 BDC 실행 후 해당 문서번호를 가져오는 방법
- ABAP에서 일정 시간 동안 실행을 지연(Delay, Sleep) 시키는 방법 2가지
- SAP ABAP의 Runtime Error(Dump Analysis) 목록 조회 및 오류 위치 확인 방법
- SAP Query(질의)를 이용하여 프로그램 개발 없이 쉽고 빠르게 리포트 만들기 소개
♥ 이 글이 도움이 되었기를 바랍니다. ^-^
댓글로 흔적을 남겨 주세요.