且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

SAP ALV tree的一个最简单demo

更新时间:2022-08-22 13:28:20

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