SAP에서는 SCREEN0을 통해 화면 전환 없이 ALV Grid를 직접 그릴 수 있음.
SCREEN0은 SAP 표준 전체 화면을 의미하며, 여기서는 별도의 CALL SCREEN이나 화면 전환 없이 ALV를 표시할 수 있음.
PBO와 PAI 모듈을 사용할 수 없기 때문에, AT SELECTION-SCREEN OUTPUT과 AT SELECTION-SCREEN 이벤트로 화면 요소를 설정하거나 사용자 입력을 처리해야 함.
SCREEN0에서 ALV를 제대로 표시하려면 마지막에 WRITE '' 구문을 추가해 화면 갱신을 보장해야 함.
SCREEN0을 부모 컨테이너로 설정하여 ALV Grid를 표시하는 예제
REPORT zrnat_display_screen0_alv.
DATA: go_alv_grid TYPE REF TO cl_gui_alv_grid,
gt_display TYPE TABLE OF sflight.
PARAMETERS p_carrid TYPE sflight-carrid.
" 선택 화면이 출력되기 전 필드 속성 설정 (PBO 대체)
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF screen-name = 'P_CARRID' AND p_carrid IS INITIAL.
screen-active = 1.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
" 사용자의 선택 화면 입력 처리 (PAI 대체)
AT SELECTION-SCREEN.
IF sy-ucomm = 'ONLI'. " 실행 버튼을 눌렀을 때
PERFORM load_data. " 데이터 로드
PERFORM display_alv_data. " ALV 데이터 출력
ENDIF.
START-OF-SELECTION.
PERFORM load_data.
PERFORM display_alv_data.
FORM load_data.
" 데이터베이스에서 sflight 데이터를 조회하여 gt_display에 저장
SELECT * INTO TABLE gt_display
FROM sflight
WHERE carrid = p_carrid.
ENDFORM.
FORM display_alv_data.
" ALV Grid 객체 생성 및 설정
IF go_alv_grid IS INITIAL.
CREATE OBJECT go_alv_grid
EXPORTING
i_parent = cl_gui_container=>screen0.
ENDIF.
" 필드 카탈로그 설정
DATA: lt_fieldcat TYPE lvc_t_fcat,
ls_fieldcat TYPE lvc_s_fcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'CARRID'.
ls_fieldcat-seltext = 'Carrier ID'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'CONNID'.
ls_fieldcat-seltext = 'Connection ID'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'FLDATE'.
ls_fieldcat-seltext = 'Flight Date'.
APPEND ls_fieldcat TO lt_fieldcat.
" ALV 데이터 설정 및 출력
CALL METHOD go_alv_grid->set_table_for_first_display
EXPORTING
i_structure_name = 'SFLIGHT'
CHANGING
it_outtab = gt_display
it_fieldcatalog = lt_fieldcat.
WRITE ''.
ENDFORM.
AT SELECTION-SCREEN OUTPUT: SCREEN0에서 ALV를 출력하기 전에 필드의 활성화 여부를 설정하여 PBO와 유사한 역할을 수행함.
AT SELECTION-SCREEN: sy-ucomm을 사용하여 실행 버튼(‘ONLI’)을 눌렀을 때 데이터 로드와 ALV 출력을 수행함.
WRITE '': 마지막에 WRITE ''를 추가하여 화면 갱신을 보장함. SCREEN0을 사용하는 경우 이 구문이 있어야 ALV가 화면에 정상적으로 그려짐.