0. TOP
DATA : ok_code LIKE sy-ucomm.
DATA : BEGIN OF gs_alv ,
"선택
carrid LIKE scarr-carrid, "항공사코드
carrname LIKE scarr-carrname, "항공사이름
url LIKE scarr-url, "항공사URL
menunumber LIKE smenu-menunumber, "메뉴번호
starter LIKE smenu-starter, "메뉴 에피타이저
maincourse LIKE smenu-maincourse, "메인코스
dessert LIKE smenu-dessert, "디저트메뉴
hot LIKE sdessert-hot, "온냉구분
text TYPE c LENGTH 100 , "식사내역
mealnumber LIKE smeal-mealnumber, "기내식횟수
mealtype LIKE smeal-mealtype, "음식유형코드
text2 TYPE c LENGTH 100 , "음식유형명
END OF gs_alv.
DATA gt_alv LIKE TABLE OF gs_alv.
"ALV 관련
DATA : go_docking_container TYPE REF TO cl_gui_docking_container,
go_grid TYPE REF TO cl_gui_alv_grid,
gt_fieldcat TYPE lvc_t_fcat,
gs_fieldcat TYPE lvc_s_fcat,
gt_sort TYPE lvc_t_sort,
gs_sort TYPE lvc_s_sort,
gs_layout TYPE lvc_s_layo,
gs_variant TYPE disvariant,
gt_exclude TYPE ui_functions.
"HTML
DATA: html_control TYPE REF TO cl_gui_html_viewer,
my_container TYPE REF TO cl_gui_custom_container,
myevent_tab TYPE cntl_simple_events,
myevent TYPE cntl_simple_event,
edurl TYPE c LENGTH 2048 ,
alignment TYPE i.
DATA : test_url(5000).
1. SCREEN 1000

tables : scarr, smeal.
data gv_hot type c length 1.
selection-screen begin of block b1 with frame title text-001.
select-options s_carrid for scarr-carrid no-extension ."OBLIGATORY DEFAULT'AA'.
select-options s_mtype for smeal-mealtype .
parameters p_hot like gv_hot as checkbox . "DEFAULT 'X' .
selection-screen end of block b1.
2. SCREEN 100

process before output.
module status_0100.
module alv_0100.
process after input.
module user_command_0100.
set pf-status '0100'.
set titlebar '0100'.
module alv_0100 output.
perform create_alv.
endmodule.
※ set data
select a~carrid
a~carrname
a~url
b~menunumber
b~starter
b~maincourse
b~dessert
c~mealnumber "smeal
c~mealtype
d~hot
into corresponding fields of table gt_alv
from scarr as a
join smenu as b "DESSERT
on a~carrid = b~carrid
join smeal as c
on a~carrid = c~carrid
join sdessert as d "MEALNUMBER
on a~carrid = d~carrid
and b~dessert = d~mealnumber
where a~carrid in s_carrid
and c~mealtype in s_mtype
and d~hot = p_hot.
if gt_alv[] is not initial.
perform create_text.
endif.
data : lv_cnt type i.
lv_cnt = lines( gt_alv ).
if gt_alv[] is not initial.
message lv_cnt && '건' type 'S' .
else.
MESSAGE 'no data' TYPE 'I' DISPLAY LIKE 'E'.
LEAVE to SCREEN 0.
endif.
if go_docking_container is initial.
perform create_container.
perform create_grid.
perform set_layout.
perform exclude_toolbar.
perform set_fieldcatalog.
perform create_event.
perform display_alv.
endif.
create object go_docking_container
exporting
repid = sy-repid
dynnr = sy-dynnr
side = go_docking_container->dock_at_top
extension = 2000
exceptions
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
others = 6.
create object go_grid
exporting
i_parent = go_docking_container.
form set_layout . "ALV PULL UNIT
gs_layout-cwidth_opt = 'X'.
gs_layout-sel_mode = 'D' .
gs_layout-zebra = 'X'. "
data : ls_exclude type ui_func.
define _exclude.
ls_exclude = &1.
APPEND ls_exclude TO gt_exclude.
end-of-definition.
_exclude : cl_gui_alv_grid=>mc_fc_loc_copy, " Row copy
cl_gui_alv_grid=>mc_fc_loc_copy_row, " Row copy
cl_gui_alv_grid=>mc_fc_loc_cut, " Row cut
cl_gui_alv_grid=>mc_fc_loc_delete_row, " Row delete
cl_gui_alv_grid=>mc_fc_loc_insert_row, " Row insert
cl_gui_alv_grid=>mc_fc_refresh,
cl_gui_alv_grid=>mc_fc_check,
cl_gui_alv_grid=>mc_fc_loc_undo, " Undo
cl_gui_alv_grid=>mc_fc_detail,
cl_gui_alv_grid=>mc_fc_loc_append_row, " Row create
cl_gui_alv_grid=>mc_fc_loc_paste, " Overwirte
cl_gui_alv_grid=>mc_fc_loc_paste_new_row, " Overwirte
cl_gui_alv_grid=>mc_fc_graph,
cl_gui_alv_grid=>mc_fc_info.
define _append.
CLEAR gs_fieldcat.
gs_fieldcat-col_pos = &1.
gs_fieldcat-fieldname = &2.
gs_fieldcat-coltext = &3.
APPEND gs_fieldcat to gt_fieldcat.
end-of-definition.
_append : 10 'CARRID' '항공사코드',
20 'CARRNAME' '항공사이름',
30 'URL' '항공사URL',
40 'MENUNUMBER' '메뉴번호',
50 'STARTER' '메뉴 에피타이저',
60 'MAINCOURSE' '메인코스',
70 'DESSERT' '디저트메뉴',
80 'HOT' '온냉구분',
90 'TEXT' '식사내역',
100 'MEALNUMBER' '기내식횟수',
110 'MEALTYPE' '음식유형코드',
120 'TEXT2' '음식유형명'.
create object event_receiver.
set handler event_receiver->handle_double_click for go_grid.
gs_variant-report = sy-repid.
call method go_grid->set_table_for_first_display
exporting
is_layout = gs_layout
it_toolbar_excluding = gt_exclude
i_save = 'A'
changing
it_fieldcatalog = gt_fieldcat[]
it_outtab = gt_alv[].
case ok_code.
when 'BACK' or 'CANC'.
leave to screen 0.
when 'EXIT'.
leave program.
endcase.
3. DOUBLE CLICK EVENT
class lcl_event_receiver definition.
public section.
methods : handle_double_click
for event double_click of cl_gui_alv_grid
importing e_row
e_column.
endclass.
class lcl_event_receiver implementation.
method : handle_double_click.
perform double_click using e_row
e_column.
endmethod.
endclass.
data : event_receiver type ref to lcl_event_receiver.
form double_click using p_e_row
p_e_column.
read table gt_alv into gs_alv index p_e_row.
if sy-subrc = 0.
test_url = gs_alv-url.
call screen 200 .
endif.
endform. " DOUBLE_CLICK
4. SCREEN 200

PROCESS BEFORE OUTPUT.
MODULE status_0200.
MODULE set_html.
PROCESS AFTER INPUT.
MODULE user_command_0200.
container name

url name

SET PF-STATUS '200'.
SET TITLEBAR '200'.
MODULE set_html OUTPUT.
PERFORM create_html.
ENDMODULE. " SET_HTML OUTPUT
CREATE OBJECT my_container
EXPORTING
container_name = 'HTML'.
CREATE OBJECT html_control
EXPORTING
parent = my_container.
CALL METHOD html_control->set_registered_events
EXPORTING
events = myevent_tab.
CREATE OBJECT evt_receiver.
SET HANDLER evt_receiver->on_navigate_complete
FOR html_control.
PERFORM load_home_page.
CLASS cl_myevent_handler DEFINITION.
PUBLIC SECTION.
METHODS : on_navigate_complete
FOR EVENT navigate_complete OF cl_gui_html_viewer
IMPORTING url.
ENDCLASS.
CLASS cl_myevent_handler IMPLEMENTATION.
METHOD on_navigate_complete.
edurl = url.
ENDMETHOD.
ENDCLASS.
DATA: evt_receiver TYPE REF TO cl_myevent_handler.
DATA: doc_url(80).
doc_url = test_url.
CALL METHOD html_control->show_url
EXPORTING
url = doc_url.
CASE ok_code.
WHEN 'BACK' OR 'CANC'.
LEAVE TO SCREEN 0.
WHEN 'EXIT'.
LEAVE PROGRAM.
WHEN 'HNAV'. "enter
IF NOT edurl IS INITIAL.
CALL METHOD html_control->show_url
EXPORTING
url = edurl.
ENDIF.
ENDCASE.