
STARTING AT : 시작 지점, ENDING AT : 종료 지점
POPUP 스크린의 크기 = screen painter에서 screen element 크기로 지정함
lc = left column . ← 4 넣으면 왼쪽에서부터 4 칼럼 이동한 위치.
ur = upper row. ← 2 넣으면 위에서부터 2 row 이동한 위치.
Screen type - Modal dialog box 아니고 Normal 로 할 것( 모달로 하면 번거로움)
정해진 팝업 위치는 없으니 적당히 띄워 만들면 됨
- 단, 팝업 스크린을 docking container로 만들면 설정한 크기만큼 뜨지 않는 문제 발생
- → 팝업 스크린은 custom container로 만듦
*& Include Z~~~TOP
*-- Popup
DATA : go_pop_cont TYPE REF TO cl_gui_custom_container, " Popup
go_pop_grid TYPE REF TO cl_gui_alv_grid. " Popup
" ...
DATA : gt_scarr LIKE TABLE OF gs_scarr,
gt_spfli TYPE TABLE OF spfli. " For display Popup
" ...
*-- For Popup
DATA : gt_pfcat TYPE lvc_t_fcat,
gs_pfcat TYPE lvc_s_fcat,
gs_playout TYPE lvc_s_layo.
FORM handle_double_click USING pv_row pv_column.
" DATA : lt_spfli TYPE TABLE OF spfli,
" lt_sflight TYPE TABLE OF sflight.
*-- Get Selected row
CLEAR gs_scarr.
READ TABLE gt_scarr INTO gs_scarr INDEX pv_row.
*-- Get popup data
CLEAR gt_spfli.
SELECT carrid connid countryfr countryto cityfrom cityto
INTO CORRESPONDING FIELDS OF TABLE gt_spfli
FROM spfli
WHERE carrid EQ gs_scarr-carrid.
IF gt_spfli IS INITIAL.
MESSAGE s037 DISPLAY LIKE 'E'.
EXIT. **" 100번 스크린 내에서 STOP 금지. 대신 EXIT 사용해 루틴 빠져나감**
* ELSE. **<- ELSE 해도 되긴 한데 그냥 if initial. Exit이 더 깔끔.**
* CALL SCREEN 101 STARTING AT 03 05.
ENDIF.
*-- Call popup screen
CALL SCREEN 101 STARTING AT 03 05.
*-- Column 별로 logic 분리
* CASE pv_column.
* WHEN 'CARRID'.
* PERFORM get_spfli USING gs_scarr-carrid.
* WHEN 'CARRNAME'.
* PERFORM get_sflight USING gs_scarr-carrid.
* ENDCASE.
ENDFORM.

MODULE init_popup_control OUTPUT.
PERFORM display_popup.
ENDMODULE.
FORM display_popup .
IF go_pop_cont IS NOT BOUND.
CLEAR : gt_pfcat, gs_pfcat.
PERFORM set_pop_field_catalog USING : 'X' 'CARRID' 'SPFLI' 'C' ' ',
'X' 'CONNID' 'SPFLI' 'C' ' ',
' ' 'COUNTRYFR' 'SPFLI' 'C' ' ',
' ' 'COUNTRYTO' 'SPFLI' 'C' ' ',
' ' 'CITYFROM' 'SPFLI' ' ' 'X',
' ' 'CITYTO' 'SPFLI' ' ' 'X'.
*-- set popup layout
gs_playout-zebra = abap_true.
gs_playout-cwidth_opt = 'A'.
gs_playout-sel_mode = 'D'.
PERFORM create_pop_object.
CALL METHOD go_pop_grid->set_table_for_first_display
EXPORTING
i_save = 'A'
i_default = 'X'
is_layout = gs_playout
CHANGING
it_outtab = gt_spfli
it_fieldcatalog = gt_pfcat.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form set_pop_field_catalog
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> P_
*& --> P_
*& --> P_
*& --> P_
*& --> P_
*&---------------------------------------------------------------------*
FORM set_pop_field_catalog USING pv_key pv_field pv_table pv_just pv_emph.
gs_pfcat-key = pv_key.
gs_pfcat-fieldname = pv_field.
gs_pfcat-ref_table = pv_table.
gs_pfcat-just = pv_just.
gs_pfcat-emphasize = pv_emph.
APPEND gs_pfcat TO gt_pfcat.
CLEAR gs_pfcat.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form create_pop_object
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM create_pop_object .
*-- Create popup container (Custom container)
CREATE OBJECT go_pop_cont
EXPORTING
container_name = 'POP_CONT'.
*-- Create popup grid
CREATE OBJECT go_pop_grid
EXPORTING
i_parent = go_pop_cont.
ENDFORM.
MODULE exit_pop INPUT.
CALL METHOD : go_pop_grid->free,
go_pop_cont->free.
FREE : go_pop_grid, go_pop_cont.
LEAVE TO SCREEN 0.
ENDMODULE.

결과 : Function key는 없지만 F3 / x버튼 누르면 종료됨( exit 모듈 있어야만 종료됨)

Custom container - screen painter에서 설정해준 크기만큼만 팝업 스크린이 띄워지는 것 알 수 있음

gs_playout-no_toolbar = abap_true.
layout-grid_title 주면 alv 자체에 title 설정 가능
gs_playout-grid_title = 'Flight schedule'.
결과 : 툴바 없어짐. alv 자체 타이틀 생성됨
gs_playout-smalltitle = abap_true.
