OO TREE

*&---------------------------------------------------------------------*
*& REPORT zuetest.  ALV TREE程序应用实例
*&---------------------------------------------------------------------*
在网上看到的ALV TREE程序都是使用在屏幕上使用ALV TREE的例子,样式非常
的呆板,为了满足客户的需要,我根据系统程序,使用ALV对象与屏幕对象自
己写了一个例子。本程序可以充分填充屏幕的大小,方便大屏幕与宽屏幕计算
机用户的使用。
*---------------------------------------------------------------------*
REPORT ztest_tree NO STANDARD PAGE HEADING.

************************************************************************
** 定义变量与内表
************************************************************************
DATA tt_fieldcat TYPE lvc_t_fcat.
DATA wa_fieldcat LIKE LINE OF tt_fieldcat.
DATA l_pos TYPE i.

DATA: gt_sflight      TYPE sflight OCCURS 0,      "Output-Table
      gt_fieldcatalog TYPE lvc_t_fcat, "Fieldcatalog
      gt_sort         TYPE lvc_t_sort, "Sortiertabelle
      ok_code         LIKE sy-ucomm.   "OK-Code

CLASS cl_gui_column_tree DEFINITION LOAD.
CLASS cl_gui_cfw DEFINITION LOAD.

DATA: ls_variant TYPE disvariant.
DATA tree1  TYPE REF TO cl_gui_alv_tree_simple.
DATA: lt_list_commentary TYPE slis_t_listheader,
      l_logo             TYPE sdydo_value.

INCLUDE <icon>.
INCLUDE ztest_tree_event_receiver.
************************************************************************
** 定义宏 Define the macro
************************************************************************
DEFINE m_fieldcat.
  clear wa_fieldcat.
  wa_fieldcat-col_pos l_pos 1.
  wa_fieldcat-fieldname &1.
  wa_fieldcat-seltext &2.
  wa_fieldcat-coltext &2.
  wa_fieldcat-outputlen &3.
  append wa_fieldcat to tt_fieldcat.
END-OF-DEFINITION.
*&---------------------------------------------------------------------*
*& Define the Classes:初始化屏幕
*&---------------------------------------------------------------------*
CLASS screen_init DEFINITION CREATE PRIVATE.
  PUBLIC SECTION.
    CLASS-METHODS init_screen.
    METHODS constructor.
  PRIVATE SECTION.
    DATA: splitter_h TYPE REF TO cl_gui_splitter_container,
          picture TYPE REF TO cl_gui_picture,
          tree TYPE REF TO cl_gui_simple_tree,
          picture1 TYPE REF TO cl_gui_picture,
          tree1 TYPE REF TO  cl_gui_alv_tree_simple.
    METHODS: fill_tree,
             fill_picture.
ENDCLASS.                    "screen_init DEFINITION
*&--------------------------------------------------------------------*
*& 实现类:初始化屏幕
*&--------------------------------------------------------------------*
CLASS screen_init IMPLEMENTATION.
  METHOD init_screen.
    DATA screen TYPE REF TO screen_init.
    CREATE OBJECT screen.
  ENDMETHOD.                    "init_screen
构造方法
  METHOD constructor.
    DATA: events TYPE cntl_simple_events,
          event LIKE LINE OF events,
          grid  TYPE REF TO cl_gui_alv_grid,
          alv_variant  TYPE disvariant,
          alv_exclude TYPE ui_functions,
          gs_layout1   TYPE lvc_s_layo,
          container_left TYPE REF TO cl_gui_container.

    CREATE OBJECT splitter_h
      EXPORTING
        parent  cl_gui_container=>screen0
        rows    1
        columns 1.

    CALL METHOD splitter_h->set_border
      EXPORTING
        border cl_gui_cfw=>true.

    CALL METHOD splitter_h->set_column_mode
      EXPORTING
        mode splitter_h->mode_absolute.

    CALL METHOD splitter_h->set_column_width
      EXPORTING
        id    1
        width 207.

    container_left  splitter_h->get_container( row column ).

    CREATE OBJECT tree1
      EXPORTING
        i_parent                    container_left
        i_node_selection_mode       cl_gui_column_tree=>node_sel_mode_single"multiple
        i_item_selection            ''
        i_no_html_header            ''
        i_no_toolbar                ''
      EXCEPTIONS
        cntl_error                  1
        cntl_system_error           2
        create_error                3
        lifetime_error              4
        illegal_node_selection_mode 5
        failed                      6
        illegal_column_name         7.

    PERFORM build_comment USING
                lt_list_commentary
                l_logo.

    ls_variant-report sy-repid.
  register events
   perform register_events.
define the events which will be passed to the backend
    DATA: lt_events TYPE cntl_simple_events,
          l_event TYPE cntl_simple_event.

define the events which will be passed to the backend
    l_event-eventid cl_gui_column_tree=>eventid_node_context_menu_req.
    APPEND l_event TO lt_events.

   l_event-eventid cl_gui_column_tree=>eventid_item_context_menu_req.
   APPEND l_event TO lt_events.
    l_event-eventid cl_gui_column_tree=>eventid_header_context_men_req.
    APPEND l_event TO lt_events.
    l_event-eventid cl_gui_column_tree=>eventid_expand_no_children.
    APPEND l_event TO lt_events.
    l_event-eventid cl_gui_column_tree=>eventid_header_click.
    APPEND l_event TO lt_events.
   l_event-eventid cl_gui_column_tree=>eventid_item_keypress.
   APPEND l_event TO lt_events.
    l_event-eventid cl_gui_column_tree=>eventid_selection_changed.
    APPEND l_event TO lt_events.

    CALL METHOD tree1->set_registered_events
      EXPORTING
        events                    lt_events
      EXCEPTIONS
        cntl_error                1
        cntl_system_error         2
        illegal_event_combination 3.
set Handler
    DATA: l_event_receiver TYPE REF TO lc_tree_event_receiver.
    CREATE OBJECT l_event_receiver.
    SET HANDLER l_event_receiver->on_selection_changed FOR tree1.

    PERFORM f_data_display USING tree1.
  ENDMETHOD.                    "constructor
填充图片
  METHOD fill_picture.
  ENDMETHOD.                    "fill_picture
填充树对象
  METHOD fill_tree.
  ENDMETHOD.                    "fill_tree
ENDCLASS.                    "screen_init IMPLEMENTATION
************************************************************************
**  Program execution
************************************************************************
INITIALIZATION.
 PERFORM f_init_data.

START-OF-SELECTION.
  PERFORM build_fieldcatalog.
  PERFORM build_outtab.
  PERFORM build_sort_table.
  CALL SCREEN 100.

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
 Dialog Modules PBO and PAI
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'MAIN100'.
  SET TITLEBAR 'TIT_100'.
  CALL METHOD screen_init=>init_screen.
ENDMODULE.                    "status_0100 OUTPUT
Dialog Modules PAI
MODULE cancel INPUT.
  CASE ok_code.
    WHEN 'EXIT' OR 'BACK' OR 'CANC'.
      PERFORM exit_program.

    WHEN OTHERS.
      CALL METHOD cl_gui_cfw=>dispatch.
  ENDCASE.
  CLEAR ok_code.
ENDMODULE.                    "cancel INPUT
*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
FORM build_fieldcatalog.
get fieldcatalog
  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      i_structure_name 'SFLIGHT'
    CHANGING
      ct_fieldcat      gt_fieldcatalog.
change fieldcatalog
  DATA: ls_fieldcatalog TYPE lvc_s_fcat.
  LOOP AT gt_fieldcatalog INTO ls_fieldcatalog.
    CASE ls_fieldcatalog-fieldname.
      WHEN 'CARRID' OR 'CONNID' OR 'FLDATE'.
        ls_fieldcatalog-no_out 'X'.
        ls_fieldcatalog-key    ''.
      WHEN 'PRICE' OR 'SEATSOCC' OR 'SEATSMAX' OR 'PAYMENTSUM'.
        ls_fieldcatalog-do_sum 'X'.
    ENDCASE.
    MODIFY gt_fieldcatalog FROM ls_fieldcatalog.
  ENDLOOP.
ENDFORM.                               BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
*&      Form  BUILD_OUTTAB
*&---------------------------------------------------------------------*
      给输出的结果内表赋值
*----------------------------------------------------------------------*
FORM build_outtab.
  SELECT FROM sflight INTO TABLE gt_sflight.
ENDFORM.                               BUILD_OUTTAB
*&---------------------------------------------------------------------*
*&      Form  BUILD_SORT_TABLE
*&---------------------------------------------------------------------*
      创建排序内表
*----------------------------------------------------------------------*
FORM build_sort_table.
  DATA ls_sort_wa TYPE lvc_s_sort.
create sort-table
  ls_sort_wa-spos 1.
  ls_sort_wa-fieldname 'CARRID'.
  ls_sort_wa-up 'X'.
  ls_sort_wa-subtot 'X'.
  APPEND ls_sort_wa TO gt_sort.

  ls_sort_wa-spos 2.
  ls_sort_wa-fieldname 'CONNID'.
  ls_sort_wa-up 'X'.
  ls_sort_wa-subtot 'X'.
  APPEND ls_sort_wa TO gt_sort.

  ls_sort_wa-spos 3.
  ls_sort_wa-fieldname 'FLDATE'.
  ls_sort_wa-up 'X'.
  APPEND ls_sort_wa TO gt_sort.

ENDFORM.                               BUILD_SORT_TABLE
*&---------------------------------------------------------------------*
*&      Form  build_header
*&---------------------------------------------------------------------*
      build table for html_header
*----------------------------------------------------------------------*
FORM build_comment USING
      pt_list_commentary TYPE slis_t_listheader
      p_logo             TYPE sdydo_value.

  DATA: ls_line TYPE slis_listheader.
LIST HEADING LINE: TYPE H
  CLEAR ls_line.
  ls_line-typ  'H'.
LS_LINE-KEY:  NOT USED FOR THIS TYPE
  ls_line-info 'ALV-tree-simple-Demo: flight-overview'.   "#EC NOTEXT
  APPEND ls_line TO pt_list_commentary.
STATUS LINE: TYPE S
  CLEAR ls_line.
  ls_line-typ  'S'.
  ls_line-key  'valid to'.                                "#EC NOTEXT
  ls_line-info 'January 29 1999'.                         "#EC NOTEXT
  APPEND ls_line TO pt_list_commentary.
  ls_line-key  'time'.
  ls_line-info '2.00 pm'.                                 "#EC NOTEXT
  APPEND ls_line TO pt_list_commentary.
ACTION LINE: TYPE A
  CLEAR ls_line.
  ls_line-typ  'A'.
LS_LINE-KEY:  NOT USED FOR THIS TYPE
  ls_line-info 'up-to-date data'.                         "#EC NOTEXT
  APPEND ls_line TO pt_list_commentary.

  p_logo 'ENJOYSAP_LOGO'.
ENDFORM.                    "build_comment
*&---------------------------------------------------------------------*
*&      Form  F_DATA_DISPLAY
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
FORM f_data_display USING tree1 TYPE REF TO cl_gui_alv_tree_simple.
create hierarchy
  CALL METHOD tree1->set_table_for_first_display
    EXPORTING
      it_list_commentary lt_list_commentary
      i_logo             l_logo
      i_background_id    'ALV_BACKGROUND'
      i_save             'A'
      is_variant         ls_variant
    CHANGING
      it_sort            gt_sort
      it_outtab          gt_sflight
      it_fieldcatalog    gt_fieldcatalog.
expand first level
  CALL METHOD tree1->expand_tree
    EXPORTING
      i_level 1.
optimize column-width
  CALL METHOD tree1->column_optimize
    EXPORTING
      i_start_column tree1->c_hierarchy_column_name
      i_end_column   tree1->c_hierarchy_column_name.
ENDFORM.                    F_DATA_DISPLAY
*&---------------------------------------------------------------------*
*&      Form  exit_program
*&---------------------------------------------------------------------*
      free object and leave program
*----------------------------------------------------------------------*
FORM exit_program.
 CALL METHOD tree1->free.
  SET SCREEN 0.
 LEAVE PROGRAM.
ENDFORM.

 

------------------------

  INCLUDE ztest_tree_event_receiver.  see souece code below

 

  *&---------------------------------------------------------------------*
*&  Include           ZTEST_TREE_EVENT_RECEIVER
*&---------------------------------------------------------------------*
CLASS lc_tree_event_receiver DEFINITION.

  PUBLIC SECTION.

    METHODS: on_selection_changed
              FOR EVENT selection_changed OF cl_gui_alv_tree_simple
                    IMPORTING index_outtab
                              grouplevel.

ENDCLASS.

CLASS lc_tree_event_receiver IMPLEMENTATION.

  METHOD on_selection_changed.
    DATA ls_outtab_line TYPE sflight.
    ls_outtab_line-planetype 'Note'. "#EC NOTEXT

    DATA lv_str TYPE string.
    CONCATENATE index_outtab '--' grouplevel INTO lv_str.

    MESSAGE lv_str TYPE 'I'.
  ENDMETHOD.

ENDCLASS.  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值