ALV 에는 다음과 같이 행 앞에 네모난 Remark Field (선택 박스) 를 기본으로 제공한다.
선택된 라인의 정보 (INDEX)는 METHOD GET_SELECTED_ROWS 이용하여 찾아올 수 있다.
실무에서 컨설턴트 또는 현업한테 이런 요청을 받는 경우가 종종 있다.
선택 박스를 Checkbox로 구현해 주세요.
이 때는 해당 ALV Output 인터널테이블에 Character 1자리 Remark용 필드를 추가 선언 하여 ALV Fieldcatalog 의 Checkbox 속성을 이용하여 구현할 수 있다. 선택된 데이터의 후속처리는에 추가된 Remark 필드의 'X' 인 데이터만 찾아서 처리하면 된다.
Remark 필드를 Checkbox 로 수동 구현하면 항상 따라오는 추가 요청사항이 있다.
전체 선택, 전체 선택 해제 버튼도 만들어 주세요.
로직은 ALV 이벤트를 이용하여 버튼 생성 및 해당 버튼 클릭시 ALV Output 인터널테이블의 Remark 필드에 'X' 또는 SPACE를 일괄로 업데이트 하면 된다.
대부분 여기까지 다 구현했다고 생각하고 끝낼 수 있지만,
항상 ALV에 어떠한 기능을 추가로 구현했을 때
ALV 스탠다드 기능 ( Toolbar의 기본기능 ) 에 영향이 없는지 확인해야 한다.
자주 문제를 일으키는 것 중 하나가 ALV Toolbar의 Filter 기능이다.
자, 이런 시나리오라고 생각해보자.
STEP 1. 프로그램 실행 후 ALV 조회 결과 - 데이터 10건
STEP 2. ALV 필터를 이용, 필요한 데이터만 필터링함 - 데이터 5건
STEP 3. 전체 선택 버튼 클릭
STEP 4. 화면에는 5건이 전체 선택되고
STEP 5. 트랙잭션 처리 버튼을 눌러 선택된 데이터만 처리함
사용 유저는 현재 화면에 보이는 5건만 처리했다고 생각하겠지만,
STEP 3 에서 프로그램 내 로직은 ALV OUTPUT 인터널테이블 전체를 보고 있기 때문에
데이터 10건 모두 선택되었을 것이다.
( ALV 화면에서 5건 보인다고 내부적으로 인터널테이블 데이터가 5건으로 바뀌는 것은 아니다. )
결국 STEP 5에서 5건이 아닌 10건 모두 트랜잭션 처리가 되는 오류를 발생하게 된다.
즉, Filter 기능과 Remark 선택/해제를 반복적으로 수행하다 보면, 최종적으로 선택된 Remark 필드는
유저가 생각치 못하게 뒤죽박죽 되어 있을 것이다.
이런 오류를 피하려면, 결국 ALV Filter 버튼 또는 전체 선택 버튼을 눌렀을 때 마다
필터된 데이터를 고려하여 Remark 필드를 재정비 하는 로직이 필요하다.
다음 ALV METHOD 를 이용하면 ALV에서 필터된 데이터의 정보를 가져올 수 있다.
METHOD GET_FILTERED_ENTRIES
이 때, 주의할 점은 해당 메소드에서 가져오는 필터된 데이터 정보 ( INDEX )는
화면에 보이지 않은 데이터, 즉 필터 조건에 맞지 않은 데이터를 말한다.
필터 (Standard) 버튼, 전체 선택 (Custom) 버튼을 클릭 후 시점에
METHOD GET_FILTERED_ENTRIES 를 이용해서 Remark 필드를 현재 화면에
보이는 데이터 기준으로 다시 반영해 주면 된다.
참고로 ALV Standard Toolbar 버튼을 눌렀을 때 시점은
ALV EVENT 중 BEFORE_USER_COMMAND 또는 AFTER_USER_COMMAND 에서 로직을 구현할 수 있다.
'ABAP Working Lv. > ALV' 카테고리의 다른 글
|ALV| cl_salv_bs_runtime_info으로 타 프로그램 ALV Data 가져오기 ( feat. SUBMIT ) (0) | 2023.11.14 |
---|---|
|ALV| Event 메서드 에서 2개 이상의 ALV GRID 제어 방법 ( feat. SENDER 파라미터 ) (0) | 2023.11.08 |
|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 |