본문 바로가기
ABAP 문법 & 기법

[SAP ABAP] 사용자 폴더 경로 선택 — CL_GUI_FRONTEND_SERVICES=>DIRECTORY_BROWSE 사용법

by Song.sh 2026. 5. 13.

ABAP 프로그램에서 파일을 저장하거나 zip을 풀거나 일괄 처리할 때 "사용자가 폴더를 직접 골라서 알려줘야 하는 경우" 가 있습니다. 매번 화면 파라미터로 텍스트 경로를 직접 입력받기는 불편하고, 오타도 나기 쉽습니다.

 

이럴 때 사용하는 게 SAP 표준 클래스 CL_GUI_FRONTEND_SERVICESDIRECTORY_BROWSE 메서드입니다. Windows 표준 "폴더 찾아보기" 다이얼로그를 띄우고, 사용자가 선택한 폴더의 경로를 변수로 돌려줍니다. 한 줄짜리 호출이라 코드도 짧습니다.

 

이 글은 DIRECTORY_BROWSE기본 사용법 + 기본 경로 지정(바탕화면 자동 시작) + 관련 다이얼로그 API 비교 를 정리한 메모입니다.


핵심 원리

DIRECTORY_BROWSE 는 입출력 방향이 단순합니다. CHANGING 파라미터 한 개만 있고, 사용자가 다이얼로그에서 폴더를 고르고 확인을 누르면 그 값이 변수에 채워집니다.

파라미터 방향 설명
window_title IMPORTING (옵션) 다이얼로그 상단 제목 텍스트
initial_folder IMPORTING (옵션) 다이얼로그가 처음 열릴 때 기본 경로
selected_folder CHANGING 사용자가 선택한 폴더 경로가 담겨 돌아옴 (STRING)

같은 클래스의 다른 다이얼로그 메서드들과 비교하면 용도가 명확해집니다.

메서드 용도
DIRECTORY_BROWSE 폴더(디렉토리) 선택 다이얼로그
FILE_OPEN_DIALOG 파일 열기 다이얼로그 (기존 파일 선택)
FILE_SAVE_DIALOG 파일 저장 다이얼로그 (저장할 파일명·경로 지정)
GET_DESKTOP_DIRECTORY 현재 사용자 바탕화면 경로 조회 (다이얼로그 없음)

1단계 — 기본 사용법

가장 단순한 형태입니다. 변수 하나 선언하고 메서드를 호출하면 끝.

" 사용자가 선택한 경로를 찾아주는 메소드
DATA: p_path TYPE string.

cl_gui_frontend_services=>directory_browse(
  CHANGING selected_folder = p_path ).

WRITE: p_path.

 

호출 시점에 Windows 표준 "파일 또는 폴더 찾아보기" 다이얼로그가 뜹니다.

사용자가 폴더를 클릭하고 확인을 누르면 p_path 변수에 절대 경로가 담깁니다.


2단계 — 결과 활용

p_path 에 담긴 경로는 일반 문자열이므로 그대로 후속 파일 처리 로직에 넘기면 됩니다.

" 예: zip 압축 해제, 파일 저장 등 후속 작업
IF p_path IS NOT INITIAL.
  " p_path 와 파일명 결합
  DATA(lv_fullpath) = |{ p_path }\\export_file.xlsx|.

  " 이후 cl_gui_frontend_services=>gui_download 등으로 활용
ENDIF.

사용자가 다이얼로그에서 취소 를 누르면 p_path 는 비어 있는 상태로 돌아오므로, 후속 처리 전에 IS NOT INITIAL 체크를 넣는 게 안전.


3단계 — 기본 경로를 바탕화면으로 자동 지정

매번 사용자가 폴더를 처음부터 탐색하지 않도록, initial_folder 파라미터에 시작 경로를 미리 지정할 수 있습니다. 바탕화면을 기본값으로 쓰고 싶으면 GET_DESKTOP_DIRECTORY 와 조합합니다.

DATA: desktopdirectory TYPE string,
      p_path           TYPE string.

" 1) 현재 사용자의 바탕화면 경로 조회
CALL METHOD cl_gui_frontend_services=>get_desktop_directory
  CHANGING
    desktop_directory = desktopdirectory.

" 2) 바탕화면을 기본 폴더로 폴더 다이얼로그 호출
cl_gui_frontend_services=>directory_browse(
  EXPORTING
    window_title    = '저장할 폴더 선택'
    initial_folder  = desktopdirectory
  CHANGING
    selected_folder = p_path ).

WRITE: p_path.

 

이렇게 호출하면 다이얼로그가 처음 열렸을 때 자동으로 바탕화면이 펼쳐져 있어, 사용자 입장에서는 한두 번만 클릭하면 됩니다.

관련 폴더 조회 메서드 반환 경로
GET_DESKTOP_DIRECTORY 사용자 바탕화면
GET_TEMP_DIRECTORY 시스템 TEMP 폴더
GET_USER_DIRECTORY 사용자 홈 디렉토리
GET_SAPGUI_WORKDIR SAP GUI 작업 디렉토리

상황에 맞춰 기본 경로를 잡아두면 사용성 차이가 크게 납니다.


관련 다이얼로그 API — 폴더 vs 파일

비슷한 용도의 메서드와 헷갈리지 않도록 차이를 정리합니다.

" 1) 폴더 선택 — DIRECTORY_BROWSE
cl_gui_frontend_services=>directory_browse(
  CHANGING selected_folder = p_path ).

" 2) 파일 열기 — FILE_OPEN_DIALOG (기존 파일 골라서 읽기)
DATA: lt_files TYPE filetable,
      lv_rc    TYPE i.

cl_gui_frontend_services=>file_open_dialog(
  EXPORTING
    window_title = '파일 선택'
  CHANGING
    file_table   = lt_files
    rc           = lv_rc ).

" 3) 파일 저장 — FILE_SAVE_DIALOG (저장할 파일명·경로 지정)
DATA: lv_filename TYPE string,
      lv_path     TYPE string,
      lv_fullpath TYPE string,
      lv_action   TYPE i.

cl_gui_frontend_services=>file_save_dialog(
  EXPORTING
    default_extension = 'xlsx'
    default_file_name = 'export'
    file_filter       = |MS Excel (*.xlsx)\|*.xlsx\||
                     && |{ cl_gui_frontend_services=>filetype_all }|
  CHANGING
    filename          = lv_filename
    path              = lv_path
    fullpath          = lv_fullpath
    user_action       = lv_action ).
사용 시나리오 선택할 메서드
결과 파일 여러 개를 저장할 폴더 받기 DIRECTORY_BROWSE (폴더만 받고 파일명은 코드에서 결정)
사용자가 업로드할 기존 파일 선택 FILE_OPEN_DIALOG
사용자가 저장할 파일명·경로 직접 지정 FILE_SAVE_DIALOG

흔히 빠뜨리는 함정

사용자가 취소했을 때 분기 없음

확인을 누르지 않고 다이얼로그를 닫으면 selected_folder 가 비어 있는 채로 돌아옵니다. 후속 로직이 빈 경로로 파일을 쓰려고 시도하면 에러 발생. IS NOT INITIAL 체크 필수.

경로 끝 슬래시 처리

반환값은 일반적으로 폴더명까지만 들어 있고 뒤에 백슬래시는 붙지 않습니다. 파일명을 이어 붙일 때 CONCATENATE p_path '' lv_filename 또는 string template |{ p_path }\{ lv_filename }| 형태로 구분자를 명시.

서버 사이드 실행 시 동작 불가

CL_GUI_FRONTEND_SERVICES 는 SAP GUI(클라이언트 PC)에서만 동작합니다. 배치 잡(SM37) 등 GUI가 없는 환경에서 호출하면 CNTL_ERROR 같은 예외가 발생. 서버에서 폴더 처리가 필요하면 OPEN DATASET + AL11(서버 디렉토리)를 사용.

initial_folder 경로 존재 확인 안 함

존재하지 않는 경로를 initial_folder 로 넘기면 다이얼로그가 디폴트 위치로 열립니다. 의도한 시작 위치가 아니면 사용자 혼동. 미리 directory_exist 메서드로 검증 권장.

한글·공백 포함 경로 — 파일 처리 시점 이슈

다이얼로그가 반환하는 경로 자체는 한글·공백을 정상적으로 다룹니다. 다만 후속 단계에서 OS 명령어로 처리하거나 외부 라이브러리에 넘길 때 경로를 따옴표로 감싸지 않으면 깨질 수 있음.


요약

단계 목적 호출
1 폴더 선택 다이얼로그 호출 cl_gui_frontend_services=>directory_browse( CHANGING selected_folder = p_path )
2 결과 검증·활용 IF p_path IS NOT INITIAL + 후속 파일 처리
3 기본 경로 바탕화면 지정 GET_DESKTOP_DIRECTORY + initial_folder
4 파일 다이얼로그와 구분 FILE_OPEN_DIALOG · FILE_SAVE_DIALOG · DIRECTORY_BROWSE 용도별 선택

DIRECTORY_BROWSE 는 한 줄짜리 호출이지만, initial_folderGET_DESKTOP_DIRECTORY 조합·취소 분기 처리만 함께 잡아두면 사용자 입장에서 매끄럽게 동작하는 폴더 선택 기능을 만들 수 있습니다. 파일 단위로 골라야 하는 시나리오와 헷갈리지 않게, 폴더가 필요하면 DIRECTORY_BROWSE, 파일이 필요하면 FILE_OPEN_DIALOG/FILE_SAVE_DIALOG 식으로 기억해두면 됩니다.


Disclaimer — 이 포스트는 실무 정리 노트를 바탕으로 AI 보조로 정리되었습니다. CL_GUI_FRONTEND_SERVICES 는 SAP GUI 환경에서만 동작하며 서버 배치에서는 사용할 수 없습니다. SAP 버전·Windows 버전에 따라 다이얼로그 모양과 옵션이 다를 수 있으므로 운영 환경 적용 전 개발 시스템에서 확인하시기 바랍니다.