ALV TREE DEMO
导语:关于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相关推荐
- ALV Tree demo(WBS元素分层显示)[引用别人的]
原文地址:http://www.xuebuyuan.com/1666753.html 按层次显示WBS编码及描述,附加节点双击展开事件和Item双击跳转CJ03功能. 因为本人懒,本例代码都是从标准的 ...
- alv tree 总结
基础数据声明 DATA: gc_custome_control_name TYPE scrfname , "控件名称g_alv_tree TYPE REF TO cl_gui_alv_tre ...
- ALV TREE学习笔记
在这一篇中将学习一下ALV Tree的使用方法.通过名字可以看出,ALV TREE应该是将ALV与TREE这两者进行组合. ALV Tree实现原理:创建一个 cl_gui_alv_tree对象,定义 ...
- ALV标准范例Demo汇总
只展示简单的数据,用Function ALV即可,若有复杂的增删改查操作建议用OO ALV,下面汇总了一些标准Demo,不定期更新补全. SAP提供的ALV标准Demo程序: BCALV_EDIT_0 ...
- ALV Styles in Field catalogue using OOPS
转自http://www.saptechnical.com/Tutorials/ALV/Styles/demo.htm By Swarna S, Tata Consultancy Services * ...
- SAP ABAP ALV控制显示的网格中的每一个字段属性
字段目录是用来控制ALV显示的网格中每个字段的属性的,比如字段的顺序,对齐方式,可编辑状态,颜色,等等.常用的字段如下: row_pos:默认值为0,可选值为1.2.3,既最大分3级别显示 field ...
- alv edit and save all
在创建ALV架构的时候,一个很重要的字段fieldname ,其等号后面单引号里面是对应内表的每个字段的名称,并且必须是大写的. 如果是把这个字段的值写成了小写字母,其他的都没有什么错误,但是alv就 ...
- SPEED TREE技术分析
[转]SPEED TREE技术分析 speed tree技术分析 两年前第一次下载speed tree demo运行时,立刻被精美的画面所震撼,场景中大片的树木尤其吸引我的眼球,speed tree使 ...
- ALV常用参数的详细描述
ALV显示: CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_interface_check = '' ...
最新文章
- 将课程中的所有动手动脑的问题以及课后实验性的问题,整理成一篇文档,以博客形式发表在博客园...
- Supervisor 托管服务
- NTU 课程笔记:Nonparametric statistics
- 图像处理学习--前篇--像素相关
- GBin1专题之Web热点秀#15
- 看似毫无规律的各种现象
- vmware中NAT模式下,虚拟机与主机能ping通 为什么虚拟机不能上网
- add in Web.config
- 数学建模主要方法与常用算法概括
- Android网络优化--概括
- NAT ALG原理与应用
- 【HGE】使用C++从加密压缩包中读取图像文件并显示
- Spark开发环境的搭建(一)
- Hyperledger Fabric架构详解
- awk 不一样的分隔符 - 空格分隔符
- 仿泡团影视网源码 苹果cmsV8版本 电脑端+影视模块
- 14位数仿科学真计算机,十四位数仿真计算器
- android功能_自动切换APP图标,节假日图标自动变化
- lnmp一键部署脚本
- 【性能测试】轻量级性能测试工具Hey
热门文章
- K8s入门篇---centos7下的k8s搭建部署
- 比微信封堵多闪、聊天宝和马桶MT的竞争更残酷 AToken仍然耸立链圈不倒
- python 幂函数 幂为小数_解决python中的幂函数、指数函数问题
- AT2382-[AGC015D]A or...or B Problem
- Hyaluronate-Thiol,HA-Thiol,HA-SH,巯基修饰透明质酸, 巯基功能化透明质酸
- 多媒体文件储存服务器,多媒体文件的存储方法及系统、读取方法及系统
- 中小企业的上_云_梦,华为云CDN来实现
- linux下的证书安装
- 史上“最”简单的扫雷(16*16 40雷)
- SqlServer语句优化 OPTION(RECOMPILE)