쌓고 쌓다
[ABAP] ALV Grid Event Handler 본문
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 |