프로그램을 개발하다 보면 다른 프로그램의 결과 데이터를 그대로 가져오고 싶은 경우가 있다.

 

해당 프로그램이 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 레포트가 아닌 레포트에는 사용할 수 없음.   

+ Recent posts