프로그램을 개발하다 보면 다른 프로그램의 결과 데이터를 그대로 가져오고 싶은 경우가 있다.
해당 프로그램이 Function이나 Method 로 모듈화가 잘 되어 있다면 그대로 가져와 약간의 수정으로 동일한 결과를 얻을 수 있을 것이다. 하지만 분석조차 힘든 복잡하고 긴 로직이라면 쉽지 않을 것이다. ABAP MEMORY( EXPORT / IMPORT )를 이용하여 데이터를 가져오기도 하는데, 기존 프로그램에도 Export 로직을 추가 수정해야 하는 번거로움이 있다.
만약 레포트 결과물이 ALV 로 보여진다면, CLASS cl_salv_bs_runtime_info 와 SUBMIT을 이용해 쉽게 ALV의 결과 데이터를 스냅샷 해올 수 있다.
사용방법은 다음과 같다.
Step 1. ALV 결과 데이터와 메타 데이터 ( ALV의 Fieldcatalog나 Layout 정보 등 ), Display 여부 설정
Display 여부 ( Display Parameter )
ALV 결과 데이터 가져올지 여부 ( DATA Parameter ),
ALV 메타데이터 가져올지 여부 ( METADATA Parameter ),
cl_salv_bs_runtime_info=>set( EXPORTING
display = abap_off
metadata = abap_on
data = abap_on ).
Step 2. ALV 데이터를 가져오고자 하는 레포트 프로그램 호출
SUBMIT report program ~ AND RETURN
Step 3. Step 1에서 metadata를 가져오는 것으로( = 'X' ) 설정했다면 METHOD get_metadata 호출
: Return 값으로 ALV metadata 정보를 가져올 수 있다.
DATA(ls_meta) = cl_salv_bs_runtime_info=>get_metadata( ).
Step 4. Step 1에서 ALV output data를 가져오는 것으로( = 'X' ) 설정했다면 METHOD get_data_ref 호출
: 해당 데이터는 데이터 참조 변수로 받기 때문에 필드 심볼에 할당하여 데이터를 확인할 수 있다.
cl_salv_bs_runtime_info=>get_data_ref( IMPORTING r_data = DATA(lr_data) ).
ASSIGN lr_data->* TO <fs_itab>.
Step 5. 가져왔던 ALV 데이터를 클리어
cl_salv_bs_runtime_info=>clear_all( ).
장점은 다음과 같이 정리할 수 있다.
1. 기존 레포트의 로직 분석 없이 결과 데이터를 그대로 가져올 수 있다.
2. 마지막 결과 데이터를 스냅샷하므로 기존 레포트의 로직 변경시에 로직 이원화에 대한 리스크가 없다.
3. 기존 레포트에도 수정이 필요했던 ABAP MEMORY 데이터 인터페이스 방식의 단점을 보완할 수 있다.
사용하기 전에 다음과 제약사항을 체크해 봐야 한다.
1. Background 수행시 기존 레포트가 CLASS ALV 경우엔 사용하지 못하는 경우가 있음.
( CNTL_ERROR dump - Screen Container issue )
2. 기존 레포트가 ALV 레포트가 아닌 레포트에는 사용할 수 없음.
'ABAP Working Lv. > ALV' 카테고리의 다른 글
|ALV| Event 메서드 에서 2개 이상의 ALV GRID 제어 방법 ( feat. SENDER 파라미터 ) (0) | 2023.11.08 |
---|---|
|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 |