原文地址:http://www.xuebuyuan.com/1666753.html

按层次显示WBS编码及描述,附加节点双击展开事件和Item双击跳转CJ03功能。

因为本人懒,本例代码都是从标准的BCALV_TREE_01和BCALV_TREE_02拷贝过来修改的,结构不好请别见怪。

REPORT  zmac_alvtree_test.

DATA: g_alv_tree         TYPE REF TO cl_gui_alv_tree,
g_custom_container TYPE REF TO cl_gui_custom_container. TYPES: BEGIN OF ty_wbs,
posid TYPE prps-posid,
post1 TYPE prps-post1,
stufe TYPE prps-stufe,
END OF ty_wbs. DATA: gt_wbs TYPE STANDARD TABLE OF ty_wbs,
gs_wbs TYPE ty_wbs. DATA: ok_code LIKE sy-ucomm,
save_ok LIKE sy-ucomm, "OK-Code
g_max TYPE i VALUE . DATA: gt_fcat TYPE lvc_t_fcat,
gs_fcat TYPE lvc_s_fcat. *----------------------------------------------------------------------*
* CLASS lcl_tree_event_receiver DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_tree_event_receiver DEFINITION. PUBLIC SECTION.
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.
ENDCLASS. "lcl_tree_event_receiver DEFINITION
******************************************************************
CLASS lcl_tree_event_receiver IMPLEMENTATION. METHOD handle_node_double_click.
DATA: lt_children TYPE lvc_t_nkey. CALL METHOD sender->get_children
EXPORTING
i_node_key = node_key
IMPORTING
et_children = lt_children. IF NOT lt_children IS INITIAL. CALL METHOD sender->expand_node
EXPORTING
i_node_key = node_key
i_level_count = .
ENDIF. ENDMETHOD. "handle_node_double_click METHOD handle_item_double_click.
DATA: l_value TYPE lvc_value,
l_layi TYPE lvc_t_layi,
l_layn TYPE lvc_s_layn . CALL METHOD g_alv_tree->get_outtab_line
EXPORTING
i_node_key = node_key
IMPORTING
e_outtab_line = gs_wbs
e_node_text = l_value
et_item_layout = l_layi
es_node_layout = l_layn
EXCEPTIONS
node_not_found =
OTHERS = .
IF sy-subrc = .
SET PARAMETER ID 'PRO' FIELD gs_wbs-posid.
CALL TRANSACTION 'CJ03' AND SKIP FIRST SCREEN.
ENDIF. ENDMETHOD. "handle_item_double_click ENDCLASS. "lcl_tree_event_receiver IMPLEMENTATION END-OF-SELECTION. CALL SCREEN . *&---------------------------------------------------------------------*
*& Module PBO OUTPUT
*&---------------------------------------------------------------------*
* process before output
*----------------------------------------------------------------------*
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 =
cntl_error = .
IF sy-subrc NE .
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
titel = 'Automation Queue failure'()
txt1 = 'Internal error:'()
txt2 = 'A method in the automation queue'()
txt3 = 'caused a failure.'().
ENDIF.
ENDIF. ENDMODULE. " PBO OUTPUT
*&---------------------------------------------------------------------*
*& Module PAI INPUT
*&---------------------------------------------------------------------*
* process after input
*----------------------------------------------------------------------*
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
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM init_tree. DATA: l_tree_container_name() TYPE c. l_tree_container_name = 'CCONTAINER1'. CREATE OBJECT g_custom_container
EXPORTING
container_name = l_tree_container_name
EXCEPTIONS
cntl_error =
cntl_system_error =
create_error =
lifetime_error =
lifetime_dynpro_dynpro_link = .
IF sy-subrc <> .
MESSAGE x208() WITH 'ERROR'().
ENDIF. * create tree control
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 =
cntl_system_error =
create_error =
lifetime_error =
illegal_node_selection_mode =
failed =
illegal_column_name = .
IF sy-subrc <> .
MESSAGE x208() WITH 'ERROR'. "#EC NOTEXT
ENDIF. DATA l_hierarchy_header TYPE treev_hhdr.
PERFORM build_hierarchy_header CHANGING l_hierarchy_header.
PERFORM build_fieldcategory. CALL METHOD g_alv_tree->set_table_for_first_display
EXPORTING
is_hierarchy_header = l_hierarchy_header
CHANGING
it_outtab = gt_wbs "table must be empty !
it_fieldcatalog = gt_fcat. PERFORM create_hierarchy.
PERFORM register_events. CALL METHOD g_alv_tree->frontend_update. ENDFORM. " init_tree
*&---------------------------------------------------------------------*
*& Form build_hierarchy_header
*&---------------------------------------------------------------------*
* build hierarchy-header-information
*----------------------------------------------------------------------*
* -->P_L_HIERARCHY_HEADER strucxture for hierarchy-header
*----------------------------------------------------------------------*
FORM build_hierarchy_header CHANGING
p_hierarchy_header TYPE treev_hhdr. p_hierarchy_header-heading = 'Wbs number'().
p_hierarchy_header-tooltip = 'WBS'().
p_hierarchy_header-width = .
p_hierarchy_header-width_pix = ' '. ENDFORM. " build_hierarchy_header
*&---------------------------------------------------------------------*
*& Form exit_program
*&---------------------------------------------------------------------*
* free object and leave program
*----------------------------------------------------------------------*
FORM exit_program. CALL METHOD g_custom_container->free.
LEAVE PROGRAM. ENDFORM. " exit_program
*&---------------------------------------------------------------------*
*& Form create_hierarchy
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM create_hierarchy. DATA: ls_wbs TYPE ty_wbs,
lt_wbs TYPE ty_wbs OCCURS . DATA: lt_nodes TYPE TABLE OF lvc_nkey WITH HEADER LINE,
l_cur_node TYPE lvc_nkey,
l_former_stufe TYPE prps-stufe,
l_index TYPE i. SELECT posid post1 stufe FROM prps INTO TABLE lt_wbs UP TO ROWS. SORT lt_wbs BY posid. LOOP AT lt_wbs INTO ls_wbs. IF ls_wbs-stufe = ''.
REFRESH lt_nodes.
l_index = ls_wbs-stufe.
PERFORM add_nodes USING ls_wbs
''
CHANGING l_cur_node.
READ TABLE lt_nodes INDEX l_index.
IF sy-subrc NE .
APPEND l_cur_node TO lt_nodes.
ENDIF. ELSEIF ls_wbs-stufe > l_former_stufe. "on change of l_yyyymm
l_index = ls_wbs-stufe - .
READ TABLE lt_nodes INDEX l_index. PERFORM add_nodes USING ls_wbs
lt_nodes
CHANGING l_cur_node.
*---->保存新的当前节点
APPEND l_cur_node TO lt_nodes.
ELSEIF ls_wbs-stufe < l_former_stufe.
l_index = ls_wbs-stufe - .
READ TABLE lt_nodes INDEX l_index. PERFORM add_nodes USING ls_wbs
lt_nodes
CHANGING l_cur_node.
*---->将当前节点及之后后的所有临时存储节点KEY删除
l_index = l_index + .
DELETE lt_nodes INDEX l_index.
DO.
READ TABLE lt_nodes INDEX l_index.
IF sy-subrc = .
DELETE lt_nodes INDEX l_index.
ELSE.
EXIT.
ENDIF.
ENDDO.
*---->保存新的当前节点
APPEND l_cur_node TO lt_nodes.
ELSE.
l_index = ls_wbs-stufe - .
READ TABLE lt_nodes INDEX l_index.
PERFORM add_nodes USING ls_wbs
lt_nodes
CHANGING l_cur_node.
ENDIF.
l_former_stufe = ls_wbs-stufe.
ENDLOOP. ENDFORM. " create_hierarchy
*&---------------------------------------------------------------------*
*& Form add_nodes
*&---------------------------------------------------------------------*
FORM add_nodes USING ps_wbs TYPE ty_wbs
p_cnode_key TYPE lvc_nkey
CHANGING p_nnode_key TYPE lvc_nkey. DATA: l_node_text TYPE lvc_value. CALL FUNCTION 'CONVERSION_EXIT_ABPSN_OUTPUT'
EXPORTING
input = ps_wbs-posid
IMPORTING
output = l_node_text. CALL METHOD g_alv_tree->add_node
EXPORTING
i_relat_node_key = p_cnode_key
i_relationship = cl_gui_column_tree=>relat_last_child
i_node_text = l_node_text
is_outtab_line = ps_wbs
IMPORTING
e_new_node_key = p_nnode_key. ENDFORM. " add_month
*&---------------------------------------------------------------------*
*& Form build_fieldcategory
*&---------------------------------------------------------------------*
FORM build_fieldcategory .
* gs_fcat-fieldname = 'POSID'.
* gs_fcat-seltext = text-f06. " 字段输出名称
* gs_fcat-coltext = text-f06. " 字段输出名称
* gs_fcat-just = 'L'.
* gs_fcat-outputlen = '40'. " 输出长度
* APPEND gs_fcat TO gt_fcat.
* CLEAR gs_fcat.
gs_fcat-fieldname = 'POST1'.
gs_fcat-seltext = text-f01. " 字段输出名称
gs_fcat-coltext = text-f01. " 字段输出名称
gs_fcat-just = 'L'.
gs_fcat-outputlen = ''. " 输出长度
APPEND gs_fcat TO gt_fcat.
CLEAR gs_fcat.
ENDFORM. " build_fieldcategory
*&---------------------------------------------------------------------*
*& Form register_events
*&---------------------------------------------------------------------*
FORM register_events .
DATA: lt_events TYPE cntl_simple_events,
l_event TYPE cntl_simple_event,
l_event_receiver TYPE REF TO lcl_tree_event_receiver. CALL METHOD g_alv_tree->get_registered_events
IMPORTING
events = lt_events. l_event-eventid = cl_gui_column_tree=>eventid_node_double_click.
APPEND l_event TO lt_events.
l_event-eventid = cl_gui_column_tree=>eventid_item_double_click.
APPEND l_event TO lt_events. CALL METHOD g_alv_tree->set_registered_events
EXPORTING
events = lt_events
EXCEPTIONS
cntl_error =
cntl_system_error =
illegal_event_combination = .
IF sy-subrc <> .
MESSAGE x208() WITH 'ERROR'. "#EC NOTEXT
ENDIF. CREATE OBJECT l_event_receiver.
SET HANDLER l_event_receiver->handle_node_double_click FOR g_alv_tree.
SET HANDLER l_event_receiver->handle_item_double_click FOR g_alv_tree. ENDFORM. " register_events

ALV Tree demo(WBS元素分层显示)[引用别人的]的更多相关文章

  1. ALV TREE 实例

    ALV TREE 实例 REPORT ZRPT_PS_PS021TREE . TABLES: PROJ, "项目定义数据 PRPS, "WBS元素数据 ZCJ30, "A ...

  2. OO方式下,ALV TREE和ALV GRID的不同之处

    作为大部分报表程序的基础,ALV GRID差不多是每个ABAP开发者必须了解和掌握的内容,因此网上也不乏相关资料,而ALV TREE的应用相对较少,中文资料也就比较少见了.实际上,ALV TREE和A ...

  3. 两个标签页定位第二个标签页元素时显示element not visible

    问题描述 web页面有两个标签页, 当转换到第二个标签页定位元素时, 显示element not visible. 代码 ... //省略 WebElement ele= browser.getEle ...

  4. asp.net core根据用户权限控制页面元素的显示

    asp.net core根据用户权限控制页面元素的显示 Intro 在 web 应用中我们经常需要根据用户的不同允许用户访问不同的资源,显示不同的内容,之前做了一个 AccessControlHelp ...

  5. tree:以树形结构显示目录下的内容

    tree命令 1.命令详解 [功能说明] tree命令的中文意思为“树”,功能是以树形结构列出指定目录下的所有内容包括所有文件.子目录及子目录里的目录和文件. [语法格式] tree [option] ...

  6. react中控制元素的显示与隐藏

    1.通过 state 变量来控制是否渲染元素 类似于 vue 的 v-if 方法是通过变量来控制是否加载元素的,如果变量为false,内容就直接不会渲染的. class Demo extends Re ...

  7. 《手把手教你》系列技巧篇(四十七)-java+ selenium自动化测试-判断元素是否显示(详解教程)

    1.简介 webdriver有三种判断元素状态的方法,分别是isEnabled,isSelected 和 isDisplayed,其中isSelected在前面的内容中已经简单的介绍了,isSelec ...

  8. JS控制HTML元素的显示和隐藏

    JS控制HTML元素的显示和隐藏 利用来JS控制页面控件显示和隐藏有两种方法,两种方法分别利用HTML的style中的两个属性,两种方法的不同之处在于控件隐藏后是否还在页面上占空位. 方法一: 1 2 ...

  9. [CSS]元素的显示与隐藏

    摘自:http://www.zhangxinxu.com/wordpress/?p=1528 元素隐藏与显示是我们在页面制作与交互效果实现中非常常见的,如果您只是使用display:none与disp ...

随机推荐

  1. 【iOS开发】在 App 中加入 AdMob 广告 - 入门介绍与编程技巧

    前言 虽然在App中加入广告来盈利是比较低级的商业化方式,但对于个人开发者或者小团队开发者来说,做出一个简单易用的免费小工具(举个栗子),在里面加入一些广告,如果用的人多,也是可以带来一些可观的收入的 ...

  2. kafka常用命令

    以下是kafka常用命令行总结: 0.查看有哪些主题: ./kafka-topics.sh --list --zookeeper 192.168.0.201:12181 1.查看topic的详细信息 ...

  3. Android 逐帧动画

    原理: 逐帧动画是最简单的一种动画.原理就是把几张图片连续显示出来,以达到动画的效果.就相当于下面这种手绘翻页动画啦~ 实现: 1.需要建立一个animation-list来设置静态图片资源.持续时间 ...

  4. 关于eclipse删除servers之后,不能新建其所对应版本的Servers

    无法从以下方式,添加Tomcat服务器.  其中ServerName是被置为灰色的,无法编辑. 如何解决 1.  关闭Eclipse 2.  打开WorkSpace所在的位置.    {workspa ...

  5. Uva 10891 经典博弈区间DP

    经典博弈区间DP 题目链接:https://uva.onlinejudge.org/external/108/p10891.pdf 题意: 给定n个数字,A和B可以从这串数字的两端任意选数字,一次只能 ...

  6. webstorm 配置scss的问题

    第一种方法(ruby方法) 先安装ruby,在windows/system32目录下 1.先查询源是什么 gem sources 2.移除原有的源头 gem sources -r http://xxx ...

  7. Mybatis-Spring集成

    MyBatis-Spring用来将MyBatis无缝整合到Spring中.使用这个类库中的类, Spring将会加载必要的MyBatis工厂类和Session类. 这个类库也提供一个简单的方式来注入 ...

  8. python画图设置坐标轴大小

    在console端输入python语句,会一句输一行,而且不保留你所做的操作,但是每一句之间加一个分号就能很好的解决. import pylab as Plot Plot.xlim(-150, 150 ...

  9. php 安装yar扩展

    git:https://github.com/laruence/yar 先克隆 如果没有 git 需要先安装 yum install git 然后 克隆 git clone https://githu ...

  10. 16-腾讯-intership-面试

    问题 问:说一下在浏览器那里输入一个网址,会发生什么?答:DNS服务器解析,TCP三次握手,建立连接,然后bilibala............... 问:你对http相关协议熟悉吗?答:我问是ge ...