본문 바로가기
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만 원하는 데이터로 바꿔서 사용하면 된다.

댓글

0

아직 댓글이 없어요.