SAP ALV tree的一个最简单demo

report  zbcalv_tree_01.
types: begin of ty_tree_node,
                   id type char18,
                   text type char40,
       end of ty_tree_node.

data: g_alv_tree         type ref to cl_gui_alv_tree,
      g_custom_container type ref to cl_gui_custom_container.

data: gt_sflight      type sflight occurs 0,      "Output-Table
      gt_scala TYPE STANDARD TABLE OF ty_tree_node,
      ok_code like sy-ucomm,
      save_ok like sy-ucomm,           "OK-Code
      g_max type i value 255.

end-of-selection.

  call screen 100.

module pbo output.

  set pf-status 'MAIN100'.
  set titlebar 'MAINTITLE'.

  if g_alv_tree is initial.
    perform init_tree.

    call method cl_gui_cfw=>flush
      exceptions
        cntl_system_error = 1
        cntl_error        = 2.
    assert sy-subrc = 0.

  endif.

endmodule.                             " PBO  OUTPUT

module pai input.
  save_ok = ok_code.
  clear ok_code.

  case save_ok.
    when 'EXIT' or 'BACK' or 'CANC'.
      perform exit_program.

    when others.
      call method cl_gui_cfw=>dispatch.
  endcase.

  call method cl_gui_cfw=>flush.
endmodule.                             " PAI  INPUT


form init_tree.
  data: l_tree_container_name(30) type c.
  l_tree_container_name = 'CCONTAINER1'.

     create object g_custom_container
        exporting
              container_name = l_tree_container_name
        exceptions
              cntl_error                  = 1
              cntl_system_error           = 2
              create_error                = 3
              lifetime_error              = 4
              lifetime_dynpro_dynpro_link = 5.
    if sy-subrc <> 0.
      message x208(00) with 'ERROR'(100).
    endif.

  create object g_alv_tree
    exporting
        parent              = g_custom_container
        node_selection_mode = cl_gui_column_tree=>node_sel_mode_single
        item_selection      = 'X'
        no_html_header      = 'X'
        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.
  if sy-subrc <> 0.
    message x208(00) with 'ERROR'.                          "#EC NOTEXT
  endif.

  data l_hierarchy_header type treev_hhdr.
  perform build_hierarchy_header changing l_hierarchy_header.

  call method g_alv_tree->set_table_for_first_display
    exporting
      i_structure_name    = 'SFLIGHT'
      is_hierarchy_header = l_hierarchy_header
    changing
      it_outtab           = gt_sflight. "table must be empty !

  perform jerry_create_tree.

  call method g_alv_tree->frontend_update.

endform.

form jerry_create_tree.
   DATA: p_relat_key type lvc_nkey,
         p_node_key type lvc_nkey,
         ls_sflight LIKE LINE OF gt_sflight.

   call method g_alv_tree->add_node
    exporting
      i_relat_node_key = p_relat_key
      i_relationship   = cl_gui_column_tree=>relat_last_child
      i_node_text      = 'Jerry'
      is_outtab_line   = ls_sflight
    importing
      e_new_node_key   = p_node_key.

   call method g_alv_tree->add_node
    exporting
      i_relat_node_key = p_node_key
      i_relationship   = cl_gui_column_tree=>relat_last_child
      i_node_text      = 'Scala'
      is_outtab_line   = ls_sflight
    importing
      e_new_node_key   = p_node_key.

   "ls_sflight-id = 'Spring'.
   "ls_sflight-text = 'SSH Integration'.

   call method g_alv_tree->add_node
    exporting
      i_relat_node_key = p_node_key
      i_relationship   = cl_gui_column_tree=>relat_last_child
      i_node_text      = 'i042416'
      is_outtab_line   = ls_sflight
    importing
      e_new_node_key   = p_node_key.
endform.                             " init_tree

form build_hierarchy_header changing
                               p_hierarchy_header type treev_hhdr.

  p_hierarchy_header-heading = 'Month/Carrier/Date'(300).
  p_hierarchy_header-tooltip = 'Flights in a month'(400).
  p_hierarchy_header-width = 30.
  p_hierarchy_header-width_pix = ' '.

endform.                               " build_hierarchy_header

form exit_program.

  call method g_custom_container->free.
  leave program.

endform.                               " exit_program

# 另一个demo

REPORT  zbcalv_tree_01.
TYPES: BEGIN OF ty_tree_node,
         id   TYPE char18,
         text TYPE char40,
       END OF ty_tree_node.

DATA: g_alv_tree         TYPE REF TO cl_gui_alv_tree,
      g_custom_container TYPE REF TO cl_gui_custom_container,
      gt_scala           TYPE STANDARD TABLE OF ty_tree_node,
      ls_sflight         LIKE LINE OF gt_scala,
      ok_code            LIKE sy-ucomm,
      save_ok            LIKE sy-ucomm,           "OK-Code
      g_max              TYPE i VALUE 255.

END-OF-SELECTION.
  DATA(lo_tool) = NEW zcl_alv_tool( ).
  DATA(lt_fieldcat) = lo_tool->get_fieldcat_by_data( ls_sflight ).
  CALL SCREEN 100.

MODULE pbo OUTPUT.

  SET PF-STATUS 'MAIN100'.
  SET TITLEBAR 'MAINTITLE'.

  IF g_alv_tree IS INITIAL.
    PERFORM init_tree.
    CALL METHOD cl_gui_cfw=>flush
      EXCEPTIONS
        cntl_system_error = 1
        cntl_error        = 2.
    ASSERT sy-subrc = 0.
  ENDIF.
ENDMODULE.                             " PBO  OUTPUT

MODULE pai INPUT.
  save_ok = ok_code.
  CLEAR ok_code.

  CASE save_ok.
    WHEN 'EXIT' OR 'BACK' OR 'CANC'.
      PERFORM exit_program.
    WHEN OTHERS.
      CALL METHOD cl_gui_cfw=>dispatch.
  ENDCASE.

  CALL METHOD cl_gui_cfw=>flush.
ENDMODULE.                             " PAI  INPUT


FORM init_tree.
  g_custom_container = lo_tool->GET_CONTAINER( 'CCONTAINER1' ).

  g_alv_tree = lo_tool->get_tree( g_custom_container ).

  DATA l_hierarchy_header TYPE treev_hhdr.
  PERFORM build_hierarchy_header CHANGING l_hierarchy_header.

  CALL METHOD g_alv_tree->set_table_for_first_display
    EXPORTING
      is_hierarchy_header = l_hierarchy_header
    CHANGING
      it_fieldcatalog     = lt_fieldcat
      it_outtab           = gt_scala.

  PERFORM jerry_create_tree.

  CALL METHOD g_alv_tree->frontend_update.

ENDFORM.

FORM jerry_create_tree.
  DATA: p_relat_key TYPE lvc_nkey,
        p_node_key  TYPE lvc_nkey.

  CALL METHOD g_alv_tree->add_node
    EXPORTING
      i_relat_node_key = p_relat_key
      i_relationship   = cl_gui_column_tree=>relat_last_child
      i_node_text      = 'Jerry'
      is_outtab_line   = ls_sflight
    IMPORTING
      e_new_node_key   = p_node_key.

  CALL METHOD g_alv_tree->add_node
    EXPORTING
      i_relat_node_key = p_node_key
      i_relationship   = cl_gui_column_tree=>relat_last_child
      i_node_text      = 'Scala'
      is_outtab_line   = ls_sflight
    IMPORTING
      e_new_node_key   = p_node_key.

  ls_sflight-id = 'Spring'.
  ls_sflight-text = 'SSH Integration'.

  CALL METHOD g_alv_tree->add_node
    EXPORTING
      i_relat_node_key = p_node_key
      i_relationship   = cl_gui_column_tree=>relat_last_child
      i_node_text      = 'i042416'
      is_outtab_line   = ls_sflight
    IMPORTING
      e_new_node_key   = p_node_key.
ENDFORM.                             " init_tree

FORM build_hierarchy_header CHANGING p_hierarchy_header TYPE treev_hhdr.

  p_hierarchy_header-heading = 'Month/Carrier/Date'(300).
  p_hierarchy_header-tooltip = 'Flights in a month'(400).
  p_hierarchy_header-width = 30.
  p_hierarchy_header-width_pix = ' '.

ENDFORM.                               " build_hierarchy_header

FORM exit_program.

  CALL METHOD g_custom_container->free.
  LEAVE PROGRAM.

ENDFORM.                               " exit_program

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

发布了6350 篇原创文章 · 获赞 621 · 访问量 100万+

猜你喜欢

转载自blog.csdn.net/i042416/article/details/104002507
alv