导语:关于alv tree网上的资料比较少,在这里分享一个简单的demo这个也是我通过网上找的一个demo自己修改测试了一下,原文章的链接找不到了,后续有时间我会测一下事件,再分享alv tree的资料。

具体代码如下,只需要建一个screen就可以用了,屏幕上的控件我定义的名字就是alv tree,里面的注释还算明确。

*&---------------------------------------------------------------------*
*& Report Z_ALVTREE_TEST
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT z_alvtree_test.*&---------------------------------------------------------------------*
*&数据对象定义
*&---------------------------------------------------------------------*
DATA:BEGIN OF gs_alv,erdat  TYPE vbak-erdat,vbeln  TYPE vbak-vbeln,posnr  TYPE vbap-posnr,matnr  TYPE vbap-matnr,kwmeng TYPE vbap-kwmeng,vrkme  TYPE vbap-vrkme,END OF gs_alv.
DATA gt_alv LIKE TABLE OF gs_alv.
DATA:gs_fcat TYPE lvc_s_fcat,gt_fcat TYPE lvc_t_fcat.
DATA:lcl_container TYPE REF TO cl_gui_container, "容器类引用变量lcl_tree      TYPE REF TO cl_gui_alv_tree. "树形ALV控制器引用变量
DATA:ok_code   TYPE sy-ucomm, "获取100屏幕触发的功能码save_code TYPE sy-ucomm.
*&---------------------------------------------------------------------*
*&事件接受类定义
*&---------------------------------------------------------------------*
CLASS lcl_handle DEFINITION.PUBLIC SECTION."定义双击节点事件触发时的处理方法METHODS handle_node_dclickFOR EVENT node_double_click OF cl_gui_alv_treeIMPORTING node_key sender."其中SENDER这个参数是一个隐式的事件参数,是由ABAP对象运行系统提供,它指向了触发这个事件的实例,可以直接使用它来调用这个实例的方法。ENDCLASS.CLASS lcl_handle IMPLEMENTATION."定义处理方法的具体实施METHOD handle_node_dclick.DATA: lt_children TYPE lvc_t_nkey.
*检查被点击的NODE几点下面有无子节点,有则展开节点。CALL METHOD sender->get_childrenEXPORTINGi_node_key  = node_keyIMPORTINGet_children = lt_children.IF NOT lt_children IS INITIAL.CALL METHOD sender->expand_nodeEXPORTINGi_node_key    = node_keyi_level_count = 2.ELSE.SET PARAMETER ID 'AUN' FIELD node_key.CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.ENDIF.ENDMETHOD.ENDCLASS.START-OF-SELECTION.CALL SCREEN 100.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.SET PF-STATUS '100'.SET TITLEBAR 'TITLE'.IF lcl_tree IS INITIAL.PERFORM init_tree.CALL METHOD cl_gui_cfw=>flushEXCEPTIONScntl_system_error = 1cntl_error        = 2.IF sy-subrc NE 0.CALL FUNCTION 'POPUP_TO_INFORM'EXPORTINGtitel = 'Automation Queue failure'txt1  = 'Internal error:'txt2  = 'A method in the automation queue'txt3  = 'caused a failure.'.ENDIF.ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form INIT_TREE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM init_tree ."1.实例化容器对象lcl_container = cl_gui_container=>screen0."2.实例化TREE控制器CREATE OBJECT lcl_treeEXPORTINGparent                      = lcl_container "绑定容器node_selection_mode         = cl_gui_column_tree=>node_sel_mode_singleitem_selection              = 'X'no_html_header              = 'X'no_toolbar                  = ''EXCEPTIONScntl_error                  = 1cntl_system_error           = 2create_error                = 3lifetime_error              = 4illegal_node_selection_mode = 5failed                      = 6illegal_column_name         = 7.IF sy-subrc <> 0.MESSAGE e208(00) WITH '实例化ALV TREE控制器失败!'.     "ENDIF."3.设置NODE描述字段信息DATA l_hierarchy_header TYPE treev_hhdr.PERFORM build_hierarchy_header CHANGING l_hierarchy_header."4.设置ALV字段PERFORM frm_fillfield USING: 'ERDAT' '日期','VBELN' '单号','POSNR' '行号','MATNR' '物料','KWMENG' '数量','VRKME' '单位'."5设置ALV显示字段CALL METHOD lcl_tree->set_table_for_first_displayEXPORTINGis_hierarchy_header = l_hierarchy_headerCHANGINGit_fieldcatalog     = gt_fcatit_outtab           = gt_alv. "此表必须一直为空,且为全局变量"6.设置根节点,填充叶节点数据PERFORM create_hierarchy."7.注册事件PERFORM register_events.
* 更新汇总字段CALL METHOD lcl_tree->update_calculations.
*前端显示数据CALL METHOD lcl_tree->frontend_update.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  build_hierarchy_header
*&---------------------------------------------------------------------*
*       build hierarchy-header-information
*----------------------------------------------------------------------*
*      -->P_L_HIERARCHY_HEADER  strucxture for hierarchy-header
*----------------------------------------------------------------------*
FORM build_hierarchy_header CHANGINGp_hierarchy_header TYPE treev_hhdr.p_hierarchy_header-heading = '日期'.p_hierarchy_header-tooltip = '节点依据'.p_hierarchy_header-width = 50.p_hierarchy_header-width_pix = ''.ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_FILLFIELD
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> P_
*&      --> P_
*&---------------------------------------------------------------------*
FORM frm_fillfield USING p_fieldname TYPE lvc_fnamep_coltext TYPE lvc_txtcol.CLEAR gs_fcat.gs_fcat-fieldname = p_fieldname.gs_fcat-coltext = p_coltext.IF p_fieldname = 'ERDAT' OR p_fieldname = 'VBELN' OR p_fieldname = 'POSNR' .gs_fcat-no_out = 'X'."隐藏右侧输出的MATNR/WERKS/LGORT字段ELSEIF p_fieldname = 'KWMENG'.gs_fcat-qfieldname = 'VRKME'.gs_fcat-do_sum = 'X'."数量汇总gs_fcat-h_ftype = 'SUM'.gs_fcat-ref_field = 'KWMENG'.gs_fcat-ref_table = 'VBAP'.gs_fcat-outputlen = '30'.ELSEIF p_fieldname = 'MAKTX'.gs_fcat-outputlen = '30'.ENDIF.APPEND gs_fcat TO gt_fcat.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CREATE_HIERARCHY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM create_hierarchy .DATA: ls_node      LIKE gs_alv,ls_alv       LIKE gs_alv,lt_alv       LIKE TABLE OF gs_alv,l_last_erdat TYPE vbak-erdat,l_last_vbeln TYPE vbak-vbeln.DATA: l_erdat_key TYPE lvc_nkey,l_vbeln_key TYPE lvc_nkey,l_last_key  TYPE lvc_nkey,l_top_key   TYPE lvc_nkey.DATA l_node_text TYPE lvc_value.SELECT a~erdat,b~vbeln,b~posnr,b~matnr,b~kwmeng,b~vrkmeINTO TABLE @lt_alvFROM vbak AS aINNER JOIN vbap AS b ON a~vbeln = b~vbeln.*  SELECT d~matnr,
*         d~werks,
*         d~lgort,
*         d~labst,
*         a~meins,
*         t~maktx
*  INTO CORRESPONDING FIELDS OF TABLE @lt_alv UP TO 200 ROWS
*  FROM mard AS d INNER JOIN mara AS a
*  ON d~matnr = a~matnr
*  LEFT OUTER JOIN makt AS t
*  ON d~matnr = t~matnr
*  WHERE t~spras = @sy-langu.SORT lt_alv BY erdat vbeln."添加祖节点CALL METHOD lcl_tree->add_nodeEXPORTINGi_relat_node_key = ''i_relationship   = cl_gui_column_tree=>relat_last_childi_node_text      = '单据查询'IMPORTINGe_new_node_key   = l_top_key. "祖节点标识"按照工厂->仓库层次设置节点,设置”叶片“,填充"叶片"数据LOOP AT  lt_alv INTO ls_alv."设置日期节点IF l_last_erdat NE ls_alv-erdat.l_last_erdat = ls_alv-erdat."若此次循环到的工厂与上一次不相同,则创造新的工厂节点"ADD NODECLEAR l_node_text.l_node_text = ls_alv-erdat.CALL METHOD lcl_tree->add_nodeEXPORTINGi_relat_node_key = l_top_key "处于祖节点之下i_relationship   = cl_gui_column_tree=>relat_last_childi_node_text      = l_node_textis_outtab_line   = ls_nodeIMPORTINGe_new_node_key   = l_erdat_key. "日期节点标识CLEAR l_last_vbeln."当创建新的日期节点时,清空上一个日期节点ENDIF."设置单号节点IF l_last_vbeln NE ls_alv-vbeln.l_last_vbeln = ls_alv-vbeln."若此次循环到的库存点点与上一次不相同,则创造新的库存节点"ADD NODECLEAR l_node_text.l_node_text = ls_alv-vbeln.CALL METHOD lcl_tree->add_nodeEXPORTINGi_relat_node_key = l_erdat_key "处于日期节点之下i_relationship   = cl_gui_column_tree=>relat_last_childi_node_text      = l_node_textis_outtab_line   = ls_nodeIMPORTINGe_new_node_key   = l_vbeln_key. "单号节点标识ENDIF."设置”叶片“,填充"叶片"数据CLEAR l_node_text.l_node_text = ls_alv-posnr.CALL METHOD lcl_tree->add_nodeEXPORTINGi_relat_node_key = l_vbeln_key "处于单号节点之下i_relationship   = cl_gui_column_tree=>relat_last_childi_node_text      = l_node_textis_outtab_line   = ls_alv "有数据IMPORTINGe_new_node_key   = l_last_key. "行号节点标识ENDLOOP.ENDFORM.
*&---------------------------------------------------------------------*
*& Form REGISTER_EVENTS
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM register_events ."注册前端后后端事件DATA: lt_events        TYPE cntl_simple_events,l_event          TYPE cntl_simple_event,l_event_receiver TYPE REF TO lcl_handle.*1。获取已注册的前端事件CALL METHOD lcl_tree->get_registered_eventsIMPORTINGevents = lt_events."2.添加前端双击时间l_event-eventid = cl_gui_column_tree=>eventid_node_double_click.APPEND l_event TO lt_events.*3.重新设置前端注册时间CALL METHOD lcl_tree->set_registered_eventsEXPORTINGevents                    = lt_eventsEXCEPTIONScntl_error                = 1cntl_system_error         = 2illegal_event_combination = 3.IF sy-subrc <> 0.MESSAGE e208(00) WITH '注册前端事件失败!'.                      "#EC NOTEXTENDIF.
*--------------------"4.注册后端事件CREATE OBJECT l_event_receiver.SET HANDLER l_event_receiver->handle_node_dclick FOR lcl_tree.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.save_code = ok_code.CLEAR ok_code.CASE save_code.WHEN 'EXIT' OR 'BACK' OR 'CANC'."释放容器,退出程序CALL METHOD lcl_container->free.LEAVE PROGRAM.WHEN OTHERS."为正确调用工具栏按钮功能,必须调用该方法CALL METHOD cl_gui_cfw=>dispatch.ENDCASE.CALL METHOD cl_gui_cfw=>flush.
ENDMODULE.

效果展示
作者:小飞猪猪猪猪猪猪猪–CSDN

ALV TREE DEMO相关推荐

  1. ALV Tree demo(WBS元素分层显示)[引用别人的]

    原文地址:http://www.xuebuyuan.com/1666753.html 按层次显示WBS编码及描述,附加节点双击展开事件和Item双击跳转CJ03功能. 因为本人懒,本例代码都是从标准的 ...

  2. alv tree 总结

    基础数据声明 DATA: gc_custome_control_name TYPE scrfname , "控件名称g_alv_tree TYPE REF TO cl_gui_alv_tre ...

  3. ALV TREE学习笔记

    在这一篇中将学习一下ALV Tree的使用方法.通过名字可以看出,ALV TREE应该是将ALV与TREE这两者进行组合. ALV Tree实现原理:创建一个 cl_gui_alv_tree对象,定义 ...

  4. ALV标准范例Demo汇总

    只展示简单的数据,用Function ALV即可,若有复杂的增删改查操作建议用OO ALV,下面汇总了一些标准Demo,不定期更新补全. SAP提供的ALV标准Demo程序: BCALV_EDIT_0 ...

  5. ALV Styles in Field catalogue using OOPS

    转自http://www.saptechnical.com/Tutorials/ALV/Styles/demo.htm By Swarna S, Tata Consultancy Services * ...

  6. SAP ABAP ALV控制显示的网格中的每一个字段属性

    字段目录是用来控制ALV显示的网格中每个字段的属性的,比如字段的顺序,对齐方式,可编辑状态,颜色,等等.常用的字段如下: row_pos:默认值为0,可选值为1.2.3,既最大分3级别显示 field ...

  7. alv edit and save all

    在创建ALV架构的时候,一个很重要的字段fieldname ,其等号后面单引号里面是对应内表的每个字段的名称,并且必须是大写的. 如果是把这个字段的值写成了小写字母,其他的都没有什么错误,但是alv就 ...

  8. SPEED TREE技术分析

    [转]SPEED TREE技术分析 speed tree技术分析 两年前第一次下载speed tree demo运行时,立刻被精美的画面所震撼,场景中大片的树木尤其吸引我的眼球,speed tree使 ...

  9. ALV常用参数的详细描述

    ALV显示:     CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_interface_check        = ''           ...

最新文章

  1. 将课程中的所有动手动脑的问题以及课后实验性的问题,整理成一篇文档,以博客形式发表在博客园...
  2. Supervisor 托管服务
  3. NTU 课程笔记:Nonparametric statistics
  4. 图像处理学习--前篇--像素相关
  5. GBin1专题之Web热点秀#15
  6. 看似毫无规律的各种现象
  7. vmware中NAT模式下,虚拟机与主机能ping通 为什么虚拟机不能上网
  8. add in Web.config
  9. 数学建模主要方法与常用算法概括
  10. Android网络优化--概括
  11. NAT ALG原理与应用
  12. 【HGE】使用C++从加密压缩包中读取图像文件并显示
  13. Spark开发环境的搭建(一)
  14. Hyperledger Fabric架构详解
  15. awk 不一样的分隔符 - 空格分隔符
  16. 仿泡团影视网源码 苹果cmsV8版本 电脑端+影视模块
  17. 14位数仿科学真计算机,十四位数仿真计算器
  18. android功能_自动切换APP图标,节假日图标自动变化
  19. lnmp一键部署脚本
  20. 【性能测试】轻量级性能测试工具Hey

热门文章

  1. K8s入门篇---centos7下的k8s搭建部署
  2. 比微信封堵多闪、聊天宝和马桶MT的竞争更残酷 AToken仍然耸立链圈不倒
  3. python 幂函数 幂为小数_解决python中的幂函数、指数函数问题
  4. AT2382-[AGC015D]A or...or B Problem
  5. Hyaluronate-Thiol,HA-Thiol,HA-SH,巯基修饰透明质酸, 巯基功能化透明质酸
  6. 多媒体文件储存服务器,多媒体文件的存储方法及系统、读取方法及系统
  7. 中小企业的上_云_梦,华为云CDN来实现
  8. linux下的证书安装
  9. 史上“最”简单的扫雷(16*16 40雷)
  10. SqlServer语句优化 OPTION(RECOMPILE)