본문 바로가기
SAP/ABAP

ABAP ALV GRID EVENT CLASS METHOD 구문

by 꿈청(꿈꾸는청년) 2021. 4. 12.
반응형

 

ABAP ALV GRID EVENT CLASS METHOD 구문정리

 

 

1. ALV GRID CLASS EVENT 

 

*ALV GRID CLASS EVENT 선언*

 

INCLUDE TOP 

 

// ALV CLASS EVENT 
CLASS lcl_event_receiver DEFINITION DEFERRED.
DATA gcl_event_receiver TYPE REF TO lcl_event_receiver.

 

 

 

INCLUDE LCL

 

// Class lcl_event_receiver(DEFINITION)

CLASS LCL_EVENT_RECEIVER DEFINITION.

  PUBLIC SECTION.
    METHODS
      HANDLE_DATA_CHANGED
         FOR EVENT DATA_CHANGED OF CL_GUI_ALV_GRID
             IMPORTING ER_DATA_CHANGED E_UCOMM.

    METHODS
      HANDLE_DOUBLE_CLICK
         FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
             IMPORTING E_ROW E_COLUMN ES_ROW_NO.

    METHODS
      HANDLE_ON_F4
         FOR EVENT ONF4 OF CL_GUI_ALV_GRID
             IMPORTING E_FIELDNAME E_FIELDVALUE ES_ROW_NO ER_EVENT_DATA ET_BAD_CELLS E_DISPLAY.

    METHODS
      HANDLE_TOOLBAR
         FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID
             IMPORTING E_OBJECT E_INTERACTIVE.

    METHODS
      HANDLE_USER_COMMAND
         FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID
             IMPORTING E_UCOMM.

ENDCLASS.


// Class lcl_event_receiver(IMPLEMENTATION)

CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.
// DATA CHANGED EVENT
  METHOD HANDLE_DATA_CHANGED.
    PERFORM HANDLE_DATA_CHANGED USING ER_DATA_CHANGED.
  ENDMETHOD.                    
// DOUBLE CLICK EVENT 
  METHOD HANDLE_DOUBLE_CLICK.
    PERFORM HANDLE_DOUBLE_CLICK USING E_ROW E_COLUMN ES_ROW_NO.
  ENDMETHOD.                    
 // ON F4 EVENT 
  METHOD HANDLE_ON_F4.
    PERFORM HANDLE_ON_F4 USING E_FIELDNAME E_FIELDVALUE ES_ROW_NO ER_EVENT_DATA ET_BAD_CELLS E_DISPLAY.
  ENDMETHOD.                    

  // TOOLBAR EVENT 
  METHOD HANDLE_TOOLBAR.
    PERFORM HANDLE_TOOLBAR USING E_OBJECT E_INTERACTIVE.
  ENDMETHOD.                   

  // USER COMMAND EVENT 
  METHOD HANDLE_USER_COMMAND.
    PERFORM HANDLE_USER_COMMAND USING E_UCOMM.
  ENDMETHOD.                    

ENDCLASS.

 

화면 GRID 매핑

 

FORM SET_EVENT_HANDLER .

  CREATE OBJECT gcl_event_receiver.

  SET HANDLER gcl_event_receiver->HANDLE_DOUBLE_CLICK  FOR g_grid1.
  SET HANDLER gcl_event_receiver->HANDLE_DATA_CHANGED  FOR g_grid1.
  SET HANDLER gcl_event_receiver->HANDLE_TOOLBAR       FOR g_grid1.
  SET HANDLER gcl_event_receiver->HANDLE_USER_COMMAND  FOR g_grid1.

ENDFORM.

 


*************************추가 정보****************************** 내부유형 ******************************************

 

 

 

 

 

EX)

METHOD HANDLE_DOUBLE_CLICK FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
             IMPORTING E_ROW E_COLUMN ES_ROW_NO.

CLASS LCL_EVENT_RECEIVER DEFINITION.

  PUBLIC SECTION.
    METHODS
      HANDLE_DOUBLE_CLICK
         FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
             IMPORTING E_ROW E_COLUMN ES_ROW_NO.

ENDCLASS.

 

CLASS CL_GUI_ALV_GRID EVNET 속성

 

 

CLASS CL_GUI_ALV_GRID 는 일반적으로 사용하는 DATA_CHANGED, DOUBLE CLICK, TOOLBAR 이외에도 다양한 EVENT들을 지원합니다. 또한, 각 EVENT에 해당하는 PARAMETERS를 누르면 해당 EVENT를 통해 IMPPORTING 하는 인수 값들을 알 수 있습니다.

 

 

==> IMPORTING 인수 

 


 

2. ALV GRID EVENT 정리

 

1. ALV GRID TOOLBAR ( 커스터마이징 Toolbar )

 

ex)

[추가][삭제][수정][저장]

 

 

INCLUDE TOP

DATA: GS_TOOLBAR TYPE stb_button.

 

STB_BUTTON 속성

 

* Quickinfo : Toolbar에 마우스 커서시 text 표시

 

 

BUTN_TYPE - TB_BTYPE '버튼타입' 정리

툴바 버튼 타입지정 0:일반 1:메뉴및기본버튼 2:메뉴 3:구분자 4:라디오버튼 5:체크박스 6:메뉴 옵션

 

 

INCLUDE LCL

  CLEAR gs_toolbar.
  gs_toolbar-butn_type = 3.
  APPEND gs_toolbar TO p_object->mt_toolbar.

  CLEAR gs_toolbar.
  gs_toolbar-function  = 'INSERT_ROW'.
  gs_toolbar-icon      = icon_insert_row.
  gs_toolbar-quickinfo = '추가'.
  gs_toolbar-text      = '추가'.
  APPEND gs_toolbar TO p_object->mt_toolbar.

  CLEAR gs_toolbar.
  gs_toolbar-function  = 'DELETE_ROW'.
  gs_toolbar-icon      = icon_delete_row.
  gs_toolbar-quickinfo = '삭제'.
  gs_toolbar-text      = '삭제'.
  APPEND gs_toolbar TO p_object->mt_toolbar.

  CLEAR gs_toolbar.
  gs_toolbar-function  = 'CHANGE_ROW'.
  gs_toolbar-icon      = ICON_CHANGE.
  gs_toolbar-quickinfo = '수정'.
  gs_toolbar-text      = '수정'.
  APPEND gs_toolbar TO p_object->mt_toolbar.

  CLEAR gs_toolbar.
  gs_toolbar-function  = 'SAVE_ROW'.
  gs_toolbar-icon      = ICON_SYSTEM_SAVE.
  gs_toolbar-quickinfo = '저장'.
  gs_toolbar-text      = '저장'.
  APPEND gs_toolbar TO p_object->mt_toolbar.

 

 


2. ALV GRID Double Click 

 

 

 

ALV GRID Double Click은 GRID에서 '라인(LINE)' 또는 한 '셀(CELL)'을 유저가 더블클릭 했을 때 발생하는 EVENT 처리입니다. 그렇다면 유저가 더블클릭한 셀 또는 라인에 대한 정보는 IMPORTING을 통해 X축과 Y축을 알 수 있습니다. 이것으로 유저가 어떠한 셀을 더블클릭 했는지 알 수 있습니다.

 

EX)

    METHODS
      HANDLE_DOUBLE_CLICK
         FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
             IMPORTING E_ROW E_COLUMN ES_ROW_NO.

 

debugging

 

AA 항공사 - 4월 더블클릭 

 

 

오른쪽: debugging data 

 

1행, 열(amt_04) 정보를 받아오는 것을 알 수 있는데, 그렇다면 해당 GRID에 INTERNAL TABLE에 READ TABLE만 해주면 됩니다. 

 

FORM DOUBLE_CLICK  USING    ps_row_id LIKE lvc_s_row
                                             ps_col_id   LIKE lvc_s_col
                                             ps_row_no LIKE lvc_s_roid.

  READ TABLE GT_LIST INTO GS_LIST INDEX ps_row_id-index.
  CHECK sy-subrc EQ 0.

ENDFORM.

 

 


3. ALV GRID USER COMMAND

 

사용자 커스터마이징으로 만든 툴바 '버튼'을 누르면 해당 EVNET가 작동하게 됩니다. PAI USER COMMAND와 같은 역할이라고 보면 되겠습니다.

 

CLASS LCL_EVENT_RECEIVER DEFINITION.

  PUBLIC SECTION.

    METHODS
      HANDLE_USER_COMMAND
         FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID
             IMPORTING E_UCOMM.

ENDCLASS.

 

FORM HANDLE_USER_COMMAND  USING    P_UCOMM.


  CASE P_UCOMM.
    WHEN 'INSERT_ROW'.
      PERFORM INSERT_ROW.
    WHEN 'DELETE_ROW'.
      PERFORM DELETE_ROW.
    WHEN 'CHANGE_ROW'.
*      PERFORM CHANGE_ROW.
    WHEN 'SAVE_ROW'.
      PERFORM SAVE_PROCESS.

    WHEN OTHERS.
  ENDCASE.

ENDFORM.

 

 

 


4. ALV GRID DATA CHANGED

 

처음 배운다면 ALV GRID DATA CHANGED 는 조금(?) 까다로울 수 있습니다. 단순히 데이터 변경할 수 있는 EDIT 환경에서 데이터를 변경하면 다른 EVENT와 같이 작동할 것 같은데 안합니다. 화면 GRID 생성하는 부분에서 Data Changed를 위한 추가적인 로직이 필요합니다.

 

 

 

 

 

추가로직==>

 

GRID->REGISTER_EDIT_EVENT ( DISPLAY 하기전에 선행되어야 함 )

 

*주의*

'CALL METHOD G_GRID->SET_TABLE_FOR_FIRST_DISPLAY 하기 이전에 아래소스 REGISTER_EIDT_EVENT가 선행되어야 합니다!!'

 

FORM SET_EDIT .

  CALL METHOD G_GRID1->REGISTER_EDIT_EVENT
    EXPORTING
      I_EVENT_ID =  CL_GUI_ALV_GRID=>MC_EVT_ENTER.              


  CALL METHOD G_GRID1->REGISTER_EDIT_EVENT
    EXPORTING
      I_EVENT_ID =  CL_GUI_ALV_GRID=>MC_EVT_MODIFIED.


ENDFORM.

 

MC_EVT_ENTER는 유저가 ALV GRID를 수정 후 엔터를 입력하였을 때 Data Changed Event가 작동합니다.

 

MC_EVT_MODIFIED는 유저가 ALV GRID를 수정 후 해당 셀을 벗어났을 때 Data Changed Event가 작동합니다.

반응형

댓글