ABAP | ALV | 전체선택/해제 버튼 넣기

a·2023년 5월 12일

ABAP

목록 보기
1/3


전체선택 / 전체해제 버튼 넣기

1) REUSE_ALV_GRID_DISPLAY 이용
is_layout 내 box_fieldname을 지정시, 해당 버튼이 자동으로 생성.

DATA : BEGIN OF itab OCCURS 0,
         mark(1),
         bukrs      TYPE bkpf-bukrs,
         belnr      TYPE bkpf-belnr,
         gjahr      TYPE bkpf-gjahr,
         bstat      TYPE bkpf-bstat,
         bstat_t(4) TYPE c,
         budat      TYPE bkpf-budat,
         buzei      TYPE bseg-buzei, 
         hkont      TYPE bseg-hkont,
         shkzg      TYPE bseg-shkzg,
         sgtxt      TYPE bseg-sgtxt,
         txt20      TYPE skat-txt20,
         dmbtr      TYPE bseg-dmbtr,
         dmbtr_m    TYPE bseg-dmbtr,
         kostl      TYPE bseg-kostl,
         ktext      TYPE cskt-ktext,
         saknr      TYPE bseg-saknr,

       END OF itab.
       
  gs_layo_f-box_fieldname = 'MARK'.
  

결과화면

2) CL_GUI_ALV_GRID 이용
is_layout 내 box_fname 이 있으나, 해당 필드의 값을 추가하여도 버튼이 생성되지는 않음

확인해보니 box_fname이 cl_gui_alv_grid=>set_table_for_first_display 메소드에서 사용하는 부분은 없음

다만 클릭한 행을 읽어오는
clgui_alv_grid=>get_selected* 계열의 메소드에는 box_fname으로 사용 가능.

강제로 버튼을 만들어서 alv grid 내 순서에 맞게 들어가는 작업을 함

2-1) Class 정의

CLASS lcl_grid DEFINITION.

  PUBLIC SECTION.
    METHODS :
      toolbar FOR EVENT toolbar OF cl_gui_alv_grid
        IMPORTING e_object E_INTERACTIVE,

      command FOR EVENT user_command OF cl_gui_alv_grid
        IMPORTING e_ucomm.

ENDCLASS.

CLASS lcl_grid IMPLEMENTATION.

  METHOD toolbar.
    PERFORM toolbar USING e_object E_INTERACTIVE.

  ENDMETHOD.


  METHOD command.
    PERFORM command USING e_ucomm.
  ENDMETHOD.

ENDCLASS.

*************************************************
    CREATE OBJECT gcl_grid.
    SET HANDLER gcl_grid->hotspot FOR go_grid.
    SET HANDLER gcl_grid->toolbar FOR go_grid.
    SET HANDLER gcl_grid->command FOR go_grid.

2-2) 메소드 기능 넣기

FORM toolbar  USING    p_object TYPE REF TO cl_alv_event_toolbar_set
                       p_interactive TYPE char01.


  DATA : ls_toolbar TYPE stb_button,
         lv_tabix type sy-tabix.



  LOOP AT p_object->mt_toolbar INTO ls_toolbar.
    CASE ls_toolbar-function.
      WHEN '&SELALL'.
    ENDCASE.
  ENDLOOP.


  CLEAR ls_toolbar.

  ls_toolbar-function = c_sel.
  ls_toolbar-icon = icon_select_all.
  ls_toolbar-quickinfo = TEXT-031.
*  ls_toolbar-text = TEXT-031.
  ls_toolbar-butn_type = 0.

  READ TABLE p_object->mt_toolbar WITH KEY function = '&&SEP03' "구분자 |
                                  TRANSPORTING NO FIELDS.
  IF sy-subrc = 0.
    lv_tabix = sy-tabix.
    INSERT ls_toolbar INTO p_object->mt_toolbar
                      INDEX lv_tabix.
  ELSE.
    APPEND ls_toolbar TO p_object->mt_toolbar.
  ENDIF.



  CLEAR ls_toolbar.
  ls_toolbar-function = c_desel.
  ls_toolbar-icon = icon_deselect_all.
  ls_toolbar-quickinfo = TEXT-032.
*  ls_toolbar-text = TEXT-032.
  ls_toolbar-butn_type = 0.

  READ TABLE p_object->mt_toolbar WITH KEY function = '&&SEP03' "구분자 |
                                  TRANSPORTING NO FIELDS.
  IF sy-subrc = 0.
    lv_tabix = sy-tabix.
    INSERT ls_toolbar INTO p_object->mt_toolbar
                      INDEX lv_tabix.
  ELSE.
    APPEND ls_toolbar TO p_object->mt_toolbar.
  ENDIF.

ENDFORM.
FORM command  USING    p_ucomm TYPE sy-ucomm.

  DATA : lt_index_rows TYPE lvc_t_row,
         ls_index_rows TYPE lvc_s_row,
         lt_row_no     TYPE lvc_t_roid,
         ls_row_no     TYPE lvc_s_roid,
         i             TYPE i.

  CLEAR : lt_index_rows, lt_row_no,
          ls_index_rows, ls_row_no.

  i = 1.

  IF p_ucomm = c_sel.

    LOOP AT itab.


      ls_index_rows-index = i.
      ls_row_no-row_id = i.
      ls_row_no-sub_row_id = 0.
      APPEND : ls_index_rows TO lt_index_rows,
               ls_row_no TO lt_row_no.

      i = i + 1.

      CLEAR itab.
    ENDLOOP.

    CALL METHOD go_grid->set_selected_rows
      EXPORTING
        it_index_rows = lt_index_rows
        it_row_no     = lt_row_no.
*        is_keep_other_selections =


  ELSEIF p_ucomm = c_desel.

    LOOP AT itab.


      CLEAR itab.
    ENDLOOP.

    CALL METHOD go_grid->set_selected_rows
      EXPORTING
        it_index_rows = lt_index_rows
        it_row_no     = lt_row_no.
*        is_keep_other_selections =


  ENDIF.


ENDFORM.

2-3) 핸들러 설정

    CREATE OBJECT gcl_grid.
    SET HANDLER gcl_grid->toolbar FOR go_grid.
    SET HANDLER gcl_grid->command FOR go_grid.

결과화면

0개의 댓글