[ABAP] ALV 특정 컬럼에 서치헬프 적용하기 (REGISTER_F4_FOR_FIELDS)

몰라·2025년 4월 6일

ABAP

목록 보기
7/13

ALV는 기본적으로 딕셔너리 기반 F4 헬프를 자동으로 처리하지 않는다.
ALV F4 기능을 활성화하려면 개발자가 명시적으로 해당 필드를 등록해줘야 함.
이걸 해주는 메소드가 REGISTER_F4_FOR_FIELDS 임.

도메인에 서치헬프 연결되어있으면 자동으로 서치헬프 보임.

처음에 정리했었는데 적용안되서 보니까 필드카탈로그 설정하는것을 까먹음;;


내가 원하는 값 리스트를 팝업으로 띄우고 해당 셀에 반영하고 싶을 때F4IF_INT_TABLE_VALUE_REQUEST를 활용하여, ALV 편집 필드에서 F4 팝업을 커스터마이징하는 방법을 단계별로 정리


✅ ALV F4 도움말 커스터마이징: 전체 구현 단계 (F4IF_INT_TABLE_VALUE_REQUEST 활용)

단계설명코드/비고
① 필드카탈로그 설정F4 도움말을 적용할 필드에 EDITF4AVAILABLE 속성 설정ls_fieldcat-edit = 'X', ls_fieldcat-f4availabl = 'X'
② F4 필드 등록REGISTER_F4_FOR_FIELDS 메서드로 F4 필드 수동 등록필드명을 명시적으로 등록해야 ON_F4 이벤트가 호출됨
③ 이벤트 핸들러 클래스 정의 및 등록ON_F4 이벤트용 핸들러 메서드 구현 후 SET HANDLER로 연결SET HANDLER lo_handler->on_f4 FOR gr_alv_grid
④ ON_F4 이벤트 처리F4 눌렸을 때 F4IF_INT_TABLE_VALUE_REQUEST로 팝업 띄우고 선택값 받아오기내부 테이블 lt_values를 팝업 소스로 사용
⑤ 표준 F4 동작 막기er_event_data->m_event_handled = 'X'로 SAP 기본 F4 팝업 차단생략 시 SAP 기본 F4 팝업이 같이 뜸
⑥ ALV 내부 테이블에 값 반영선택한 값을 gt_alv_data에 반영 후 refresh_table_display 호출MODIFY, READ TABLE, CALL METHOD -> refresh_table_display

🔧 1. 필드카탈로그 설정

ALV의 VARIANT 필드를 편집 가능하고 F4 도움말이 가능하도록 설정한다.

ls_fieldcat-fieldname    = 'VARIANT'.
ls_fieldcat-edit         = 'X'.
ls_fieldcat-f4availabl   = 'X'.
ls_fieldcat-seltext_m    = 'Variant'.
APPEND ls_fieldcat TO lt_fieldcat.

🔧 2. F4 필드 등록 (register_f4_for_fields)

F4 도움말을 적용하고 싶은 필드를 명시적으로 등록해야 ON_F4 이벤트가 작동한다.

DATA: lt_f4 TYPE lvc_t_f4,
      ls_f4 TYPE lvc_s_f4.

ls_f4-fieldname = 'VARIANT'.
ls_f4-register  = abap_true.
APPEND ls_f4 TO lt_f4.

CALL METHOD gr_alv_grid->register_f4_for_fields
  EXPORTING it_f4 = lt_f4.

🔧 3. F4 이벤트 핸들러 클래스 정의

F4 키가 눌렸을 때 실행될 커스터마이징 로직을 구현한다.
-> Standard Variant list를 보여주고자 하는 경우에는 이 부분에 RS_VARIANT_CATALOG 펑션을 사용해서 값을 받아오면 된다.

CLASS lcl_event_handler DEFINITION.
  PUBLIC SECTION.
    METHODS: on_f4 FOR EVENT onf4 OF cl_gui_alv_grid
             IMPORTING e_fieldname es_row_no er_event_data et_bad_cells.
ENDCLASS.

CLASS lcl_event_handler IMPLEMENTATION.

  METHOD on_f4.
    DATA: lt_variant_values TYPE TABLE OF ddshretval,
          lt_values         TYPE TABLE OF string,
          lv_variant        TYPE string,
          ls_row            TYPE your_alv_structure.

    IF e_fieldname = 'VARIANT'.

      " 1. 팝업에 보여줄 내부 테이블 준비
      APPEND 'ZVARIANT_01' TO lt_values.
      APPEND 'ZVARIANT_02' TO lt_values.
      APPEND 'ZVARIANT_03' TO lt_values.

      " 2. F4 팝업 호출
      CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
        EXPORTING
          retfield        = 'VALUE'
          dynpprog        = sy-repid
          dynpnr          = sy-dynnr
          dynprofield     = 'DUMMY'
          value_org       = 'S'
        TABLES
          value_tab       = lt_values
          return_tab      = lt_variant_values.

      " 3. 선택값 ALV 내부 테이블에 반영
      READ TABLE lt_variant_values INTO DATA(ls_retval) INDEX 1.
      IF sy-subrc = 0 AND ls_retval-fieldval IS NOT INITIAL.

        READ TABLE gt_alv_data INTO ls_row INDEX es_row_no-row_id.
        IF sy-subrc = 0.
          ls_row-variant = ls_retval-fieldval.
          MODIFY gt_alv_data FROM ls_row INDEX es_row_no-row_id.
          CALL METHOD gr_alv_grid->refresh_table_display.
        ENDIF.

      ENDIF.

      " 4. SAP 기본 F4 팝업 차단
      er_event_data->m_event_handled = abap_true.
    ENDIF.

  ENDMETHOD.

ENDCLASS.

🔧 4. 이벤트 핸들러 연결

DATA: go_event_handler TYPE REF TO lcl_event_handler.

CREATE OBJECT go_event_handler.
SET HANDLER go_event_handler->on_f4 FOR gr_alv_grid.

✅ 실행 결과 요약

  • VARIANT 필드에서 F4 누르면 커스터마이징 팝업이 뜬다
  • 사용자가 선택한 값이 해당 셀에 자동 반영된다
  • ALV가 자동으로 리프레시 된다

🧠 참고 팁

  • 팝업에 여러 필드를 보여주고 싶다면 value_tab을 구조로 만들고, with_tab_and_label = 'X' 설정하면 된다.
  • 선택 결과는 return_tab에 들어오며, 첫 번째 항목을 기준으로 반영하면 됨.
  • SAP 표준 Variant 목록(RS_VARIANT_CATALOG) 대신, 커스터마이징된 값 목록을 제어하고 싶을 때 유용하다.
profile
일주일 동안 헤맨 흔적을 정리하러 왔습니다

0개의 댓글