cl_simple_tree_model -- 3

 

*&---------------------------------------------------------------------*
*& Report  Z_SIMPLE_TREE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  Z_SIMPLE_TREE.

class grid_event_receiver definition deferred.
CLASS cl_gui_cfw DEFINITION LOAD.

DATA: simple_tree TYPE REF TO cl_simple_tree_model,
      customer_container TYPE REF TO cl_gui_custom_container,
      w_splitter TYPE REF TO cl_gui_splitter_container,
      grid1  type ref to cl_gui_alv_grid,
      w_left TYPE REF TO cl_gui_container,
      w_body TYPE REF TO cl_gui_container,
      Save_ok TYPE sy-ucomm,
      OK_CODE TYPE sy-ucomm,
      event_receiver TYPE REF TO grid_event_receiver,
      g_sflight LIKE sflight OCCURS 0 WITH HEADER LINE,
      g_sflight_Detail type table of sflight WITH HEADER LINE.

set SCREEN 100.

*----------------------------------------------------------------------*
*       CLASS grid_event_receiver DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS grid_event_receiver DEFINITION.
  PUBLIC SECTION.
    METHODS:
      handler_double_click FOR EVENT NODE_DOUBLE_CLICK of cl_simple_tree_model
        IMPORTING NODE_KEY.
ENDCLASS.                    "grid_event_receiver DEFINITION

*----------------------------------------------------------------------*
*       CLASS grid_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS grid_event_receiver IMPLEMENTATION.
  METHOD handler_double_click.
    PERFORM GetDetail USING NODE_KEY.
  ENDMETHOD.                    "handler_double_click
ENDCLASS.                    "grid_event_receiver IMPLEMENTATION
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
  Save_ok = OK_CODE.
  CLEAR OK_CODE.
  DATA: return_code TYPE i.
  CALL METHOD cl_gui_cfw=>dispatch
    IMPORTING
      return_code = return_code.
  IF return_code <> cl_gui_cfw=>rc_noevent.
    " a control event occured => exit PAI
    CLEAR Save_ok.
    EXIT.
  ENDIF.


  CASE Save_ok .
    WHEN 'EXIT'.
      LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
  SET PF-STATUS 'MAIN0100'.

  IF simple_tree is INITIAL.
    DATA: event TYPE cntl_simple_event,
          events TYPE cntl_simple_events.
    CREATE OBJECT customer_container
      EXPORTING
*        PARENT                      =
        CONTAINER_NAME              = 'TREE'.
    CREATE OBJECT w_splitter
    EXPORTING
      parent  = customer_container
      rows    = 1
      columns = 2.
    CALL METHOD w_splitter->get_container
      EXPORTING
        row       = 1
        column    = 1
      RECEIVING
        container = w_left.
    CALL METHOD w_splitter->get_container
      EXPORTING
        row       = 1
        column    = 2
      RECEIVING
        container = w_body.
    CALL METHOD w_splitter->set_column_width
      EXPORTING
        id    = 1
        width = 25.
    CREATE OBJECT simple_tree
      EXPORTING
        NODE_SELECTION_MODE         = cl_simple_tree_model=>node_sel_mode_single.

    CALL METHOD simple_tree->CREATE_TREE_CONTROL
      EXPORTING
        PARENT = w_left.

 

    event-eventid = cl_simple_tree_model=>eventid_node_double_click.
    event-appl_event = 'X'.
    APPEND event TO events.
    CALL METHOD simple_tree->SET_REGISTERED_EVENTS
      EXPORTING
        EVENTS = events.

    CREATE OBJECT event_receiver.
    SET HANDLER event_receiver->handler_double_click FOR simple_tree.

    PERFORM AddNode.
    CALL METHOD simple_tree->expand_node
      EXPORTING
        node_key       = '2008'
      EXCEPTIONS
        node_not_found = 1.

    call method cl_gui_cfw=>flush.
  ENDIF.
ENDMODULE.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Form  AddNode
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM AddNode .
  DATA: YYYY(4) TYPE C,
        MM(2) TYPE C,
        DD(2) TYPE C,
        l_yyyy(4) TYPE C,
        l_MM(2) TYPE C,
        l_DD(2) TYPE C,
        K_YYYY TYPE TM_NODEKEY,
        K_MM TYPE TM_NODEKEY.
  select * from sflight into table g_sflight up to 50 rows.

  SORT g_sflight BY fldate.
  DATA: nodekey TYPE TM_NODEKEY,
      nodetext TYPE TM_NODETXT.
  LOOP AT g_sflight.
    YYYY = g_sflight-fldate+0(4).
    MM   = g_sflight-fldate+4(2).
    DD   = g_sflight-fldate+6(2).
    IF YYYY <> l_yyyy.
      l_yyyy = YYYY.
      nodekey = YYYY.
      nodetext = yyyy.
      CALL METHOD simple_tree->add_node
        EXPORTING
          node_key          = nodekey                       "#EC NOTEXT
          isfolder          = 'X'
          text              = nodetext                      "#EC NOTEXT
          relationship      = cl_simple_tree_model=>RELAT_NEXT_SIBLING
          relative_node_key = K_YYYY
        EXCEPTIONS
          OTHERS            = 1.
      K_YYYY = YYYY.
    ENDIF.
    IF l_MM <> MM.
      l_MM = MM.
      nodekey = MM.
      nodetext = MM.
      CALL METHOD simple_tree->add_node
        EXPORTING
          node_key          = nodekey                       "#EC NOTEXT
          isfolder          = 'X'
          text              = nodetext                      "#EC NOTEXT
          relative_node_key = K_YYYY
          relationship      = cl_simple_tree_model=>relat_last_child
        EXCEPTIONS
          OTHERS            = 1.
      K_MM = MM.
    ENDIF.
    nodekey = g_sflight-fldate.
    nodetext = g_sflight-fldate.
    CALL METHOD simple_tree->add_node
      EXPORTING
        node_key          = nodekey                         "#EC NOTEXT
        isfolder          = ' '
        text              = nodetext                        "#EC NOTEXT
        relationship      = cl_simple_tree_model=>relat_last_child
        relative_node_key = K_MM
      EXCEPTIONS
        OTHERS            = 1.
  ENDLOOP.
ENDFORM.                    " AddNode
*&---------------------------------------------------------------------*
*&      Form  GetDetail
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_NODE_KEY  text
*----------------------------------------------------------------------*
FORM GetDetail  USING  P_NODE_KEY TYPE TM_NODEKEY.
  DATA: parent_key TYPE TM_NODEKEY,
        Child_table TYPE TREEMNOTAB,
        KEY_VALE(8) TYPE C.
  CALL METHOD simple_tree->NODE_GET_PARENT
    EXPORTING
      NODE_KEY        = P_NODE_KEY
    IMPORTING
      PARENT_NODE_KEY = parent_key.
  CALL METHOD simple_tree->NODE_GET_CHILDREN
    EXPORTING
      NODE_KEY       = P_NODE_KEY
    IMPORTING
      NODE_KEY_TABLE = Child_table.

  IF parent_key is INITIAL.
    KEY_VALE = P_NODE_KEY.
  ELSEIF  Child_table is INITIAL.
    KEY_VALE = P_NODE_KEY.
  ELSE.
    CONCATENATE parent_key P_NODE_KEY INTO KEY_VALE.
  ENDIF.
  PERFORM Get_Detail_DATA USING KEY_VALE.
ENDFORM.                    " GetDetail
*&---------------------------------------------------------------------*
*&      Form  Get_Detail_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_KEY_VALE  text
*----------------------------------------------------------------------*
FORM Get_Detail_DATA  USING P_KEY_VALE TYPE C.
  REFRESH g_sflight_Detail.
  LOOP AT g_sflight.
    if g_sflight-fldate CS P_KEY_VALE.
      move-CORRESPONDING g_sflight to g_sflight_Detail.
      APPEND g_sflight_Detail.
      CLEAR g_sflight_Detail.
    ENDIF.
  ENDLOOP.

  if grid1 is INITIAL.
    CREATE OBJECT grid1
      EXPORTING
        I_PARENT          = w_body.
  endif.
  CALL METHOD grid1->SET_TABLE_FOR_FIRST_DISPLAY
    EXPORTING
      I_STRUCTURE_NAME = 'SFLIGHT'
    CHANGING
      IT_OUTTAB        = g_sflight_Detail[].
  CALL METHOD grid1->REFRESH_TABLE_DISPLAY.

  IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  call method cl_gui_cfw=>flush.
*  PERFORM Init_Grid USING g_sflight_Detail.
ENDFORM.                    " Get_Detail_DATA
*&---------------------------------------------------------------------*
*&      Form  Init_Grid
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_G_SFLIGHT_DETAIL  text
*----------------------------------------------------------------------*
FORM Init_Grid  USING P_G_SFLIGHT_DETAIL STRUCTURE sflight.
*  if grid1 is INITIAL.
*    CREATE OBJECT grid1
*      EXPORTING
*        I_PARENT          = w_body.

*    CALL METHOD grid1->SET_TABLE_FOR_FIRST_DISPLAY
*      EXPORTING
*        I_STRUCTURE_NAME = 'SFLIGHT'
*      CHANGING
*        IT_OUTTAB        = P_G_SFLIGHT_DETAIL.

*  endif.
ENDFORM.                    " Init_Grid

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值