ABAP 树型菜单程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ABAP 树型菜单程序
Jerry 项目中树型菜单很少用到,但是学会了,也是一种好事。最近,客户方就有一个要求,能够实现特殊的文档管理,包括动态的树型菜单。此文档中,我就介绍如何用ABAP创建一个简单的树型菜单!下面几个步骤只讲创建树型菜单几个重要的地方,最后面是详细的实现代码。建议学者粗略看看步骤,重点看最后的代码,然后自己学着按下面的DEMO写测试程序,直到成功为止,如有不懂的地方,可以到群内留言。或者文档有写得不好的地方,也可以提出来,我们一起加以改善!
一. 创建一个DIALOG屏幕(0900),创建一个定制控制: TREE_CONTAINER,作为一个容器来存放程序创建的
树型菜单,如下图所示:
二. 在屏幕PBO事件中,创建一个MOUDLE: m_init_tree,然后创建一个Subroutine: frm_init_tree。
在Subroutine中创建一个Object: g_application,g_application指向自己创建的一个Class:lcl_application。这个Class主要定义了一些事件,比如单击,双击,展开,链接单击等事件,用来注册及捕获树型菜单的父节点,子节点单击,双击,展开,链接单击等事件,然后在自己Class :lcl_application中相应自定义的Method中写相应的Code,实现特殊的操作。
三. 用程序创建一个容器类cl_gui_custom_container的实例g_custom_container,代码如下
CREATE OBJECT g_custom_container
EXPORTING
container_name = 'TREE_CONTAINER'
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5.
IF sy-subrc <> 0.
* MESSAGE a000.
ENDIF.
从上面的代码可以看出,程序创建了一个指向步骤一创建的定制控制: TREE_CONTAINER一个自定义容器类.
四. 设置树型菜单名称,宽度,菜单列数,并创建树型菜单Class:cl_gui_column_tree实例:g_tree,并和
屏幕容器相关联
hierarchy_header-heading = '资源管理'. "树型菜单名称
hierarchy_header-width = 50. "宽度
CREATE OBJECT g_tree
EXPORTING
parent = g_custom_container "将创建的树型菜单和屏幕容器相关联 node_selection_mode = cl_gui_column_tree=>node_sel_mode_single "模式 item_selection = 'X'
hierarchy_column_name = c_column-column1 "列数
hierarchy_header = hierarchy_header
EXCEPTIONS
cntl_system_error = 1
create_error = 2
failed = 3
illegal_node_selection_mode = 4
illegal_column_name = 5
lifetime_error = 6.
IF sy-subrc <> 0.
* MESSAGE a000.
ENDIF.
五. 定义树型菜单的一些事件,比如单击,双击等
" node double click根节点双击
event-eventid = cl_gui_column_tree=>eventid_node_double_click.
event-appl_event = 'X'. " process PAI if event occurs
APPEND event TO events.
" item double click子节点双击
event-eventid = cl_gui_column_tree=>eventid_item_double_click.
event-appl_event = 'X'.
APPEND event TO events.
" expand no children展开文件
event-eventid = cl_gui_column_tree=>eventid_expand_no_children.
event-appl_event = 'X'.
APPEND event TO events.
" link click链接单击,我认为是最后的子节点单击
event-eventid = cl_gui_column_tree=>eventid_link_click.
event-appl_event = 'X'.
APPEND event TO events.
" button click
event-eventid = cl_gui_column_tree=>eventid_button_click.
event-appl_event = 'X'.
APPEND event TO events.
" checkbox change
event-eventid = cl_gui_column_tree=>eventid_checkbox_change.
event-appl_event = 'X'.
APPEND event TO events.
" header click
event-eventid = cl_gui_column_tree=>eventid_header_click.
event-appl_event = 'X'.
APPEND event TO events.
设置类实例g_tree的相关事件,因为类g_tree的属性event默认为空,所以在这里要调用
set_registered_events设置事件
CALL METHOD g_tree->set_registered_events
EXPORTING
events = events
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
illegal_event_combination = 3.
IF sy-subrc <> 0.
* MESSAGE a000.
ENDIF.
六. 注册树型菜单事件到第二步中创建的类lcl_application的实例g_application,然后我们就可以在
g_application中相关的方法中捕获树型菜单的相关事件,写自己的程序作特殊的处理。
比如SET HANDLER g_application->handle_node_double_click FOR g_tree.注册树型菜单双击事件句柄
七. 添加树型菜单子节点
主要用到树型菜单的g_tree的treev_ntab属性treev_ntab的四个属性非常重要,一个是node_key,就是为此节点起命名,树型菜单中的每一个节点都必须有一个命名,并且必须唯一。第二个属性是relatkey,