본문 바로가기

SAP ABAP 개발 및 설명/ALV GRID

ALV GRID 이벤트

앞서 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