ALV 리포트의 백그라운드 실행
cl_gui_alv_grid=>offline( )
ALV를 사용하는 CBO 리포트를 백그라운드로 실행시 Container 생성에서 덤프가 발생하는 경우가 종종 있습니다.
Dialog가 아닌 경우 구조적으로 GUI Container를 생성할 수 없어서, 대부분의 표준 리포트는
cl_gui_alv_grid=>offline 메소드를 이용하여 현재 사용 환경이 Dialog인지 Background(또는 RFC 등등 Dialog 환경이 아닌 경우)인지 구분하여 container 생성 여부를 분기 처리합니다.
# 소스코드 예시
DATA: BEGIN OF lo_grid,
container TYPE REF TO cl_gui_docking_container,
grid TYPE REF TO cl_gui_alv_grid,
END OF lo_grid.
IF cl_gui_alv_grid=>offline( ) IS INITIAL.
"Dialog
"Docking Container 생성
CREATE OBJECT lo_grid-container
EXPORTING
extension = 2500
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
OTHERS = 6.
IF sy-subrc <> 0.
RETURN.
ENDIF.
ELSE.
"Background
IF lo_grid-container IS BOUND.
CALL METHOD lo_grid-container->free
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
OTHERS = 3.
CLEAR lo_grid-container.
ENDIF.
ENDIF.
"ALV Grid 생성
CREATE OBJECT lo_grid-grid
EXPORTING
i_parent = lo_grid-container
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
OTHERS = 5.
# New Syntax 소스코드 예시
IF cl_gui_alv_grid=>offline( ) IS INITIAL.
"Dialog
"Docking Container 생성
lo_grid-container = NEW #( extension = 2500 ).
"ALV Grid 생성
lo_grid-grid = NEW #( i_parent = lo_grid-container ).
ELSE.
"Background
"ALV Grid 생성
lo_grid-grid = NEW #( i_parent = VALUE #( ) ).
ENDIF.
# New Syntax로 더 단축할 경우
lo_grid-grid = NEW #( i_parent = COND #( WHEN cl_gui_alv_grid=>offline( ) IS INITIAL
THEN NEW cl_gui_docking_container( extension = 2500 )
ELSE VALUE #( ) ) ).
'ABAP > 개발Tip' 카테고리의 다른 글
[개발Tip] Internal Table 순차탐색과 Secondary Key 성능 비교 (0) | 2024.11.07 |
---|---|
[개발Tip] APPEND 성능 비교 (value for, loop, move 등) (0) | 2024.10.24 |
[개발Tip] ALV의 필드 정렬과 셀 정렬을 다르게 하고 싶을때 (0) | 2024.10.24 |
[개발Tip] ASCII 기준 문자열 자르기 (0) | 2024.10.24 |
[개발Tip] WebGUI에서 Excel 업로드(CL_FDT_XL_SPREADSHEET/ABAP2XLSX) (1) | 2023.12.07 |
댓글