ABAP 树型菜单程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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,

相关文档
最新文档