ALV Event 구현 메소드에서 여러 ALV GRID를 제어하는 방법을 알아보도록 하겠다.
ALV CLASS에서 이벤트를 제어하는 방법은 다음과 같다.
STEP 1. ALV 에서 사용할 이벤트에 대한 이벤트 리시버 클래스 구현
1-1. 리시버 클래스 정의부엔 사용할 이벤트 핸들러 메소드 선언
1-2. 리시버 클래스 구현부엔 해당 핸들러 메소드에 대한 로직 구현
STEP 2. ALV 클래스 에서 인스턴스화 하여 ALV 객체 생성
STEP 3. 이벤트 리시버 클래스 에서 인스턴스화 하여 이벤트 리시버 객체 생성
STEP 4. ALV 객체와 이벤트 리시버 객체와 연결 ( SET HANDLER ~ )
STEP 2 에서 ALV 객체를 여러개 생성한다면,
STEP 3 에서도 해당 이벤트 리시버 객체를 여러번 생성하여 객체별로 1:1 Mapping 을 해줄 수 있을 것이다.
이렇게 하면 Step 1 에서 이벤트 핸들러 클래스를 ALV 객체만큼 만들어줘야 하므로 상당히 번거로운 방법으로 옳바른 구현 방법은 아니다.
하나의 이벤트 핸들러 객체로 다수의 ALV GRID를 제어하는 방법을 알아보도록 하자.
Step 3.에서 이벤트 핸들러 객체 하나를 생성하고 2개의 ALV에 같은 이벤트 헨들러를 연결한다.
Step 1.의 이벤트 구현부 로직에서는 하기와 같이 ALV별로 로직을 분리하기 위해 어떤 ALV GRID에서 호출됬는지 판별할 수 있는 구분자가 필요하다.
이 때 이벤트 메소드 파라미터 중 SENDER 파라미터를 사용하면 어느 ALV GRID에서 호출되었는지 알 수 있다.
SENDER 파라미터는 모든 CLASS EVENTS에서 제공하는 기본 파라미터로 실제로 해당 클래스의 이벤트 파라미터에는 보이지 않는다.
사용법은 Step 1 에서 이벤트 리시버 클래스의 선언부에 해당 이벤트 메서드 선언시 SENDER 파라미터를 추가로 선언하고 구현부에서 해당 파라미터로 ALV GRID를 판별하면 된다.
참고로 Step 4. 에서는 여러 ALV GRID 에서 같은 이벤트를 사용하고자 할 때 ALL INSTANCES 구문으로 코드를 줄일 수도 있다 .
'ABAP Working Lv. > ALV' 카테고리의 다른 글
|ALV| cl_salv_bs_runtime_info으로 타 프로그램 ALV Data 가져오기 ( feat. SUBMIT ) (0) | 2023.11.14 |
---|---|
|ALV| 선택 필드(Remark field) Checkbox 구현 시 주의 (3) | 2023.11.03 |
|ALV| Column Optimize ( After ALV Refresh ) (1) | 2023.11.01 |
|ALV| Event DATA_CHANGED와 DATA_CHANGED_FINISHED 차이 (3) | 2022.08.09 |
|ALV| EDIT 모드 (0) | 2022.07.25 |