ABAP/기초

[ABAP] SAP ABAP 엑셀 템플릿 다운로드 구현 (SMW0 + DOWNLOAD_WEB_OBJECT)

셜록누나 2026. 5. 23. 18:51

개요

사용자에게 업로드용 엑셀 템플릿을 제공할 때 가장 깔끔한 방법은
SMW0에 템플릿 파일을 등록해두고 DOWNLOAD_WEB_OBJECT로 내려받는 패턴임.

 

1단계 — SMW0 템플릿 등록

SMW0 트랜잭션 → Binary Data 선택 → 업로드
등록 후 Object ID를 기억해둠 (예: ZPE3QM_EXCEL)

SAP는 등록된 파일 정보를 WWWDATA 테이블에 저장함.

컬럼설명

OBJID Object ID (SMW0 등록명)
RELID 데이터 종류 구분

 

 

2단계 — 코드 구현

① WWWDATA에서 키 조회

 
 
abap
DATA ls_key TYPE wwwdatatab.

SELECT SINGLE *
  INTO CORRESPONDING FIELDS OF ls_key
  FROM wwwdata
 WHERE objid = 'ZPE3QM_EXCEL'.

IF sy-subrc NE 0.
  MESSAGE s000 WITH '엑셀 템플릿 Object를 찾을 수 없습니다.' DISPLAY LIKE 'E'.
  EXIT.
ENDIF.

SMW0에 등록된 파일의 메타정보를 가져옴.
sy-subrc NE 0 이면 SMW0 미등록 상태 → 방어 처리 필수.


② 저장 경로 팝업

 
 
abap
DATA: lv_filename    TYPE string,
      lv_path        TYPE string,
      lv_fullpath    TYPE string,
      lv_user_action TYPE i.

CALL METHOD cl_gui_frontend_services=>file_save_dialog
  EXPORTING
    default_extension = 'XLSX'
    default_file_name = '검수결과_업로드_템플릿.xlsx'
    file_filter       = 'Excel 파일 (*.xlsx)|*.xlsx|'
  CHANGING
    filename          = lv_filename
    path              = lv_path
    fullpath          = lv_fullpath
    user_action       = lv_user_action
  EXCEPTIONS
    OTHERS            = 1.

" 취소 클릭 시 중단
IF lv_user_action = cl_gui_frontend_services=>action_cancel.
  EXIT.
ENDIF.

file_save_dialog는 OS 기본 저장 대화상자를 띄움.
사용자가 취소(action_cancel)하면 다운로드 없이 종료.


③ 파일 다운로드

 
 
abap
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
  EXPORTING
    key         = ls_key
    destination = CONV rlgrap-filename( lv_fullpath ).

MESSAGE s000 WITH '검수결과 업로드 템플릿이 다운로드되었습니다.'.

DOWNLOAD_WEB_OBJECT가 SMW0 오브젝트를 지정 경로에 바이너리로 저장.
destination은 rlgrap-filename 타입(CHAR128)이므로 CONV로 변환 필요.


전체 흐름

 
 
SMW0 등록 (ZPE3QM_EXCEL)
    │
    │ SELECT SINGLE → WWWDATA
    ▼
ls_key (파일 메타정보)
    │
    │ file_save_dialog → 사용자 경로 선택
    ▼
lv_fullpath (저장 경로)
    │
    │ DOWNLOAD_WEB_OBJECT
    ▼
로컬 PC에 XLSX 저장

전체코드

  DATA : lv_filename    TYPE string,
         lv_path        TYPE string,
         lv_fullpath    TYPE string,
         lv_user_action TYPE i,
         ls_key         TYPE wwwdatatab.

  SELECT SINGLE *
    INTO CORRESPONDING FIELDS OF ls_key
    FROM wwwdata
   WHERE objid = 'ZPE3QM_EXCEL'.

  IF sy-subrc NE 0.
    MESSAGE s000 WITH '엑셀 템플릿 Object를 찾을 수 없습니다.' DISPLAY LIKE 'E'.
    EXIT.
  ENDIF.

  CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
      default_extension = 'XLSX'
      default_file_name = '검수결과_업로드_템플릿.xlsx'
      file_filter       = 'Excel 파일 (*.xlsx)|*.xlsx|'
    CHANGING
      filename          = lv_filename
      path              = lv_path
      fullpath          = lv_fullpath
      user_action       = lv_user_action
    EXCEPTIONS
      OTHERS            = 1.

  IF lv_user_action = cl_gui_frontend_services=>action_cancel.
    EXIT.
  ENDIF.

  CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
    EXPORTING
      key         = ls_key
      destination = CONV rlgrap-filename( lv_fullpath ).

  MESSAGE s000 WITH '검수결과 업로드 템플릿이 다운로드되었습니다.'.

 

'ABAP > 기초' 카테고리의 다른 글

[ABAP] ALV 불필요한 툴바 버튼 제거하는법  (0) 2026.05.23
[ABAP] 도메인 텍스트 매핑  (0) 2026.05.23