树状导航程序本来只是我一次午饭后随手写的一个程序,一个中午加一个晚上做的,但是有兄弟觉着还不错,于是就有了第二版,改进了很多内容。第二版发布后又有兄弟提出了一些建议,于是更改了第三版,改进点大概有下面几点:
2、添加新的节点后,不再重新在数据库读数刷新表,大大提升程序效率
界面:
*&---------------------------------------------------------------------**& Report ZNAVI_TREE*&---------------------------------------------------------------------**& 可配置树状导航*& Baitianzhen*&---------------------------------------------------------------------*REPORT znavi_tree NO STANDARD PAGE HEADING.
TABLES:zum1.CLASS lcl_receiver DEFINITION DEFERRED.DATA: go_container TYPE REF TO cl_gui_custom_container, go_spliter TYPE REF TO cl_gui_splitter_container, go_cont_tree TYPE REF TO cl_gui_container, go_cont_imag TYPE REF TO cl_gui_container, go_tree TYPE REF TO cl_gui_alv_tree, go_grid TYPE REF TO cl_gui_alv_grid, go_dragdrop TYPE REF TO cl_dragdrop, go_toolbar TYPE REF TO cl_gui_toolbar, go_picture TYPE REF TO cl_gui_picture, go_receiver TYPE REF TO lcl_receiver, gt_fldtree TYPE lvc_t_fcat, gt_fldpop TYPE lvc_t_fcat, gv_okcode TYPE sy-ucomm, gv_picurl TYPE char255, gv_fflag TYPE c, "文件夹标识 gv_swidth TYPE i, gv_hwidth TYPE i.DATA: gs_out TYPE zum1, gt_out TYPE TABLE OF zum1, gt_top TYPE TABLE OF zum1, gt_all TYPE TABLE OF zum1 WITH NON-UNIQUE SORTED KEY k1 COMPONENTS upnod posnr.DATA: BEGIN OF gs_atta OCCURS 0, fname TYPE string, fleng TYPE i, erdat TYPE erdat, erzet TYPE erzet, ernam TYPE ernam, seled TYPE c, fcont TYPE w3mimetabtype, END OF gs_atta.DATA: gt_atta LIKE TABLE OF gs_atta.*----------------------------------------------------------------------** CLASS lcl_dragdropobj DEFINITION*----------------------------------------------------------------------*CLASS lcl_dragdropobj DEFINITION. PUBLIC SECTION. DATA: ls_out TYPE zum1, lv_nkey TYPE lvc_nkey, "拖动的KEY lv_pkey TYPE lvc_nkey. "父KEYENDCLASS. "lcl_dragdropobj DEFINITION
*----------------------------------------------------------------------** CLASS lcl_receiver DEFINITION*----------------------------------------------------------------------*CLASS lcl_receiver DEFINITION. PUBLIC SECTION. METHODS grid_drop_external_files FOR EVENT drop_external_files OF cl_gui_alv_grid IMPORTING files. METHODS on_drop_external_files FOR EVENT on_drop_external_files OF cl_gui_alv_tree IMPORTING node_key files. METHODS handle_node_double_click FOR EVENT node_double_click OF cl_gui_alv_tree IMPORTING node_key sender. METHODS handle_item_double_click FOR EVENT item_double_click OF cl_gui_alv_tree IMPORTING fieldname node_key sender. METHODS handle_link_click FOR EVENT link_click OF cl_gui_alv_tree IMPORTING node_key fieldname sender. METHODS handle_drag FOR EVENT on_drag OF cl_gui_alv_tree IMPORTING sender node_key fieldname drag_drop_object. METHODS handle_drop FOR EVENT on_drop OF cl_gui_alv_tree IMPORTING sender drag_drop_object node_key. METHODS on_function_selected FOR EVENT function_selected OF cl_gui_toolbar IMPORTING fcode. METHODS on_dropdown_clicked FOR EVENT dropdown_clicked OF cl_gui_toolbar IMPORTING fcode posx posy.ENDCLASS. "lcl_receiver DEFINITION
SELECT-OPTIONS: s_nodid FOR zum1-nodid NO INTERVALS.SELECT-OPTIONS: s_exnod FOR zum1-nodid NO INTERVALS.PARAMETERS: p_objid TYPE w3objid DEFAULT 'ENJOYSAP_LOGO', p_title TYPE cua_tit_tx DEFAULT '可配置树状导航'(t00), p_auchk AS CHECKBOX DEFAULT 'X', p_chang AS CHECKBOX DEFAULT 'X', p_ddrop AS CHECKBOX DEFAULT 'X', p_exall AS CHECKBOX DEFAULT 'X'.SELECTION-SCREEN SKIP.PARAMETERS var TYPE raldb_vari MODIF ID v.
SELECTION-SCREEN BEGIN OF SCREEN 1001 AS WINDOW.PARAMETERS: p_ndtxt TYPE zum1-ndtxt OBLIGATORY, p_ntype TYPE zum1-ntype AS LISTBOX VISIBLE LENGTH 20 OBLIGATORY MODIF ID a, p_tcode TYPE zum1-tcode OBLIGATORY MODIF ID a, p_nicon TYPE zum1-nicon MODIF ID a, p_kverm TYPE zum1-kverm, p_w3url TYPE zum1-w3url.SELECTION-SCREEN END OF SCREEN 1001.INITIALIZATION. PERFORM catset TABLES gt_fldtree USING: 'NTYPE' '类型'(f01), 'TCODE' '事务/报表/维护表等'(f02), 'KVERM' '备注'(f03), 'W3URL' '链接'(f04), 'NODID' '节点ID'(f05).
...