SUBMIT으로 ALV 데이터 조회
CL_SALV_BS_RUNTIME_INFO
ABAP내에서 다른 리포트 프로그램의 데이터를 가져오고자 할 경우,
CL_SALV_BS_RUNTIME_INFO 클래스를 이용하여 데이터를 가져올 프로그램을 SUBMIT으로 호출하여 ALV 데이터를 읽어올 수 있습니다.
이 방식은 소스 프로그램의 수정 없이 데이터를 읽어올 수 있어서 표준 리포트의 데이터를 읽어올때 아주 유용합니다.
단, 스크린에 표시될 ALV의 데이터를 읽어오는 방식이다 보니 여러 제약사항이 있습니다.
CBO 프로그램간의 데이터 조회는 ABAP MEMORY를 이용하여 EXPORT/IMPORT가 가장 확실한 방법인듯 합니다.
# 사용예시
CL_SALV_BS_RUNTIME_INFO=>SET( DISPLAY = ABAP_FALSE "SUBMIT 프로그램의 화면 표시 여부
METADATA = ABAP_TRUE "ALV METADATA 반환 여부(LAYOUT, FIELDCAT 등)
DATA = ABAP_TRUE ).
"ALV 데이터를 읽을 소스 프로그램 호출
SUBMIT YSAND_BOX
WITH P_BUKRS = '1000'
AND RETURN.
TRY.
"METADATA
DATA(LT_METADATA) = CL_SALV_BS_RUNTIME_INFO=>GET_METADATA( ).
"ALV 내용을 DATA로 반환
CL_SALV_BS_RUNTIME_INFO=>GET_DATA_REF( IMPORTING R_DATA = DATA(LD_DATA) ).
ASSIGN LD_DATA->* TO FIELD-SYMBOL(<LFT_DATA>).
CATCH CX_SALV_BS_SC_RUNTIME_INFO.
"ERROR
"SUBMIT 프로그램이 ALV를 출력하지 않을 경우 오류 발생
"SUBMIT 프로그램이 SPLITTER_CONTAINER를 사용하는 경우 Background에서 컨테이너 생성 오류 발생
ENDTRY.
"CLEAR
CL_SALV_BS_RUNTIME_INFO=>CLEAR_ALL( ).
"반환 받은 DATA 사용
IF <LFT_DATA> IS ASSIGNED.
CL_SALV_TABLE=>FACTORY(
importing
R_SALV_TABLE = DATA(LO_SALV)
changing
T_TABLE = <LFT_DATA>
).
CL_SALV_CONTROLLER_METADATA=>SET_LVC_FIELDCATALOG(
exporting
T_FIELDCATALOG = LT_METADATA-T_FCAT
R_COLUMNS = LO_SALV->GET_COLUMNS( )
R_AGGREGATIONS = LO_SALV->GET_AGGREGATIONS( )
).
CL_SALV_CONTROLLER_METADATA=>SET_LVC_LAYOUT(
exporting
R_FUNCTIONAL_SETTINGS = LO_SALV->GET_FUNCTIONAL_SETTINGS( )
R_DISPLAY_SETTINGS = LO_SALV->GET_DISPLAY_SETTINGS( )
R_COLUMNS = LO_SALV->GET_COLUMNS( )
R_AGGREGATIONS = LO_SALV->GET_AGGREGATIONS( )
R_SELECTIONS = LO_SALV->GET_SELECTIONS( )
S_LAYOUT = LT_METADATA-S_LAYOUT
).
LO_SALV->DISPLAY( ).
ELSE.
WRITE:/ 'NOT ASSIGNED'.
ENDIF.
'ABAP > Function|Class' 카테고리의 다른 글
[Function] POPUP_GET_VALUES_DB_CHECKED - 필드값 입력 팝업 (0) | 2023.12.18 |
---|---|
[Function] POPUP_GET_VALUES - 필드값 입력 팝업 (0) | 2023.12.18 |
[Class] CL_SEC_SXML_WRITER - AES256 암호화/복호화 (0) | 2023.11.30 |
[Class] BASE64 ENCODE/DECODE (0) | 2023.11.30 |
[Function] BASE64 ENCODE/DECODE (0) | 2023.11.30 |
댓글