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 '버튼타입' 정리
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월 더블클릭
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가 작동합니다.
'SAP > ABAP' 카테고리의 다른 글
ABAP TABLE 유니크 INDEX 생성 'GUID_CREATE' (0) | 2021.04.18 |
---|---|
ABAP SET_READY_FOR_INTPUT '수정' Toolbar (0) | 2021.04.13 |
ABAP ALV GRID SPLIT 화면분할 (3) | 2021.04.08 |
SAP Variant 변형 (2) | 2021.04.06 |
SAP ABAP PARAMETER , SELECT-OPTION , SELECTION-SCREEN (0) | 2021.04.04 |
댓글