SAP ABAP 通过右键菜单完成Tree Control 节点的增删改功能

通过右键菜单完成Tree Control 节点的增删改功能

Tree 节点的增删改是很重要的功能,包括:增加本级节点,增加子节点,修改节点,删

除节点。完成后效果如下:

选择根节点,单击右键,弹出右键菜单,如选择“北京”节点,选择“增加本级节点”

菜单,如图9-5 所示。

在单击文本输入“广州”后,单击“更新”按钮,如图9-6 所示。

Tree 对象增加了“广州”节点,选择该节点,选右键菜单中“增加子节点”菜单,如图

9-7 所示。

输入“天河区”,单击“更新”按钮,如图9-8 所示。

增加节点后,输出结果如图9-9 所示。

除上述功能外,还有修改及删除节点等功能。

设计 Screen 界面如图9-10 所示。

主程序:

REPORT ytest35.
DATA: ok_code TYPE sy-ucomm,save_ok TYPE sy-ucomm.
DATA: wa_container        TYPE scrfname VALUE 'TREE1',wa_custom_container TYPE REF TO cl_gui_custom_container,wa_tree             TYPE REF TO cl_gui_simple_tree.
DATA: node_table  LIKE TABLE OF mtreesnode,anode_table LIKE TABLE OF mtreesnode,node1       TYPE mtreesnode,node2       TYPE mtreesnode.
DATA wa_spfli TYPE TABLE OF spfli.
DATA: nodekey(200)    VALUE 'NODE',nodetext(200)   VALUE 'NODE',nodekeyold(200) VALUE 'NODE',getkey(200).
DATA menustr(10) VALUE ''.
CLASS lcl_application DEFINITION DEFERRED.
*---------------------------------------------------------------------*
* CLASS lcl_application DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_application DEFINITION.PUBLIC SECTION.METHODS: handle_node_double_clickFOR EVENT node_double_clickOF cl_gui_simple_treeIMPORTING node_key.METHODS:handle_node_context_menu_reqFOR EVENT node_context_menu_requestOF cl_gui_simple_treeIMPORTING node_key menu,handle_node_context_menu_selFOR EVENT node_context_menu_selectOF cl_gui_simple_treeIMPORTING node_key fcode.
ENDCLASS. "LCL_APPLICATION DEFINITION
*---------------------------------------------------------------------*
* CLASS lcl_application IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_application IMPLEMENTATION.METHOD handle_node_double_click.nodekey = node_key.READ TABLE node_table WITH KEY node_key = node_key INTO node1.nodetext = node1-text.ENDMETHOD. "HANDLE_NODE_DOUBLE_CLICKMETHOD handle_node_context_menu_req.CALL METHOD menu->add_functionEXPORTINGtext  = '增加本级节点'fcode = 'CODE1'.CALL METHOD menu->add_functionEXPORTINGtext  = '增加子节点'fcode = 'CODE2'.CALL METHOD menu->add_functionEXPORTINGtext  = '修改当前节点'fcode = 'CODE3'.CALL METHOD menu->add_functionEXPORTINGtext  = '删除当前节点'fcode = 'CODE4'.ENDMETHOD. "handle_node_context_menu_reqMETHOD handle_node_context_menu_sel.DATA str1 TYPE tv_nodekey.CALL METHOD wa_tree->get_selected_nodeIMPORTINGnode_key = str1.IF sy-subrc = 0.menustr = fcode.nodekey = str1.nodekeyold = str1.READ TABLE node_table WITH KEY node_key = str1 INTO node1.nodetext = node1-text.IF fcode = 'CODE4'.CALL METHOD wa_tree->delete_nodeEXPORTINGnode_key = node1-node_key.DELETE node_table WHERE node_key = nodekey.ENDIF.ENDIF.ENDMETHOD. "handle_node_context_menu_sel
ENDCLASS. "lcl_application IMPLEMENTATION
*自定义定义对象实例
DATA: g_application TYPE REF TO lcl_application.START-OF-SELECTION.CALL SCREEN 100.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.IF wa_custom_container IS INITIAL.CREATE OBJECT g_application.PERFORM create_tree.ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.DATA str1 TYPE tv_nodekey.save_ok = ok_code.CLEAR ok_code.CASE save_ok.WHEN 'EXIT'.LEAVE PROGRAM.WHEN 'GETKEY'.CALL METHOD wa_tree->get_selected_nodeIMPORTINGnode_key = str1.IF sy-subrc EQ 0.getkey = str1.ENDIF.WHEN 'UPTREE'.IF ( menustr = 'CODE1' ) OR ( menustr = 'CODE2').READ TABLE node_tableWITH KEY node_key = nodekey INTO node1.IF sy-subrc EQ 0.MESSAGE e208(00) WITH '键值重复!'.ENDIF.ENDIF.CASE menustr.WHEN 'CODE1'.READ TABLE node_table WITH KEY node_key = nodekeyoldINTO node2.CLEAR node1.node1-node_key = nodekey.node1-relatkey = node2-relatkey.node1-relatship = cl_gui_simple_tree=>relat_last_child.node1-hidden = ''.node1-disabled = ''.node1-isfolder = 'X'.node1-n_image = '@G3@'.node1-exp_image = '@G3@'.CLEAR node1-expander.node1-text = nodetext.APPEND node1 TO node_table.CLEAR anode_table.APPEND node1 TO anode_table.CALL METHOD wa_tree->add_nodesEXPORTINGtable_structure_name = 'MTREESNODE'node_table           = anode_table.IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.ENDIF.WHEN 'CODE2'.CLEAR node1.node1-node_key = nodekey.node1-relatkey = nodekeyold..node1-relatship = cl_gui_simple_tree=>relat_last_child.node1-hidden = ''.node1-disabled = ''.node1-isfolder = 'X'.node1-n_image = '@G3@'.node1-exp_image = '@G3@'.CLEAR node1-expander.node1-text = nodetext.APPEND node1 TO node_table.CLEAR anode_table.APPEND node1 TO anode_table.CALL METHOD wa_tree->add_nodesEXPORTINGtable_structure_name = 'MTREESNODE'node_table           = anode_table.IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.ENDIF.WHEN 'CODE3'.node1-node_key = nodekeyold.CALL METHOD wa_tree->node_set_textEXPORTINGnode_key = node1-node_keytext     = nodetext.IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.ENDIF.ENDCASE.ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Form CREATE_TREE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM create_tree .DATA: events TYPE cntl_simple_events,event1 TYPE cntl_simple_event.CREATE OBJECT wa_custom_containerEXPORTINGcontainer_name = wa_container.CREATE OBJECT wa_treeEXPORTINGparent              = wa_custom_containernode_selection_mode = cl_gui_simple_tree=>node_sel_mode_single.IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.ENDIF.CLEAR node1.node1-node_key = '国家'.CLEAR node1-relatkey.CLEAR node1-relatship.node1-hidden = ''.node1-disabled = ''.node1-isfolder = 'X'.CLEAR node1-n_image.CLEAR node1-exp_image.CLEAR node1-expander.node1-text = '中国'.APPEND node1 TO node_table.CLEAR node1.node1-node_key = '城市北京'.node1-relatkey = '国家'.node1-relatship = cl_gui_simple_tree=>relat_last_child.node1-hidden = ''.node1-disabled = ''.node1-isfolder = 'X'.CLEAR node1-n_image.CLEAR node1-exp_image.CLEAR node1-expander.node1-text = '北京'.APPEND node1 TO node_table.CLEAR node1.node1-node_key = '城市上海'.node1-relatkey = '国家'.node1-relatship = cl_gui_simple_tree=>relat_last_child.node1-hidden = ''.node1-disabled = ''.node1-isfolder = 'X'.CLEAR node1-n_image.CLEAR node1-exp_image.CLEAR node1-expander.node1-text = '上海'.APPEND node1 TO node_table.CLEAR node1.node1-node_key = 'KEY 崇文区'.node1-relatkey = '城市北京'.node1-relatship = cl_gui_simple_tree=>relat_last_child.node1-hidden = ''.node1-disabled = ''.node1-isfolder = ''.
*图标,可运行SHOWICON查阅node1-n_image = '@9Y@'.node1-exp_image = '@9Y@'.CLEAR node1-expander.node1-text = '崇文区'.APPEND node1 TO node_table.CLEAR node1.node1-node_key = 'KEY 西城区'.node1-relatkey = '城市北京'.node1-relatship = cl_gui_simple_tree=>relat_last_child.node1-hidden = ''.node1-disabled = ''.node1-isfolder = ''.node1-n_image = '@DF@'.node1-exp_image = '@DF@'.CLEAR node1-expander.node1-text = '西城区'.APPEND node1 TO node_table.CLEAR node1.node1-node_key = 'KEY 闵行区'.node1-relatkey = '城市上海'.node1-relatship = cl_gui_simple_tree=>relat_last_child.node1-hidden = ''.node1-disabled = ''.node1-isfolder = ''.node1-n_image = '@NL@'.node1-exp_image = '@NL@'.CLEAR node1-expander.node1-text = '闵行区'.APPEND node1 TO node_table.
*按照节得内容掏加节得CALL METHOD wa_tree->add_nodesEXPORTINGtable_structure_name = 'MTREESNODE'node_table           = node_table
* EXCEPTIONS
*     ERROR_IN_NODE_TABLE  = 1
*     FAILED               = 2
*     DP_ERROF             = 3
*     TABLE_STRUCTURE_NAME_NOT_FOUND = 4
*     OTHERS               = 5.IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.ENDIF.CALL METHOD wa_tree->expand_nodeEXPORTINGnode_key            = '国家'expand_subtree      = 'X'EXCEPTIONSfailed              = 1illegal_level_count = 2cntl_system_error   = 3node_not_found      = 4cannot_expand_leaf  = 5.IF sy-subrc NE 0.ENDIF.
*定义双击事件event1-eventid = cl_gui_simple_tree=>eventid_node_double_click.event1-appl_event = 'X'.APPEND event1 TO events.event1-eventid = cl_gui_simple_tree=>eventid_node_context_menu_req.event1-appl_event = ''.APPEND event1 TO events.CALL METHOD wa_tree->set_ctx_menu_select_event_applEXPORTINGappl_event = 'X'.
*添加事件内表CALL METHOD wa_tree->set_registered_eventsEXPORTINGevents = events
* EXCEPTIONS
*     CNTL_ERROR = 1
*     CNTL_SYSTEM_ERROR = 2
*     ILLEGAL_EVENT_COMBINATION = 3
*     OTHERS = 4.IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.ENDIF.
*将已定义的双击事件分配至树对象SET HANDLER g_application->handle_node_double_click FOR wa_tree.SET HANDLER g_application->handle_node_context_menu_req FOR wa_tree.SET HANDLER g_application->handle_node_context_menu_sel FOR wa_tree.
ENDFORM. " CREATE_TREE

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/256234.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

随笔-这都是命吗

我与鹏哥、小付有个小群&#xff0c;前几天&#xff0c;鹏哥在群里发了一个图&#xff0c;是他那个城市准备扶持的高新产业&#xff0c;有元宇宙、量子信息、生物制药、人工智能什么的。 先前的时候鹏哥给我说过&#xff0c;当地准备了六百多亩地&#xff0c;准备发展高新产业…

秒懂设计模式笔记

秒懂设计模式笔记 为了让软件架构良好、稳固&#xff0c;设计模式针对各种场景提供了适合的代码模块的复用及扩展解决方案。 面向对象的三大特性&#xff1a;继承、封装、多态。 封装 现实中&#xff0c;计算机主机机箱对于主板、CPU及内存等配件的封装等。 饮料是被装在杯…

ZKP Understanding Nova (2) Relaxed R1CS

Understanding Nova Kothapalli, Abhiram, Srinath Setty, and Ioanna Tzialla. “Nova: Recursive zero-knowledge arguments from folding schemes.” Annual International Cryptology Conference. Cham: Springer Nature Switzerland, 2022. Nova: Paper Code 2. Unders…

软件测试面试题解析--什么题是必问的?

设计测试用例的主要方法有哪些&#xff1f; 简述一下缺陷的生命周期&#xff1f; 测试流程&#xff1f; 项目流程&#xff1f; 验收测试中和β测试区别&#xff1f; 如何维护测试用例&#xff1f; 每天测多少用例 怎么分配的测试的 一天能找多少bug 你在上一家公司&#xff0c;…

el-select的多选multible带全选组件二次封装(vue2,elementUI)

1.需求 Select 选择器 多选需要增加 全选 和 取消全选 功能&#xff0c;前端框架为vue2&#xff0c;UI组件为elementUI。 2. 代码 html部分 <template><el-tooltip effect"dark" :disabled"defaultValue.length < 0" :content"defaul…

信号完整性分析

目录 前言一、信号完整性SI1.1 信号失真1.2 串扰1.3 衰减 二、电源完整性PI2.1 地弹2.2 电源轨道塌陷 三、电磁兼容EMC3.1 电磁辐射3.2 抗干扰 前言 本篇介绍信号完整性分析的知识体系&#xff0c;以及部分分析方法。   什么是信号完整性?通俗来讲&#xff0c;信号在互连线的…

MySQL数据库从小白到入门(二)

多表关系&#xff1a; 项目开发中&#xff0c;在进行数据库表结构设计时&#xff0c;会根据业务需求及业务模块之间的关系&#xff0c;分析并设计表结构。由于业务之间相互关联&#xff0c;所以各个表结构之间也存在着各种联系&#xff0c;基本上分为三种。 外键&#xff1a; 创…

BPM、ERP、OA 各自的功能和特点是什么?怎么配合使用?

OA、BPM、ERP几乎是任何一家企业都会接触到的信息管理系统及程序。 首先&#xff0c;我从定义上理清BPM、ERP和OA ERP(Enterprise Resource Planning,企业资源计划)&#xff0c;一般围绕供应链、生产制造和财务为核心。 BPM&#xff08;business process management&#xf…

低代码你需要了解一下

低代码的概念可以追溯到1980年代&#xff0c;当时IBM的快速应用程序开发工具&#xff08;RAD&#xff09;被冠以新的名称——低代码&#xff0c;由此&#xff0c;低代码的概念首次面向大众。然而&#xff0c;在近40年的历程中&#xff0c;低代码发展经历了两个阶段&#xff1a;…

阿里年薪50w和5w都是如何进行需求分析,过来围观!

工作中难免会遇到并不“完美”的需求文档&#xff0c;比如牵一发而动全身却不清晰的交互逻辑、子条目频繁的变更、交流缺失导致的歧义等&#xff0c;都会让测试在项目推进中手足无措。 一份好的需求文档&#xff0c;不止能够加速开发和测试的脚步&#xff0c;还能够提前发现风…

Android音视频开发入门学习路线(基础知识+硬解码+技术分享)

随着5G基站的不断建设&#xff0c;大家已经可以明确的感知到目前市场上各大企业对于音视频人才的需求&#xff0c;市场招聘音视频岗位薪资亦是水涨船高&#xff01; 但Android 音视频开发想要自学却难度很高&#xff0c;不仅需要掌握图像、音频、视频的基础知识&#xff0c;并…

docker 可视化工具操作说明 portainer

官网地址 https://docs.portainer.io/start/install-ce/server/docker/linux 1.First, create the volume that Port docker volume create portainer_data2.下载并安装容器 docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restartalways -v /var/run/docker…