▪앞서 CLASS 관련하여 이벤트에 대해 정리하였듯이, 클래스간에 이벤트를 등록하여 ALV GRID에서 HOSTPOT, 더블클릭,TOOLBAR 등의 사용자 액션에 반응하는 이벤트를 추가할 수 있다.
▪관련한 정리는 아래 이전글을 확인해보기를 바란다.
2020/08/20 - [ABAP 기초 문법/클래스 이해하기] - EVENT
▪이벤트를 ALV GRID에 반영하기 위해선 다음과 같은 3단계의 순서를 진행해야 한다.
1.이벤트를 선언
2.이벤트 핸들러 메서드를 정의
3.이벤트 핸들러 메서드를 등록
1) 이벤트 선언
클래스 빌더 T-CODE : SE24에서 CL_GUI_ALV_GRUD를 조회하면 DOUBLE_CLICK이라는 이벤트가 선언되어 있다.
2) 이벤트 핸들러 메서드 정의
프로그램 내에서 이벤트가 발생되었을 때 반응하기 위해 클래스를 정의하고 이벤트 핸들러 메서드를 선언한다.
CLASS lcl_event_receiver DEFINITION.
PUBLICK SECTION.
METHOD:
handle_double_click FOR EVENT double_click OF CL_GUI_double_click
importing e_rew e_column.
ENDCLASS.
3) 이벤트 핸들러 메서드 등록
이벤트를 실행하기 위해 ALV GRID에 이벤트 핸들러 메서드를 등록한다.
DATA : go_event_receiver TYPE REF TO lcl_event_receiver.
CREATE OBJECT go_event_receiver.
SET HANDLER go_event_receiver->handle_double_click FOR g_grid.
4) 이벤트 호출
CL_GUI_ALV_GRID의 화면을 더블클릭하면 RAISE_EVENT라는 메서드가 실행되고 이 메서드는 USER COMMAND에 해당하는 이벤트를 발생시키게 된다.
5) 이벤트 핸들러 메서드 실행
이벤트가 호출되어 이벤트 핸들러 메서드가 실행된다. CLASS : LCL_EVENT_RECEIVER_IMPLENENT에서 메서드의 행위를 정의하게 되면 ALV에서 더블클릭에 작동하는 소스 스크립트를 완성하게 된다.
METHOD raise_event.
RAISE EVENT after_user_command
EXPORTING
e_ucomm = i_ucomm
e_not_processed = i_not_processed.
METHOD.
예시를 보았으니 가장 많이 사용하는 이벤트에 몇 가지에 대해서 공부해보자.
1. DOUBLE_CLICK 이벤트
▪ALV 화면을 조회하는 셀을 더블클릭할 떄 화면을 빠져나오는 이벤트 예제를 실습해보자. 앞에서 개념과 절차에 대해서 설명했으므로 아주 간단히 작업할 수 있다.
▪DOUBLE_CLICK 이벤트에 사용되는 파라미터
파라미터 | Associated type | 의미 |
E_ROW | TYPE REF TO LVC_S_ROW | 현재 선택된 라인 인덱스 번호 |
E_COLUMN | TYPE REF TO LVC_S_COL | 현재 선택된 칼럼 이름 |
ES_ROW_NO | TYPE REF TO LVC_S_ROID | 현재 선택된 ROW_ID |
1) 이벤트 핸들러 메서드를 포함하는 클래스를 정의하고 IMPLEMENT 한다.
이벤트 핸들러 메서드를 선언하고 기술한다.
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.
ENDCLASS.
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_double_click.
LEAVE TO SCREEN 0.
ENDMETHOD.
ENDCLASS.
2) 클래스를 참고하는 객체 참조 변수를 정의한다.
DATA : GO_EVENT_RECEIVER TYPE REF TO lcl_event_receiver.
3) 오브젝트를 생성하여 이벤트 핸들러 메서드를 등록한다.
CREATE OBJECT go_event_receiver.
SET HANDLER go_event_receiver->handle_double_click FOR g_grid.
▪앞의 단계를 통해 DOUBLE_CLICK이벤트를 생성하고 등록한 뒤에 프로그램을 실행하여 ALV_GRID의 임의의 셀을 더블클릭하면 LEAVE TO SCREEN 0 구문이 수행되고 프로그램을 종료하게 된다.
2.HOTSPOT_CLICK 이벤트
▪HOTSPOT으로 선언된 칼럼을 마우스로 한번 클릭할 때에 반응하는 이벤트이다.
▪핫스팟으로 지정할 칼럼은 필드 카탈로그 선언 시 HOPSPOT 속성으로 선언되어야 한다.
▪핫스팟으로 지정할 필드를 선정하고 GS_FIELDCAT-HOTSPOT = 'X' 구문을 GT_FIELDCAT에 APPEND 해주는 과정을 통해 개발자가 HOTSPOT 속성을 부여할 수 있다.
▪HOTSPOT_CLICK 이벤트에 사용되는 파라미터
파라미터 | Associated type | 의미 |
E_ROW_ID | TYPE REF TO LVC_S_ROW | 현재 선택된 라인 인덱스 번호 |
E_COLUMN_ID | TYPE REF TO LVC_S_COL | 현재 선택된 칼럼 이름 |
ES_ROW_NO | TYPE REF TO LVC_S_ROID | 현재 선택된 ROW_ID |
TOOLBAR 이벤트
▪ALV가 기본적으로 제공하는 아이콘 이외에 개발자가 아이콘을 추가하여 기능을 추가할 수 있다.
▪Toolbar 이벤트는 ALV GRID에 단순히 아이콘만 추가하는 것이고, 아이콘을 클릭했을 때의 동작을 부여하는 것은 user_command 이벤트에서 추가로 지정해주어야 한다.
▪HOTSPOT_CLICK 이벤트에 사용되는 파라미터
파라미터 | Associated type | 의미 |
E_OBJECT | TYPE REF TO CL_ALV_EVENT_TOOLBAR_SET | TOOLBAR의 기능을 저장하는 테이블 타입의 오브젝트이다. |
E_INTERACTIVE | TYPE CHAR01 | FLAG가 설정되어 있으면, 이벤트가 호출될 때 set_toolbar_interactive 메서드를 호출하여 툴바를 초기화한다. |
▪위의 그림처럼 Refresh 아이콘을 추가하는 방법을 아래 코드를 통해 실행해보자.
TYPE-POOLS : icon
//------------------------------
CLASS lCl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS : handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object e_interactive.
ENDCLASS.
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_toolbar.
DATA : ls_toolbar TYPE STB_BUTTON.
CLEAR ls_toolbar.
ls_toolbar-butn_type = 3.
APPEND ls_toolbar TO e_object->mt_toolbar.
CLEAR ls_toolbar.
ls_toolbar-function = 'RESH'.
ls_toolbar-icon = icon_refresh.
ls_toolbar-quickinfo = 'Refresh'.
ls_toolbar-text = ''.
ls_toolbar-disabled = ''.
APPEND ls_toolbar TO e_object->mt_toolbar.
ENDMETHOD.
ENDCLASS.
//------------------------------------
DATA : go_event_receiver type ref to lcl_event_receiver.
CREATE OBJECT go_event_receiver.
SET HANDLER go_event_receiver->handle_toolbar FOR g_grid.
▪아이콘을 설정하기 위한 구문인 ls_toolbar-icon = icon_refresh를 이용하기 위해선 TOP이나 FORM문 최상단에 TYPE-POOLS : ICON을 기술해주어야 한다. (ICON_REFRESH의 시스템 ID는 '@42@')
▪ls_TOOLBAR라는 변수의 타입을 STB_BUTTON으로 정해진 이유는 STB_BUTTON이 SAP ABAP의 TOOLBAR 버튼에 관련된 테이블 형식이기 때문이다.
▪APPEND ls_toolbar TO E_OBJECT->MT_TOOLBAR는 ls_toolbar을 e_object->MT_TOOLBAR(CL_GUI_ALV_GRID의 Instance Attribute인 MT_TOOLBAR에 접근하는 것)APPEND 해주어서 CL_ALV_GRID에 반영할 수 있도록 하는 것을 의미한다.
USER_COMMAND 이벤트
▪대표적으로 TOOLBAR 이벤트에서 추가된 아이콘에 기능(역할)을 부여하는 이벤트이다. Refresh 아이콘을 클릭하였을 때 데이터를 새로 읽어오는 로직을 추가해보자.
파라미터 | Associated type | 의미 |
E_UCOMM | TYPE SY-UCOMM | 추가한 버튼의 Function Code. |
TYPE-POOLS : icon.
//----------------------------------------------
CLASS lCl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS : handle_command FOR EVENT handle_command OF cl_gui_alv_grid
IMPORTING e_ucomm
ENDCLASS.
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_toolbar.
DATA : l_scroll TYPE lvc_s_stbl.
CASE e_ucomm.
WHEN ‘RESH’.
SELECT * FROM sflgiht INTO TABLE gt_sflight.
l_scroll-row = ‘X’
l_scroll-col = ‘X’
CALL METHOD g_grid->refresh_table_display
EXPORTING
i_soft_refresh = ‘’.
is_stable = l_scroll.
ENDCASE.
ENDMETHOD.
//-------------------------------------------
DATA : go_event_receiver TYPE REF TO lcl_event_receiver.
CREATE OBJECT go_event_receiver.
SET HANDLER go_event_receiver->handle_command FOR g_grid.
▪REFRESH 버튼을 통해 테이블 내용이 변경되었다면 새로운 내용을 ALV에 조회되도록하고 REFRESH_TABLA_DISPLAY 메서드를 통해서 이를 다시 ALV에 반영시키도록 해준다.
▪LVC_S_STBL이란 테이블은 ALV CONTROL에서 REFRESH STABILITY를 위한 용도로 사용된다.
'SAP ABAP 개발 및 설명 > ALV GRID' 카테고리의 다른 글
CL_GUI_ALV_GRID 기타 메소드 (0) | 2020.08.24 |
---|---|
ALV GRID - 기타 파라미터 (0) | 2020.08.24 |
ALV GRID 레이아웃 (0) | 2020.08.23 |
ALV GRID 필드 카탈로그 (0) | 2020.08.23 |
필드 카탈로그 - lvc_s_fcat 역할정리 (0) | 2020.08.22 |