SCREEN0을 활용한 ALV 그리기

Ada·2024년 11월 1일

SAP ABAP

목록 보기
21/21

SAP에서는 SCREEN0을 통해 화면 전환 없이 ALV Grid를 직접 그릴 수 있음.
SCREEN0은 SAP 표준 전체 화면을 의미하며, 여기서는 별도의 CALL SCREEN이나 화면 전환 없이 ALV를 표시할 수 있음.

SCREEN0을 사용할 때의 주의 사항

  • PBO와 PAI 모듈을 사용할 수 없기 때문에, AT SELECTION-SCREEN OUTPUT과 AT SELECTION-SCREEN 이벤트로 화면 요소를 설정하거나 사용자 입력을 처리해야 함.

  • SCREEN0에서 ALV를 제대로 표시하려면 마지막에 WRITE '' 구문을 추가해 화면 갱신을 보장해야 함.

예제 코드: SCREEN0을 이용한 ALV 그리기

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가 화면에 정상적으로 그려짐.

profile
백엔드 프로그래머

0개의 댓글