已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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,就是指定本节点从属于那一个节点之下,也就是指定它的上级节点,如果是根节点,就无需指定。第三个属性isfolder,就是说指定节点是否允许有子节点。第四个expander就是节点是否可以展开。节点的属性设置好后,就可以调用g_tree的method: add_nodes_and_items来添加树型菜单节点,以下的DEMO就刚开始就添加了”业扩工程”,“在建工程”,”改造工程”三个根节点。 八. 展示根节点,调用g_tree的expand_node方法将第七步的三个根节点进行展示.启动程序,将会看到屏幕上就有了一个简单的树型菜单,至于怎么在这三个根节点下再加子节点,读者就自己看OK_CODE:ADD事件里的代码,道理是一样的。完整的程序代码*&-*& Report YTEST2*&*&-*&*&*&-*REPORT y_tree_test.TYPES: item_table_type LIKE STANDARD TABLE OF mtreeitm WITH DEFAULT KEY.DATA: it_pic_data TYPE TABLE OF /sc1/pic_data, it_data_output TYPE TABLE OF /sc1/pic_data, wa_pic_data TYPE /sc1/pic_data, it_data_collect TYPE TABLE OF /sc1/pic_data,wa_data_collect TYPE /sc1/pic_data.DATA: it_data TYPE TABLE OF bapiconten WITH HEADER LINE.DATA: v_url(255) TYPE c, v_index TYPE i.DATA: g_event(30), g_node_key TYPE tv_nodekey, g_item_name TYPE tv_itmname, g_header_name TYPE tv_hdrname.DATA: o_container TYPE REF TO cl_gui_custom_container, o_container1 TYPE REF TO cl_gui_custom_container, o_container2 TYPE REF TO cl_gui_custom_container, o_container3 TYPE REF TO cl_gui_custom_container, o_container4 TYPE REF TO cl_gui_custom_container, o_container5 TYPE REF TO cl_gui_custom_container, o_container6 TYPE REF TO cl_gui_custom_container, o_picture TYPE REF TO cl_gui_picture, o_picture1 TYPE REF TO cl_gui_picture, o_picture2 TYPE REF TO cl_gui_picture, o_picture3 TYPE REF TO cl_gui_picture, o_picture4 TYPE REF TO cl_gui_picture, o_picture5 TYPE REF TO cl_gui_picture, o_picture6 TYPE REF TO cl_gui_picture.DATA: total_page(255) TYPE c VALUE 第3页/共5页.DATA: g_tc_pic_upload_lines LIKE sy-loopc.DATA p_comp_code LIKE t001-bukrs.DATA p_prctr TYPE /dsd/sl_bso.DATA p_kunnr TYPE kna1-kunnr.DATA pic_name(30) TYPE c.DATA p_pic_type TYPE /sc1/e_pic_type.DATA pic_name1 TYPE name1.DATA pic_num TYPE /sc1/pic_num.DATA g_1st_time TYPE xflag.DATA: node_table TYPE treev_ntab, node TYPE treev_node, item_table TYPE item_table_type, item TYPE mtreeitm, lv_nodekey TYPE tv_nodekey.DATA: ok_code TYPE sy-ucomm.CONSTANTS: BEGIN OF c_nodekey, root TYPE tv_nodekey VALUE root, root2 TYPE tv_nodekey VALUE root2, root3 TYPE tv_nodekey VALUE root3, #EC NOTEXT child1 TYPE tv_nodekey VALUE Child1, #EC NOTEXT child2 TYPE tv_nodekey VALUE Child2, #EC NOTEXT new1 TYPE tv_nodekey VALUE New1, #EC NOTEXT new2 TYPE tv_nodekey VALUE New2, #EC NOTEXT* new3 type tv_nodekey value New3, #EC NOTEXT* new4 type tv_nodekey value New4, #EC NOTEXT END OF c_nodekey, BEGIN OF c_column, column1 TYPE tv_itmname VALUE column1, #EC NOTEXT column2 TYPE tv_itmname VALUE column2, #EC NOTEXT column3 TYPE tv_itmname VALUE column3, #EC NOTEXT column4 TYPE tv_itmname VALUE column4, column5 TYPE tv_itmname VALUE column5, column6 TYPE tv_itmname VALUE column6, column7 TYPE tv_itmname VALUE column7, column8 TYPE tv_itmname VALUE column8, END OF c_column.*-* CLASS lcl_application DEFINITION*-*-*CLASS lcl_application DEFINITION. PUBLIC SECTION. METHODS: handle_node_double_click FOR EVENT node_double_click OF cl_gui_column_tree IMPORTING node_key, handle_header_click FOR EVENT header_click OF cl_gui_column_tree IMPORTING header_name, handle_expand_no_children FOR EVENT expand_no_children OF cl_gui_column_tree IMPORTING node_key, handle_item_double_click FOR EVENT item_double_click OF cl_gui_column_tree IMPORTING node_key item_name, handle_button_click FOR EVENT button_click OF cl_gui_column_tree IMPORTING node_key item_name, handle_link_click FOR EVENT link_click OF cl_gui_column_tree IMPORTING node_key item_name, handle_checkbox_change FOR EVENT checkbox_change OF cl_gui_column_tree IMPORTING node_key item_name checked.ENDCLASS. LCL_APPLICATION DEFINITION*-* CLASS LCL_APPLICATION IMPLEMENTATION*-*-*CLASS lcl_application IMPLEMENTATION. METHOD handle_node_double_click. this method handles the node double click event of the tree control instance show the key of the double clicked node in a dynpro field* g_event = NODE_DOUBLE_CLICK.* g_node_key = node_key. CLEAR wa_pic_data. CLEAR it_data. ENDMETHOD. HANDLE_NODE_DOUBLE_CLICK METHOD handle_header_click. this method handles header click event of the tree control instance show the name of the clicked header in a dynpro field g_event = HEADER_CLICK. g_header_name = header_name. CLEAR: g_node_key, g_item_name. ENDMETHOD. HANDLE_HEADER_CLICK METHOD handle_item_double_click. this method handles the item double click event of the tree control instance DATA lwa_bds TYPE bds_conn00. DATA: bdcdata_wa TYPE bdcdata, bdcdata_tab TYPE TABLE OF bdcdata. DATA opt TYPE ctu_params. opt-dismode = E. opt-defsize = X. show the key of the node and the name of the item of the double clicked item in a dynpro field g_event = ITEM_DOUBLE_CLICK. g_node_key = node_key. g_item_name = item_name. CLEAR wa_pic_data. CLEAR it_data. SELECT SINGLE * INTO CORRESPONDING FIELDS OF wa_pic_data FROM /sc1/pic_data WHERE /sc1/pic_datapic_num = g_node_key. IF sy-subrc EQ 0. IF o_picture1 IS INITIAL. CREATE OBJECT: o_container1 EXPORTING container_name = PIC_CONTAINER1, o_picture1 EXPORTING parent = o_container1. CLEAR v_url.* READ TABLE it_pic_data INTO wa_pic_data INDEX v_index.* pic_name = wa_pic_data-pic_nam. CALL FUNCTION /SC1/TIN_BD_GET_TO_TAB EXPORTING doc_id = wa_pic_data-loio_id TABLES et_file_content = it_data. CALL FUNCTION DP_CREATE_URL EXPORTING type = IMAGE subtype = X-UNKNOWN TABLES data = it_data CHANGING url = v_url. CALL METHOD o_picture1-load_picture_from_url EXPORTING url = v_url. CALL METHOD o_picture1-set_display_mode EXPORTING display_mode = o_picture1-display_mode. ELSE. CLEAR v_url.* READ TABLE it_pic_data INTO wa_pic_data INDEX v_index.* pic_name = wa_pic_data-pic_nam. CALL FUNCTION /SC1/TIN_BD_GET_TO_TAB EXPORTING doc_id = wa_pic_data-loio_id TABLES et_file_content = it_data. CALL FUNCTION DP_CREATE_URL EXPORTING type = IMAGE subtype = X-UNKNOWN TABLES data = it_data CHANGING url = v_url. CALL METHOD o_picture1-clear_picture. CALL METHOD o_picture1-load_picture_from_url EXPORTING url = v_url. CALL METHOD cl_gui_cfw=flush. IF sy-subrc EQ 0. CALL METHOD o_picture1-set_display_mode EXPORTING display_mode = o_picture1-display_mode. ENDIF. ENDIF. pic_name1 = wa_pic_data-pic_nam. pic_num = wa_pic_data-pic_num. ENDIF. ENDMETHOD. HANDLE_ITEM_DOUBLE_CLICK METHOD handle_link_click. this method handles the link click event of the tree control instance show the key of the node and the name of the item of the clicked link in a dynpro field g_event = LINK_CLICK. g_node_key = node_key. g_item_name = item_name. CLEAR g_header_name. ENDMETHOD. HANDLE_LINK_CLICK METHOD handle_button_click. this method handles the button click event of the tree control instance show the key of the node and the name of the item of the clicked button in a dynpro field g_event = BUTTON_CLICK. g_node_key = node_key. g_item_name = item_name. CLEAR g_header_name. ENDMETHOD. HANDLE_BUTTON_CLICK METHOD handle_checkbox_change . this method handles the checkbox_change event of the tree control instance* DATA checked TYPE as4flag. show the key of the node and the name of the item of the clicked checkbox in a dynpro field g_event = CHECKBOX_CHANGE. g_node_key = node_key. g_item_name = item_name. CLEAR g_header_name. CASE node-relatkey . WHEN root. WHEN root3. ENDCASE. ENDMETHOD. HANDLE_CHECKBOX_CHANGE METHOD handle_expand_no_children. ENDMETHOD. HANDLE_EXPAND_NO_CHILDRENENDCLASS. LCL_APPLICATION IMPLEMENTATIONDATA: g_application TYPE REF TO lcl_application, g_custom_container TYPE REF TO cl_gui_custom_container, g_tree TYPE REF TO cl_gui_column_tree, g_ok_code TYPE sy-ucomm.START-OF-SELECTION. CALL SCREEN 0900.*&-*& Module STATUS_0900 OUTPUT*&-* text*-*MODULE status_0900 OUTPUT. SET PF-STATUS STATUS_0900.* SET TITLEBAR xxx.ENDMODULE. STATUS_0900 OUTPUT*&-*& Module M_INIT_TREE OUTPUT*&-* text*-*MODULE m_init_tree OUTPUT. PERFORM frm_init_tree.ENDMODULE. M_INIT_TREE OUTPUT*&-*& Form FRM_INIT_TREE*&-* text*-* - p1 text* - p2 text*-*FORM frm_init_tree . DATA: node_table TYPE treev_ntab, item_table TYPE item_table_type, event TYPE cntl_simple_event, events TYPE cntl_simple_events, hierarchy_header TYPE treev_hhdr. IF g_tree IS INITIAL. CREATE OBJECT g_application.* create a container for the tree control CREATE OBJECT g_custom_container EXPORTING the container is linked to the custom control with the name TREE_CONTAINER on the dynpro 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.* setup the hierarchy header hierarchy_header-heading = 资源管理. heading hierarchy_header-width = 50. width: 30 characters 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.* define the events which will be passed to the backend 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 =
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025建筑材料制品购销合同范本
- 2025版类风湿性关节炎常见症状及科学护理
- 尿道损伤健康宣教
- 2025版营养护理要点
- 2025版乙肝常见症状及护理程序
- 企业面试公司介绍
- 2025版中风急性期症状及护理建议
- 5.5点击新材料(沪粤版)课件
- 2025年icu护士三基考试试题及答案
- 2025国家电网安规变电部分考试题库及答案
- 2024-2025学年辽宁省丹东市元宝区丹东市金汤小学北师大版六年级上册期中测试数学试卷(含答案)
- 我们只有一个地球13篇
- 2025贵州玉屏侗族自治县人民医院第一批招聘编外人员26人考试模拟试题及答案解析
- 氢能管道输送项目分析方案
- DHCP课件讲述教学课件
- 风电大件运输安全培训课件
- 学堂在线 中国经济概论 章节测试答案
- 深圳保洁安全培训课件
- 2025广西物资学校公开招聘非实名编工作人员2人笔试备考试题及答案解析
- 仓储部班组安全培训课件
- 污水处理池管理制度
评论
0/150
提交评论