ABAP 프로그램에서 파일을 저장하거나 zip을 풀거나 일괄 처리할 때 "사용자가 폴더를 직접 골라서 알려줘야 하는 경우" 가 있습니다. 매번 화면 파라미터로 텍스트 경로를 직접 입력받기는 불편하고, 오타도 나기 쉽습니다.
이럴 때 사용하는 게 SAP 표준 클래스 CL_GUI_FRONTEND_SERVICES 의 DIRECTORY_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_folder 와 GET_DESKTOP_DIRECTORY 조합·취소 분기 처리만 함께 잡아두면 사용자 입장에서 매끄럽게 동작하는 폴더 선택 기능을 만들 수 있습니다. 파일 단위로 골라야 하는 시나리오와 헷갈리지 않게, 폴더가 필요하면 DIRECTORY_BROWSE, 파일이 필요하면 FILE_OPEN_DIALOG/FILE_SAVE_DIALOG 식으로 기억해두면 됩니다.
Disclaimer — 이 포스트는 실무 정리 노트를 바탕으로 AI 보조로 정리되었습니다. CL_GUI_FRONTEND_SERVICES 는 SAP GUI 환경에서만 동작하며 서버 배치에서는 사용할 수 없습니다. SAP 버전·Windows 버전에 따라 다이얼로그 모양과 옵션이 다를 수 있으므로 운영 환경 적용 전 개발 시스템에서 확인하시기 바랍니다.