html viewer를 이용한 실습

HI ·2020년 9월 22일

실습

목록 보기
1/2

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.

1) status_0100.

 set pf-status '0100'.
  set titlebar '0100'.

2) alv_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.

2-1) perform create_alv.

 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.

2-2) perform create_container.

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.

2-3) perform create_grid.

 create object go_grid
    exporting
      i_parent = go_docking_container.

2-4) perform set_layout.

form set_layout . "ALV PULL UNIT
  gs_layout-cwidth_opt = 'X'.
  gs_layout-sel_mode   = 'D' .
  gs_layout-zebra      = 'X'.      "

2-5) perform exclude_toolbar.

  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.

2-6) perform set_fieldcatalog.

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'        '음식유형명'.

2-7) perform create_event.

  create object event_receiver.
  set handler event_receiver->handle_double_click for go_grid.
  • 더블 클릭 이벤트를 이용하여 HTML 생성
  • 더블 클릭 이벤트를 사용하기 위해 object 생성

2-8) perform display_alv.

  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[].

3) user_command_0100.

case ok_code.
    when 'BACK' or 'CANC'.
      leave to screen 0.   
    when 'EXIT'.
      leave program.     
  endcase.

3. DOUBLE CLICK EVENT

1) class definition / implementation

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.

1-1) perform double_click using e_row e_column.

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.

1) CUSTOM CONTAINER

  • container name

  • url name

2) status_0200.

  SET PF-STATUS '200'.
  SET TITLEBAR '200'.

3) set_html.

MODULE set_html OUTPUT.
    PERFORM create_html.
ENDMODULE.                 " SET_HTML  OUTPUT

3-1) PERFORM create_html.

 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.
  • EVENT DEFINITION / IMPLEMENTATION
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.

3-2) PERFORM load_home_page.

  DATA: doc_url(80).
  doc_url = test_url.

  CALL METHOD html_control->show_url
    EXPORTING
      url = doc_url.

4) user_command_0200.

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.

0개의 댓글