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

[SAP ABAP] cl_abap_browser=>show_url — SAP GUI 안에서 웹 브라우저(URL) 띄우는 법

by Song.sh 2026. 5. 15.

SAP GUI 화면 안에서 외부 웹 페이지(예: 회사 위키·매뉴얼·외부 API 결과 페이지·구글 도움말 등) 를 띄우고 싶을 때, 사용자가 별도 브라우저를 열고 URL 을 복붙하게 만드는 건 사용성이 떨어집니다. SAP 표준 클래스 cl_abap_browser 한 줄이면 SAP GUI 내부에 모달 팝업 형태로 웹 브라우저 창을 띄울 수 있습니다.

 

핵심은 cl_abap_browser=>show_url( url = '...' ). 추가 파라미터로 창 크기·모달 여부·내비게이션 버튼·인쇄 허용 등을 조절할 수 있고, HTML 문자열을 직접 띄우는 show_html 메서드도 같은 클래스가 제공합니다. 화면 컨테이너에 임베드해 ALV 옆에 붙이는 용도도 가능.

 

이 글은 cl_abap_browser=>show_url 한 줄 호출부터 옵션 파라미터·HTML 직접 렌더링·컨테이너 임베드·관련 대안 비교 까지 한 번에 정리한 메모입니다.


핵심 원리

SAP GUI 안에서 웹 브라우저(또는 HTML) 을 띄우는 방법 4가지 비교.

방법 특징 언제 쓰나
cl_abap_browser=>show_url SAP GUI 내부 모달/모달리스 팝업으로 URL 렌더 가장 빠르고 간단 — 한 줄로 끝
cl_abap_browser=>show_html HTML 문자열을 직접 받아 렌더 (URL 불필요) 동적 생성 리포트·미리보기 페이지를 보여줄 때
cl_gui_html_viewer 화면 컨테이너에 영구 임베드 (저수준 API) ALV 옆에 항상 띄워두고 싶을 때 (다이얼로그 프로그램)
CALL FUNCTION 'CALL_BROWSER' 사용자 OS 의 기본 브라우저(Chrome/Edge) 를 열어 URL 표시 SAP GUI 밖에서 보여주고 싶을 때 (외부 사이트 링크 등)

핵심 트레이드오프: 간단한 외부 URL 한 번 보여주기cl_abap_browser=>show_url 이 표준. 컨테이너에 영구 임베드해서 ALV 옆에 띄워두려면 cl_gui_html_viewer 가 더 적합합니다. 외부 OS 브라우저로 띄울 일이라면 CALL_BROWSER.


1단계 — cl_abap_browser=>show_url 한 줄 호출

가장 단순한 형태. URL 만 넘기면 SAP GUI 내부 팝업 창에 페이지가 뜹니다.

cl_abap_browser=>show_url(
  url   = 'https://www.google.com'
  title = 'Google 검색' ).

 

이 한 줄만으로:

  • SAP GUI 안에 새 창이 열리고
  • 지정한 URL 의 페이지가 IE 엔진(또는 Edge WebView2) 으로 렌더링되며
  • 사용자가 닫기 전까지 모달로 표시

2단계 — 옵션 파라미터 상세

show_url 은 풍부한 파라미터를 제공합니다. 자주 쓰는 것 정리.

cl_abap_browser=>show_url(
  EXPORTING
    url          = 'www.google.de'                       " URL
    title        = 'abap_browser'                        " Window Title
    size         = cl_abap_browser=>medium               " Size (S, M, L, XL)
    modal        = abap_true                             " Display as Modal Dialog Box
    printing     = abap_false                            "
    buttons      = abap_true                             " Navigation Keys navigate...
    format       = cl_abap_browser=>landscape            " Landscape/portrait format
    position     = cl_abap_browser=>topleft              " Position
*   container    =                                       " Abstract Container for GUI Controls
    context_menu = abap_false                            " Display context menu in browser
).

 

각 파라미터 의미.

파라미터 값 예시 설명
url 'https://...' 표시할 페이지 주소 (필수). https 권장
title '사용자 매뉴얼' 팝업 창 타이틀바 텍스트
size small·medium·large·xlarge 팝업 크기 (클래스 상수 사용)
modal abap_true / abap_false true 면 모달(뒤 화면 비활성), false 면 모달리스
buttons abap_true 뒤로/앞으로 내비게이션 버튼 표시 여부
printing abap_false Ctrl+P 인쇄 기능 허용 여부
format landscape / portrait 가로/세로 비율 (가로형 권장)
position topleft·topright·center 화면상 팝업 위치 (클래스 상수)
container REF TO cl_gui_container 지정하면 팝업 대신 컨테이너에 임베드
context_menu abap_false 우클릭 컨텍스트 메뉴 허용 (보안상 false 권장)

핵심 포인트:

  • size·format·position클래스 상수 로 받음 — 직접 문자열 넣지 말 것
  • modal = abap_true 가 기본 — 모달리스로 하려면 명시적으로 false
  • context_menu = abap_false 가 안전 — 사용자가 "소스 보기" 등으로 내부 코드 접근 차단

3단계 — HTML 문자열 직접 렌더링 (show_html)

외부 URL 이 아닌 동적 생성 HTML 을 보여주고 싶을 때.

DATA: lt_html TYPE TABLE OF char255,
      lv_size TYPE i.

APPEND '<html><head><title>미리보기</title></head><body>' TO lt_html.
APPEND '<h1>주문 요약</h1>'                                  TO lt_html.
APPEND |<p>주문번호: <strong>{ lv_ebeln }</strong></p>|     TO lt_html.
APPEND |<p>총 금액: <strong>{ lv_amount NUMBER = USER }</strong></p>| TO lt_html.
APPEND '</body></html>'                                     TO lt_html.

cl_abap_browser=>show_html(
  EXPORTING
    title    = '주문 미리보기'
    size     = cl_abap_browser=>large
    modal    = abap_true
    html_string = lt_html ).

show_html 은 string 또는 string table 둘 다 받으므로, 동적으로 조립한 HTML 페이지를 그대로 표시할 수 있습니다. PDF/엑셀 외에 가벼운 리포트를 사용자에게 보여줄 때 유용.


4단계 — 화면 컨테이너에 임베드 (다이얼로그 프로그램)

팝업이 아닌 ALV 옆 / 화면 일부에 영구 임베드하려면 container 파라미터를 전달.

DATA: lo_container TYPE REF TO cl_gui_custom_container.

" Screen 의 Custom Container 'CC_BROWSER' 에 연결
CREATE OBJECT lo_container
  EXPORTING
    container_name = 'CC_BROWSER'.

cl_abap_browser=>show_url(
  url       = 'https://internal.example.com/manual'
  container = lo_container
  modal     = abap_false ).

이 방식이면 SE51 Screen Painter 에서 만든 Custom Container 영역 안에 브라우저가 박혀 ALV 와 나란히 동작합니다. 다만 화면 컨테이너 임베드가 필요한 본격적인 케이스라면 cl_gui_html_viewer 가 이벤트 처리·소스 동적 변경 등에서 더 유연합니다.


흔히 빠뜨리는 함정

URL 프로토콜 누락

'google.com' 처럼 프로토콜 없이 넘기면 일부 환경에서 렌더 실패. 'https://google.com' 식으로 항상 명시.

size·position 에 문자열 직접 사용

size = 'M' 같이 직접 문자열 넣으면 동작 안 함. 반드시 클래스 상수 cl_abap_browser=>medium 사용.

modal = abap_true 인데 닫혀도 다음 화면 안 뜸

모달 팝업이 닫힌 다음 후속 ABAP 코드가 실행됩니다. 만약 후속 화면이 안 뜨면 cl_abap_browser=>close / Screen 0 전환 등 명시적으로 처리.

HTTPS 인증서 오류

내부망 사이트가 자체 서명 인증서를 쓰면 SAP GUI 내장 브라우저가 거부할 수 있음. STRUSTSSO2 에 인증서 신뢰 등록 또는 HTTP 로 우회.

IE 엔진 의존성

Windows 기반 SAP GUI 의 내장 브라우저는 IE 컴포넌트를 사용. 모던 자바스크립트(ES6+) 가 안 돌 수 있음. 복잡한 SPA 페이지를 띄울 거면 CALL_BROWSER 로 OS 기본 브라우저에서 띄우는 게 안전.

context_menu = abap_true 의 보안 위험

활성화하면 사용자가 우클릭으로 "소스 보기" 가능 → 내부 HTML/URL 패턴 노출. 운영 환경은 abap_false 권장.

container 임베드 시 메모리 해제 누락

cl_gui_custom_container 객체는 화면 종료 시 free( ) 호출 안 하면 GUI 컨트롤 누수. PAI 의 EXIT 처리에서 명시적 해제.

URL 에 한글/특수문자 — URL 인코딩

쿼리 스트링에 한글이 들어가면 깨질 수 있음. cl_http_utility=>escape_url( ) 로 사전 인코딩.


전체 코드 — 복사용 통합본

위 단계를 하나의 ABAP 프로그램으로 합친 통합본입니다. SE38 에 그대로 복사해서 활성화하면 동작합니다(인터넷 접속 가능한 환경 필요).

REPORT zexample_abap_browser.

PARAMETERS:
  p_url  TYPE string LOWER CASE DEFAULT 'https://www.google.com',
  p_mode TYPE c LENGTH 1 DEFAULT '1'.
  " 1 = show_url 기본, 2 = show_url 옵션 풀세팅, 3 = show_html

START-OF-SELECTION.

  CASE p_mode.

* ---------------------------------------------------------
* 1) 가장 단순한 형태 — URL 한 줄 호출
* ---------------------------------------------------------
    WHEN '1'.
      cl_abap_browser=>show_url(
        url   = p_url
        title = 'Web Browser' ).

* ---------------------------------------------------------
* 2) 옵션 풀세팅 — size/modal/buttons/position/context_menu
* ---------------------------------------------------------
    WHEN '2'.
      cl_abap_browser=>show_url(
        EXPORTING
          url          = p_url
          title        = 'Web Browser - Full Options'
          size         = cl_abap_browser=>large       " S/M/L/XL
          modal        = abap_true                    " 모달 팝업
          printing     = abap_false                   " 인쇄 차단
          buttons      = abap_true                    " 뒤로/앞으로 버튼
          format       = cl_abap_browser=>landscape   " 가로형
          position     = cl_abap_browser=>topleft     " 좌상단
          context_menu = abap_false ).                " ★ 우클릭 차단 (보안)

* ---------------------------------------------------------
* 3) show_html — HTML 문자열 직접 렌더
* ---------------------------------------------------------
    WHEN '3'.
      DATA: lt_html  TYPE TABLE OF char255,
            lv_now   TYPE string.

      lv_now = sy-datum && ' ' && sy-uzeit.

      APPEND '<html><head><meta charset="utf-8"><title>ABAP HTML</title></head>' TO lt_html.
      APPEND '<body style="font-family:sans-serif; padding:24px;">'              TO lt_html.
      APPEND '<h1 style="color:#4338ca;">ABAP 동적 HTML 렌더링</h1>'              TO lt_html.
      APPEND |<p>현재 시각: <strong>{ lv_now }</strong></p>|                     TO lt_html.
      APPEND |<p>사용자: <strong>{ sy-uname }</strong></p>|                      TO lt_html.
      APPEND |<p>시스템: <strong>{ sy-sysid }</strong></p>|                      TO lt_html.
      APPEND '</body></html>'                                                    TO lt_html.

      cl_abap_browser=>show_html(
        EXPORTING
          title       = 'ABAP HTML 미리보기'
          size        = cl_abap_browser=>large
          modal       = abap_true
          html_string = CONV string( REDUCE string(
                          INIT s = ``
                          FOR <ln> IN lt_html
                          NEXT s = s && <ln> ) ) ).

    WHEN OTHERS.
      MESSAGE 'p_mode 는 1/2/3 중 하나' TYPE 'E'.
  ENDCASE.

* ※ 참고:
*   - size/position/format 은 반드시 클래스 상수 사용
*   - HTTPS 인증서 문제 시 STRUSTSSO2 에 등록
*   - context_menu = abap_false 가 보안상 안전
*   - 복잡한 SPA(React/Vue 등) 페이지는 CALL_BROWSER 로 OS 브라우저 권장

요약

단계 처리 핵심
1 한 줄 호출 cl_abap_browser=>show_url( url = '...' ) — 즉시 모달 팝업
2 옵션 파라미터 size·modal·buttons·position·context_menu 등 (클래스 상수)
3 HTML 직접 렌더 show_html 로 동적 생성한 HTML 문자열 표시
4 컨테이너 임베드 container 파라미터로 Custom Container 안에 표시
5 주의 HTTPS 우선 · IE 엔진 한계 · context_menu = false · URL 인코딩

SAP GUI 내부에서 외부 URL 또는 동적 HTML 을 보여주는 가장 간단한 방법은 cl_abap_browser=>show_url 한 줄 호출입니다. 옵션 파라미터로 모달·크기·내비게이션 버튼·우클릭 차단 등을 세밀히 제어할 수 있고, show_html 로 ABAP 에서 만든 HTML 을 그대로 띄울 수도 있습니다. 본격적인 화면 임베드가 필요하면 cl_gui_html_viewer, OS 기본 브라우저로 열고 싶으면 CALL_BROWSER 로 분기하는 게 표준 패턴입니다.


Disclaimer — 이 포스트는 실무 정리 노트를 바탕으로 AI 보조로 정리되었습니다. cl_abap_browser·cl_gui_html_viewer·CALL_BROWSER 는 SAP NetWeaver 표준에 포함되어 있으며 시스템 버전 의존 없이 동작합니다. Windows 기반 SAP GUI 의 내장 브라우저는 IE 컴포넌트 기반이므로 최신 JS 기능에 한계가 있을 수 있고, HTTPS 자체 서명 인증서는 STRUSTSSO2 에 사전 등록이 필요합니다. 운영 적용 전 보안(context_menu 차단) 과 인증서 신뢰 설정을 충분히 검증하시기 바랍니다.