Tree Control對象與ALV Grid對象關聯

*&---------------------------------------------------------------------*
*& Report YTEST00A
*&---------------------------------------------------------------------*
*&Violin 2021/4/29
*&---------------------------------------------------------------------*
REPORT ytest00a.

*第9章 Tree Control的使用---------------------------------------------------------------------*
*9.3Tree Control對象與ALV Grid對象關聯
**功能碼返回值
DATA: ok_code TYPE sy-ucomm,
      save_ok TYPE sy-ucomm.

DATA: wa_container           TYPE scrfname VALUE 'TREE',
      wa_containeralv        TYPE scrfname VALUE 'ALV',
      wa_custom_container    TYPE REF TO cl_gui_custom_container,
      wa_custom_containeralv TYPE REF TO cl_gui_custom_container,
      wa_tree                TYPE REF TO cl_gui_simple_tree,
      wa_alv                 TYPE REF TO cl_gui_alv_grid.

DATA:node_table LIKE TABLE OF mtreesnode,
     node1      TYPE mtreesnode.

DATA wa_spfli TYPE TABLE OF spfli WITH HEADER LINE.
DATA wa_sflight TYPE TABLE OF sflight.

DATA: nodekey(200)  VALUE 'NODE',
      nodetext(200) VALUE 'NODE'.

CLASS lcl_application DEFINITION DEFERRED.

DATA event_receiver TYPE REF TO lcl_application.

CLASS lcl_application DEFINITION.
  PUBLIC SECTION.
    METHODS handle_node_double_click
      FOR EVENT node_double_click
                  OF cl_gui_simple_tree
      IMPORTING node_key.
ENDCLASS.

CLASS lcl_application IMPLEMENTATION.
  METHOD handle_node_double_click.
    nodekey = node_key.
    READ TABLE node_table WITH KEY node_key = node_key INTO node1.
    nodetext = node1-text.
    CLEAR wa_sflight.

    SELECT * INTO TABLE wa_sflight FROM sflight
      WHERE carrid = node1-node_key+2(2) AND connid = node1-node_key+4(4).

    CALL METHOD wa_alv->set_table_for_first_display
      EXPORTING
*       i_buffer_active               =
*       i_bypassing_buffer            =
*       i_consistency_check           =
        i_structure_name              = 'SFLIGHT'
*       is_variant                    =
*       i_save                        =
*       i_default                     = 'X'
*       is_layout                     =
*       is_print                      =
*       it_special_groups             =
*       it_toolbar_excluding          =
*       it_hyperlink                  =
*       it_alv_graphics               =
*       it_except_qinfo               =
*       ir_salv_adapter               =
      CHANGING
        it_outtab                     = wa_sflight
*       it_fieldcatalog               =
*       it_sort                       =
*       it_filter                     =
      EXCEPTIONS
        invalid_parameter_combination = 1
        program_error                 = 2
        too_many_lines                = 3
        OTHERS                        = 4.
    IF sy-subrc <> 0.
*      Implement suitable error handling here
    ENDIF.

  ENDMETHOD.

ENDCLASS.

DATA g_application TYPE REF TO lcl_application.


START-OF-SELECTION.
  SELECT * INTO TABLE wa_spfli FROM spfli
    ORDER BY countryfr carrid ASCENDING.

  CREATE OBJECT g_application.
  SET SCREEN 592.

MODULE status_0100 OUTPUT.
  IF wa_custom_container IS INITIAL.
    PERFORM create_tree.
  ENDIF.
ENDMODULE.

MODULE user_command_0100 INPUT.
  save_ok = ok_code.
  CLEAR ok_code.
  CASE save_ok.
    WHEN 'EXIT'.
      LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.

FORM create_tree.
  DATA:events TYPE cntl_simple_events,
       event1 TYPE cntl_simple_event.

  CREATE OBJECT wa_custom_container
    EXPORTING
      container_name = wa_container.

  CREATE OBJECT wa_custom_containeralv
    EXPORTING
      container_name = wa_containeralv.

  CREATE OBJECT wa_alv
    EXPORTING
      i_parent = wa_custom_containeralv.

  CREATE OBJECT wa_tree
    EXPORTING
      parent              = wa_custom_container
      node_selection_mode = cl_gui_simple_tree=>node_sel_mode_single.
  IF sy-subrc <> 0.

  ENDIF.

  DATA: countryfr LIKE spfli-countryfr,
        carrid    LIKE spfli-carrid.

  DATA: str1(255).

  LOOP AT wa_spfli.
    IF countryfr NE wa_spfli-countryfr.
      CLEAR node1.
      node1-node_key = wa_spfli-countryfr.


*  第一層
      CLEAR node1-relatkey.
      CLEAR node1-relatship.

*  是文件夾
      node1-hidden = ''.
      node1-disabled = ''.
      node1-isfolder = 'X'.

*  不帶ICON
      CLEAR node1-n_image.
      CLEAR node1-exp_image.
      CLEAR node1-expander.

      node1-text = wa_spfli-countryfr.
      APPEND node1 TO node_table.
*
    ENDIF.

    IF ( countryfr NE wa_spfli-countryfr ) OR ( carrid <> wa_spfli-carrid ).
      CLEAR node1.
      CONCATENATE wa_spfli-countryfr wa_spfli-carrid INTO node1-node_key.

*上層關係
      node1-relatkey = wa_spfli-countryfr.
      node1-relatship = cl_gui_simple_tree=>relat_last_child.
      node1-hidden = ''.
      node1-disabled = ''.
      node1-isfolder = 'X'.
      CLEAR node1-n_image.
      CLEAR node1-exp_image.
      CLEAR node1-expander.
*節點顯示CARRID
      node1-text = wa_spfli-carrid.
      APPEND node1 TO node_table.

    ENDIF.

    countryfr = wa_spfli-countryfr.
    carrid = wa_spfli-carrid.
    CLEAR node1.
    CONCATENATE wa_spfli-countryfr wa_spfli-carrid wa_spfli-connid INTO node1-node_key.
    CONCATENATE wa_spfli-countryfr wa_spfli-carrid INTO str1.

*上層關係
    node1-relatkey = str1.
    node1-relatship = cl_gui_simple_tree=>relat_last_child.
    node1-hidden = ''.
    node1-disabled = ''.
    node1-isfolder = 'X'.
    node1-n_image = '@5B@'.
    node1-exp_image = '@5B@'.
    CLEAR node1-expander.
*    CLEAR node1.
*    CONCATENATE wa_spfli-carrid ':' wa_spfli-cityfrom INTO node1-node_key.
    CONCATENATE wa_spfli-countryfr ':' wa_spfli-carrid ':' wa_spfli-connid  INTO str1.
    node1-text = str1.
    APPEND node1 TO node_table.

  ENDLOOP.

  CALL METHOD wa_tree->add_nodes
    EXPORTING
      table_structure_name           = 'MTREESNODE'
      node_table                     = node_table
    EXCEPTIONS
      error_in_node_table            = 1
      failed                         = 2
      dp_error                       = 3
      table_structure_name_not_found = 4
      OTHERS                         = 5.
  IF sy-subrc <> 0.
*           Implement suitable error handling here
  ENDIF.
*
*    定義雙擊事件
  event1-eventid = cl_gui_simple_tree=>eventid_node_double_click.
  event1-appl_event = 'X'.
  APPEND event1 TO events.

  CALL METHOD wa_tree->set_registered_events
    EXPORTING
      events                    = events
    EXCEPTIONS
      cntl_error                = 1
      cntl_system_error         = 2
      illegal_event_combination = 3
      OTHERS                    = 4.
  IF sy-subrc <> 0.
*     Implement suitable error handling here
  ENDIF.
*將已定義的雙擊事件分配至樹對象
  SET HANDLER g_application->handle_node_double_click FOR wa_tree.

ENDFORM.

另外可參考:https://www.pianshen.com/article/46991253530/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值