ABAP BDC 프로그램의 CALL TRANSACTION(실시간) 처리에 대한 예제

이전 글에서 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 처리 부분만 따로 화면 캡쳐해서 소스 코드와 서로 연결로 표시하였습니다.

ABAP BDC 프로그램의 CALL TRANSACTION(실시간) 처리에 대한 예제

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 프로그램도 의외로 많이 개발하게 되는 프로그램 종류입니다.





이 글이 도움이 되었기를 바랍니다. ^-^
댓글로 흔적을 남겨 주세요.

답글 남기기