쌓고 쌓다

[ABAP] ALV Grid Event Handler 본문

SAP/ABAP

[ABAP] ALV Grid Event Handler

승민아 2025. 2. 5. 09:59

ALV Grid Event

ALV Grid에 데이터를 클릭 했을때 해당 Row 또는 Col 정보를 받아 처리하거나

HOTSPOT(밑줄) 된 데이터를 클릭했을 때 실행할 로직을 등록하거나

툴바에 메뉴를 추가하고 메뉴를 클릭했을때 동작과 같은 이벤트들을 생성, 관리할 수 있다.

 

더블 클릭시

ES_ROW_NO에는 ROW에 대한 정보를 갖는 컴포넌트

NUM, ROW_ID 컴포넌트가 존재한다.

 

ES_ROW_NO에 ROW_ID 필드가 있는데 몇번째 ROW를 더블클릭했는지 인덱스를 리턴.

E_COLUMN에 COLUMN_ID 필드는 어느 컬럼에서 클릭했는지 컬럼이름을 리턴.

 

 

E_COLUMN에는 COL에 대한 정보들을 갖는

COLUMN_ID, FIELDNAME 컴포넌트가 있다.

 

Field Catalog 조작할때 LVS_S_FCAT로 HOTSPOT 효과로 밑줄을 줄 수 있었다.

 

HOTSPOT이 적용된 컬럼을 클릭할때

ES_ROW_NO는 ROW 정보, E_COLUMN_ID에는 COL 정보를 갖는

컴포넌트가 있다.

 

Handler Method

이벤트를 처리하는 메소드를 CLASS를 선언하고 정의한다.

 

PUBLIC : 해당 프로그램외에서도 사용이 가능하다.

 

CLASS_METHODS가 오면 Static Method

METHODS가 오면 Instance Method이다.

 

예제를 보며 익히자.

 

 

이벤트 처리

이벤트 핸들러 정의 → 이벤트 핸들러 구현 → 이벤트 핸들러 등록

위의 과정으로 진행 된다.

 

 

오브젝트를 생성하고 REF Variable인 GO_ALV가 생성된 오브젝트를 가리키고 있는 전제 상황이다.

 

이벤트 핸들러 정의

Class를 위해 C01 Include 추가

 

Local Class 이름은 LCL_로 시작한다.

메소드명은 이벤트명 앞에 ON_을 붙인다.

 

메소드명 ON_DOUBLE_CLICK로 작성하고

FOR EVENT DOUBLE_CLICK로 더블 클릭 이벤트 처리를

OF ~ 로 어떤 그리드인지 작성한다.

IMPORTING으로 필요한 ROW, COL 정보에 따라 작성해서 넘겨준다.

 

이벤트 핸들러 구현

METHOD 메소드명 ~ ENDMETHOD로 구현을 한다.

 

이벤트 핸들러 등록

ALV Grid Control 생성 이후 HANDLER 등록 한다.

클래스명=>메소드명 FOR (GRID) 형태이다.

LCL_EVENT_HANDLER=>ON_DOUBLE_CLICK FOR GO_ALV.

 

ALV Grid의 6번째 ROW의 FLDATE 필드 값 더블 클릭시 출력 결과

ES_ROW_NO-ROW_ID와 E_COLUMN-FIELDNAME의 출력 결과로

6과 FLDATE가 나온다.

 

핫스팟 이벤트

더블 클릭과 다른 점은

FOR EVENT 뒤에 HOTSPOT_CLICK

E_COLUMN이 아닌 E_COLUMN_ID라는 부분이다.

 

마찬가지로

이벤트 핸들러 정의 -> 구현을 거쳐서

 

핸들러 등록 또한 한다.

 

클릭한 정보를 이용해 팝업 창에 데이터 표시

ALV Grid에 표시된 데이터를 클릭 했을때

해당 데이터의 키 값으로 SELECT 구문을 통해 데이터를 가져와 표시할 수 있다.

 

 이벤트 핸들러의 구현 부분이다.

넘어온 ES_ROW_NO에 ROW_ID에 몇번째 데이터를 클릭 했는지 정보가 넘어온다.

이 인덱스를 이용해 표시한 Internal Table에서 해당 인덱스번째의 데이터를 GS_DATA에 담아두고

110번 모달창을 호출한다.

 

110번 PBO에서 데이터를 조회해 INTO SCUSTOM에 넣어주면 된다.

 

GS_DATA에 클릭한 인덱스 번호에 맞는 데이터가 들어있기에

GS_DATA의 필드를 이용해 SELECT 한다.

 

클릭한 COLUMN에 따라 달리 처리하기

이벤트 핸들러 구현부에서

E_COLUMN_ID의 FIELDNAME에 클릭한 COLUMN명이 들어 있으므로

처리를 원하는 컬럼명에 따라 작성하면 된다.

 

Application Toolbar

툴바 메뉴를 추가하고 동작하게 해보자.

 

FOR EVENT 뒤에 TOOLBAR를 작성한다.

IMPORTING E_OBJECT를 작성한다.

 

STB_BUTTON 타입 변수를 선언한다.

 

BUTN_TYPE = 3과 APPEND 부분을 작성하고

이후에 필요한 버튼의 펑션 코드를 FUNCTION으로 정의하고

텍스트, 버튼 타입 등 설정을 하여 E_OBJECT->MOTTOOLBAR에 넘긴다.

 

Function Code가 DEL과 INS 두개 정의되고 추가 된 상태이다.

 

마찬가지로 등록을 한다.

 

여기까지하면 버튼이 생긴것이지 해당 버튼을 눌렀을때 동작하는 과정을 더 해야 한다.

 

USER_COMMAND 이벤트 정의를 추가한다.

E_UCOMM에 우리가 클릭한 Fuction Code가 들어간다.

 

생성한 버튼을 누를시 해당 버튼의 Function Code가 실행되는데

그 Function Code를 CASE문을 처리하는 과정을 추가하면 된다. 

 

ROW를 추가하는 INS 버튼이 있기에 REFRESH_TABLE_DISPLAY를 추가작성 했다.

 

마찬가지로 USER_COMMAND 이벤트도 등록해줘야 한다.

 

STB_BUTTON에 포함된 설정 컴포넌트들이다.

 

Calling Additional Methods of the ALV Grid

SET_FOR_FIRST_DISPLAY, REFRESH_TABLE_DISPLAY 외에 많은 메소드가 있다.

 

GET_CURRENT_CELL

 

셀을 선택하고 메뉴 버튼을 눌렀을때

GET_CURRENT_CELL로 ROW와 COL 순서를 알 수 있다.

 

 

이 ROW 정보로 Internal Table인 GT_DATA에서 삭제도 가능하다.

 

GET_SELECTED_ROWS

LAYOUT의 SELECT MODE에 따라 여러 ROW를 선택할 수 있는데

이때 선택된 여러개의 ROW 정보를 가져올 수 있다. 

 

'SAP > ABAP' 카테고리의 다른 글

[ABAP] Range Variable  (0) 2025.02.05
[ABAP] Field Catalog, IT_FIELDCATALOG  (2) 2025.02.04
[ABAP] Secondary INDEX  (1) 2025.02.03
[ABAP] Foreign Key, Value Table  (0) 2025.02.02
[ABAP] Subroutines  (0) 2025.01.31
Comments