ABAP
간단한 데이터 조회용 ALV 템플릿
2026.05.2841
REPORT ZALV_TEMPLATE.
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
" 더블 클릭 이벤트
METHODS on_double_click FOR EVENT double_click OF cl_salv_events_table
IMPORTING row column.
" 핫스팟 클릭 이벤트
METHODS on_link_click FOR EVENT link_click OF cl_salv_events_table
IMPORTING row column.
ENDCLASS.
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD on_double_click.
MESSAGE |[더블클릭] { row }번째 줄의 { column } 필드를 선택했습니다.| TYPE 'S'.
ENDMETHOD.
METHOD on_link_click.
MESSAGE |[핫스팟 클릭] { row }번째 줄의 { column } 필드를 선택했습니다.| TYPE 'S'.
ENDMETHOD.
ENDCLASS.
CLASS lcl_alv DEFINITION.
PUBLIC SECTION.
CLASS-METHODS display CHANGING ct_data TYPE ANY TABLE.
PRIVATE SECTION.
CLASS-DATA: go_events TYPE REF TO lcl_event_receiver.
ENDCLASS.
CLASS lcl_alv IMPLEMENTATION.
METHOD display.
TRY.
" 1. ALV 객체 생성
cl_salv_table=>factory(
IMPORTING r_salv_table = DATA(lo_alv)
CHANGING t_table = ct_data ).
" 2. 기본 툴바(정렬, 필터, 엑셀) 및 최적화
lo_alv->get_functions( )->set_all( abap_true ).
lo_alv->get_columns( )->set_optimize( abap_true ).
lo_alv->get_display_settings( )->set_striped_pattern( abap_true ).
" 3. 특정 컬럼 핫스팟 처리
DATA(lo_columns) = lo_alv->get_columns( ).
TRY.
DATA(lo_column) = CAST cl_salv_column_table( lo_columns->get_column( 'BUKRS' ) ).
lo_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
CATCH cx_salv_not_found.
ENDTRY.
" 4. 이벤트 핸들러
go_events = NEW lcl_event_receiver( ).
DATA(lo_event_trigger) = lo_alv->get_event( ).
SET HANDLER go_events->on_double_click FOR lo_event_trigger.
SET HANDLER go_events->on_link_click FOR lo_event_trigger.
" 5. 화면 출력
lo_alv->display( ).
CATCH cx_root INTO DATA(lx_root).
MESSAGE lx_root->get_text( ) TYPE 'S' DISPLAY LIKE 'E'.
ENDTRY.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
" 데이터
SELECT * FROM t001 INTO TABLE @DATA(gt_data) UP TO 50 ROWS.
" ALV 실행
lcl_alv=>display( CHANGING ct_data = gt_data ).gt_data만 원하는 데이터로 바꿔서 사용하면 된다.