SAP ABAP SALV 시리즈 5탄. 리스트 조회 화면에서 더블 클릭(Double Click)과 핫스팟(Hotspot) 이벤트를 감지하여 특정 로직을 수행하는 이벤트 핸들링 가이드를 공유합니다. 로컬 클래스를 활용한 Observer 패턴 구현법을 정리했습니다..
CONTENTS: SALV 5탄 - 이벤트 핸들링
1. 실무 적용 코드 예시 (Interactive SALV).
" 1. 글로벌 데이터 선언 (클래스 내부에서도 참조할 수 있도록 상단에 선언)
DATA: gt_flight TYPE TABLE OF sflight.
" 2. 데이터 준비 (Standard 연습용 SFLIGHT 테이블 활용)
SELECT * FROM sflight INTO TABLE gt_flight UP TO 50 ROWS.
" --- [핵심] 3. 이벤트 수신을 위한 로컬 클래스 정의 ---
" SALV는 이벤트를 처리하기 위해 별도의 핸들러 클래스가 필요합니다.
CLASS lcl_event_handler DEFINITION.
PUBLIC SECTION.
METHODS:
" 행을 더블 클릭했을 때 발생하는 이벤트
on_double_click FOR EVENT double_click OF cl_salv_events_table
IMPORTING row column,
" 핫스팟(밑줄) 설정된 셀을 클릭했을 때 발생하는 이벤트
on_link_click FOR EVENT link_click OF cl_salv_events_table
IMPORTING row column.
ENDCLASS.
CLASS lcl_event_handler IMPLEMENTATION.
METHOD on_double_click.
" 선택된 행의 데이터를 읽어와서 메시지를 출력합니다.
READ TABLE gt_flight INTO DATA(ls_row) INDEX row.
IF sy-subrc = 0.
MESSAGE |[Double Click] 항공사: { ls_row-carrid }, 항공편: { ls_row-connid }| TYPE 'I'.
ENDIF.
ENDMETHOD.
METHOD on_link_click.
" 클릭된 컬럼명을 인식하여 분기 처리가 가능합니다.
MESSAGE |핫스팟 필드 '{ column }'이 클릭되었습니다.| TYPE 'S'.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
TRY.
" 3. SALV 객체 생성
cl_salv_table=>factory(
IMPORTING r_salv_table = DATA(lo_alv)
CHANGING t_table = gt_flight
).
" 4. 특정 컬럼을 핫스팟(Hotspot) 필드로 지정
" CARRID 컬럼을 클릭 가능한 링크 형태로 변경합니다.
DATA(lo_columns) = lo_alv->get_columns( ).
TRY.
DATA(lo_col_carr) = CAST cl_salv_column_table( lo_columns->get_column( 'CARRID' ) ).
lo_col_carr->set_cell_type( if_salv_c_cell_type=>hotspot ).
CATCH cx_salv_not_found.
ENDTRY.
" --- [중요] 5. 이벤트 핸들러 인스턴스 생성 및 연결 ---
DATA(lo_events) = lo_alv->get_event( ).
DATA(lo_handler) = NEW lcl_event_handler( ).
SET HANDLER lo_handler->on_double_click FOR lo_events.
SET HANDLER lo_handler->on_link_click FOR lo_events.
" 6. 화면 출력
lo_alv->display( ).
CATCH cx_salv_msg INTO DATA(lx_msg).
MESSAGE lx_msg->get_text( ) TYPE 'E'.
ENDTRY.
2. 왜 이벤트 핸들링이 중요한가? (Business Insight)
현업에서 ALV 리스트는 단순한 결과 보고서에 그치지 않습니다. 리스트를 보던 사용자가 특정 주문 번호를 눌렀을 때 해당 주문의 상세 화면으로 이동(Drill-down)하거나, 고객 코드 위를 클릭했을 때 고객 마스터 정보를 팝업으로 띄워주는 기능은 업무 효율성을 결정짓는 핵심 요소입니다. SALV의 이벤트 핸들링은 이러한 '대화형 인터페이스'를 구축하는 가장 표준적이고 깔끔한 방법입니다.
3. 기술 상세 설명: Observer 패턴의 활용
SALV에서 이벤트를 구현하는 방식은 디자인 패턴 중 하나인 옵저버 패턴(Observer Pattern)을 기반으로 합니다. 이는 객체의 상태 변화가 발생했을 때(사용자가 클릭했을 때), 이를 구독하고 있는 다른 객체에게 알림을 보내 로직을 수행하게 만드는 방식입니다.
- 방송국(Subject): CL_SALV_EVENTS_TABLE 클래스입니다. 사용자의 클릭 이벤트를 방송합니다.
- 수신기(Observer): 우리가 작성한 로컬 클래스인 lcl_event_handler입니다. 방송되는 신호를 수신하여 준비된 메서드를 실행합니다.
- 연결(Connection): SET HANDLER 구문이 안테나 역할을 하여 방송국과 수신기를 이어줍니다.
4. 실무 트러블슈팅 및 팁 (Troubleshooting)
개발 과정에서 가장 자주 발생하는 실수와 해결 방안을 정리했습니다.
| 현상 | 해결 방법 및 원인 |
| 클릭해도 아무 반응이 없음 | 해당 컬럼에 set_cell_type이 hotspot으로 설정되었는지 확인하세요. 텍스트에 밑줄이 가야만 이벤트가 발생합니다. |
| 메서드 실행 시 덤프 발생 | 메서드 정의 시 파라미터 row와 column의 이름을 표준 정의와 동일하게 작성했는지 확인하십시오. |
5. 마치며
이번 5탄에서는 단순 조회를 넘어 시스템과 사용자가 소통하는 인터랙티브 ALV의 기초를 다졌습니다. 이 개념을 응용하면 트랜잭션 이동, 팝업 메시지 송출, 동적 데이터 변경 등 무궁무진한 기능을 구현할 수 있습니다. 다음 6탄에서는 리스트에 화려한 색상을 입혀 시각적 직관성을 높이는 'Color 최적화' 방법을 알아보겠습니다.
'ABAP > SALV' 카테고리의 다른 글
| [SALV] 7탄: 나만의 기능 구현, 툴바 버튼 추가 및 이벤트 핸들링 (0) | 2026.04.09 |
|---|---|
| [SALV] 6탄: 데이터 시각화의 정점, 컬럼 및 행 색상 변경 (Color) (0) | 2026.04.08 |
| [SALV] 4탄: 레이아웃 및 디스플레이 설정 (Variant, Title, Stripe) (0) | 2026.04.06 |
| [SALV] 3탄: 컬럼 속성 제어 (Text, Alignment, Technical) (0) | 2026.03.27 |
| [SALV] 2탄: 표준 기능 확장 (Toolbar, Selection, Sort/Filter) (0) | 2026.03.27 |