SAP ABAP Custom Search Help (CL_GUI_ALV_GRID)

ALV Grid 화면에서, 실제 코딩을 통해 Search Help를 만드는 소스코드를 공유합니다.

1. fieldcatalog 추가

Edit/f4availabl = 'X'

2. Event Definition

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
                e_display.
....
ENDCLASS.

3. Set Event Handler

DATA: go_event_receiver TYPE REF TO lcl_def_receiver.
CALL METHOD go_grid->register_edit_event
  EXPORTING 
    i_event_id = cl_gui_alv_grid=>mc_evt_modified.

CALL METHOD go_grid->register_edit_event
  EXPORTING
    i_event_id = cl_gui_alv_grid=>mc_evt_enter.

* Event Handler 등록
CREATE OBJECT go_event_receiver.
SET HANDLER :
  go_event_receiver->handle_on_f4_1st FOR go_grid.

PERFORM register_f4_fields.    "set cells with search help

FORM register_f4_fields .
  DATA: lt_f4      TYPE lvc_t_f4 WITH HEADER LINE.
  DATA: lt_f4_data TYPE lvc_s_f4.

  lt_f4_data-fieldname = 'REPGROUP'. <--- Search Help 대상 Itab Field.
  lt_f4_data-register = 'X' .
*  lt_f4_data-getbefore = 'X' .
  lt_f4_data-chngeafter  ='X'.
  INSERT lt_f4_data INTO TABLE lt_f4.

  CALL METHOD go_grid->register_f4_for_fields
    EXPORTING
      it_f4 = lt_f4[].

ENDFORM.                    " REGISTER_F4_FIELDS

4. Implementation

    METHOD handle_on_f4_1st.

    PERFORM handle_on_f4_1st_part USING e_fieldname
                                        e_fieldvalue
                                        es_row_no
                                        er_event_data
                                        et_bad_cells
                                        e_display.


FORM handle_on_f4_1st_part  USING pv_fieldname
                                  pv_fieldvalue
                                  ps_row_no     STRUCTURE lvc_s_roid
                                  po_event_data TYPE REF TO cl_alv_event_data
                                  pt_bad_cells  "STRUCTURE lvc_s_modi
                                  p_e_display.

  DATA: BEGIN OF lt_rep OCCURS 0,
        repgroup  TYPE za_auth_rg,
        rg_name   TYPE zb_rgname,
        infoarea  TYPE zb_infoarea,
        txtlg     TYPE zb_infoareatx,
        recommand TYPE zb_recomd,
        END OF lt_rep.
  DATA: lt_return  TYPE TABLE OF ddshretval WITH HEADER LINE.
  DATA: lv_infoarea TYPE zb_infoarea.

  CASE pv_fieldname.
    WHEN 'REPGROUP'.
      READ TABLE gt_disp INDEX ps_row_no-row_id.

      CLEAR: lt_rep, lt_rep[].
      SELECT a~rg AS repgroup a~rg_text AS rg_name b~infoarea
             c~txtlg
        FROM zta0bipc3130 AS a INNER JOIN zta0bipc3131 AS b
          ON a~rg = b~rg INNER JOIN rsdareat AS c
          ON b~infoarea = c~infoarea
        INTO CORRESPONDING FIELDS OF TABLE lt_rep
       WHERE a~langu   = sy-langu
         AND a~del     = ' '
         AND b~del     = ' '
         AND c~langu   = sy-langu
         AND c~objvers = c_a.

      LOOP AT lt_rep.
        SELECT SINGLE infoarea FROM zta0bipc3520
          INTO lv_infoarea
         WHERE pgmid    = gt_disp-pgmid
           AND bocuid   = gt_disp-bocuid
           AND queryid  = gt_disp-queryid
           AND infoarea = lt_rep-infoarea.
        IF sy-subrc = 0.
          lt_rep-recommand = '○'.
        ENDIF.

        MODIFY lt_rep INDEX sy-tabix TRANSPORTING recommand.
      ENDLOOP.

      SORT lt_rep DESCENDING BY recommand."ASCENDING repgroup infoarea .

      CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
        EXPORTING
          retfield        = 'REPGROUP'
          value_org       = 'S'
        TABLES
          value_tab       = lt_rep
          return_tab      = lt_return
        EXCEPTIONS
          parameter_error = 1
          no_values_found = 2
          OTHERS          = 3.

      READ TABLE lt_return INDEX 1.
      IF sy-subrc = 0.
        gt_disp-repgroup = lt_return-fieldval.

      ENDIF.

  ENDCASE.  " CASE pv_fieldname.


  CALL METHOD go_grid->refresh_table_display. 

(on_f4 Event 사용시, alv_changed Event는 미발생!)

참고 : 바로가기

Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments