SAP ABAP Tree Control 对象与ALV Grid 对象关联

Tree Control 对象与ALV Grid 对象关联

在双击 Tree 对象时,变更ALV Trid 对象的显示,实现界面如图9-11 所示。

Screen 设计界面如图9-12 所示。

主程序:

REPORT ytest36.
DATA: ok_code TYPE sy-ucomm,
      save_ok TYPE sy-ucomm.
DATA: wa_container           TYPE scrfname VALUE 'TREE1',
      wa_containeralv        TYPE scrfname VALUE 'ALV1',
      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
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
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. "lcl_application DEFINITION
*---------------------------------------------------------------------*
* CLASS lcl_application IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
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).
* CREATE OBJECT WA_ALV
* EXPORTING I_PARENT = WA_CUSTOM_CONTAINER.
    CALL METHOD wa_alv->set_table_for_first_display
      EXPORTING
        i_structure_name = 'SFLIGHT'
      CHANGING
        it_outtab        = wa_sflight.
  ENDMETHOD. "handle_node_double_click
ENDCLASS. "lcl_application IMPLEMENTATION
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 100.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
  IF wa_custom_container IS INITIAL.
    PERFORM create_tree.
  ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  save_ok = ok_code.
  CLEAR ok_code.
  CASE save_ok.
    WHEN 'EXIT'.
      LEAVE PROGRAM.
  ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Form CREATE_TREE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
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.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  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.
    CONCATENATE wa_spfli-carrid ':' wa_spfli-cityfrom
    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_ERROF             = 3
*     TABLE_STRUCTURE_NAME_NOT_FOUND = 4
*     OTHERS               = 5
    .
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  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.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
*将已定义的双击事件分配至树对象
  SET HANDLER g_application->handle_node_double_click FOR wa_tree.
ENDFORM. " CREATE_TREE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ᝰ随心ꦿེএ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值