SAP屏幕设计器专题:树控件的使用(九)
在SAP的标准画面中,树控件都是随处可见,在一些特殊的应用中更有用处, 显得专业。
在SE51设计界面里,并没有直观的树控件,只是一个容器,要实现树功能还得在程序中用面向对象的方法实现。
本文就简要介绍一下应用。
定义部分:
*内表部分
DATA:IT_TREE LIKE STANDARD TABLE OF ZOA_REG WITH HEADER LINE.
DATA IT_TREE1 LIKE IT_TREE.
FIELD-SYMBOLS <FS1> LIKE LINE OF IT_TREE.
* ----->TREE
CLASS LCL_APPLICATION DEFINITION DEFERRED.
CLASS CL_GUI_CFW DEFINITION LOAD.
TYPES: NODE_TABLE_TYPE LIKE STANDARD TABLE OF MTREESNODE
WITH DEFAULT KEY.
DATA:NODE_TABLE TYPE NODE_TABLE_TYPE .
* CAUTION: MTREESNODE IS THE NAME OF THE NODE STRUCTURE WHICH MUST
* BE DEFINED BY THE PROGRAMMER. DO NOT USE MTREESNODE!
DATA: G_APPLICATION TYPE REF TO LCL_APPLICATION,
G_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
G_TREE TYPE REF TO CL_GUI_SIMPLE_TREE.
DATA: G_EVENT(30),
G_NODE_KEY TYPE TV_NODEKEY.
*文本控件
DATA:USERNO(20),
USERNAME(20),
PASSWORD(20),
BRANCH(20),
UNIT(20),
MAIL(20),
TDATE(20),
SEX(20),
NOQUIT,
QUIT.
2、状态及功能
*&---------------------------------------------------------------------*
*& MODULE STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* TEXT
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'PFSTATUS'.
SET TITLEBAR 'TITLE'.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& MODULE USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* TEXT
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
CASE SY-UCOMM.
WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
LEAVE.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
3、定义双击事件的定义和方法体:
*----------------------------------------------------------------------*
* CLASS LCL_APPLICATION DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_APPLICATION DEFINITION.
PUBLIC SECTION.
METHODS:
HANDLE_NODE_DOUBLE_CLICK
FOR EVENT NODE_DOUBLE_CLICK
OF CL_GUI_SIMPLE_TREE
IMPORTING NODE_KEY.
ENDCLASS. "LCL_APPLICATION DEFINITION
*----------------------------------------------------------------------*
* CLASS LCL_APPLICATION IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_APPLICATION IMPLEMENTATION.
METHOD HANDLE_NODE_DOUBLE_CLICK.
FIELD-SYMBOLS : <NODE> TYPE mtreesnode.
" THIS METHOD HANDLES THE NODE DOUBLE CLICK EVENT OF THE TREE
" CONTROL INSTANCE
READ TABLE NODE_TABLE ASSIGNING <NODE>
WITH KEY NODE_KEY = NODE_KEY .
IF NODE_KEY CS 'ZOA_REG'. "點擊父節點不做處理
MESSAGE <NODE>-TEXT TYPE 'I'.
ENDIF.
READ TABLE IT_TREE INTO IT_TREE1 WITH KEY USERNO = <NODE>-TEXT.
IF SY-SUBRC = 0.
USERNO = IT_TREE1-USERNO.
"USERNAME = IT_TREE1-NAME.
PASSWORD = IT_TREE1-PASS.
BRANCH = IT_TREE1-BRANCH.
UNIT = IT_TREE1-UNIT.
MAIL = IT_TREE1-MAIL.
TDATE = IT_TREE1-TDATE.
SEX = IT_TREE1-SEX.
IF IT_TREE1-STATE = '在职'.
NOQUIT = 'X'.
QUIT = ''.
ELSE.
NOQUIT = ''.
QUIT = 'X'.
ENDIF.
ELSE.
MESSAGE NODE_KEY TYPE 'I'.
ENDIF.
ENDMETHOD. "HANDLE_NODE_DOUBLE_CLICK
ENDCLASS. "LCL_APPLICATION IMPLEMENTATION
4、定义填充TREE控件的节点
*&---------------------------------------------------------------------*
*& FORM GET_PRO_ITEM
*&---------------------------------------------------------------------*
* TEXT
*----------------------------------------------------------------------*
* --> P1 TEXT
* <-- P2 TEXT
*----------------------------------------------------------------------*
FORM GET_PRO_ITEM .
PERFORM GET_DATA .
IF G_TREE IS INITIAL.
PERFORM CREATE_AND_INIT_TREE.
ENDIF.
ENDFORM. " GET_PRO_ITEM
*&---------------------------------------------------------------------*
*& FORM CREATE_AND_INIT_TREE
*&---------------------------------------------------------------------*
* 初始化树
*----------------------------------------------------------------------*
* --> P1 TEXT
* <-- P2 TEXT
*----------------------------------------------------------------------*
FORM CREATE_AND_INIT_TREE .
DATA: EVENTS TYPE CNTL_SIMPLE_EVENTS,
EVENT TYPE CNTL_SIMPLE_EVENT.
* 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 = 'THE_TREE' "填充到画面上的容器里
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
LIFETIME_ERROR = 4
LIFETIME_DYNPRO_DYNPRO_LINK = 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.
* CREATE A TREE CONTROL
CREATE OBJECT G_TREE
EXPORTING
PARENT = G_CUSTOM_CONTAINER
NODE_SELECTION_MODE = CL_GUI_SIMPLE_TREE=>NODE_SEL_MODE_SINGLE "单选模式
EXCEPTIONS
LIFETIME_ERROR = 1" SINGLE NODE SELECTIONIS USED
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
FAILED = 4
ILLEGAL_NODE_SELECTION_MODE = 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.
* DEFINE THE EVENTS WHICH WILL BE PASSED TO THE BACKEND
" NODE DOUBLE CLICK
EVENT-EVENTID = CL_GUI_SIMPLE_TREE=>EVENTID_NODE_DOUBLE_CLICK. "定义双击事件
EVENT-APPL_EVENT = 'X'. " PROCESS PAI IF EVENT OCCURS
APPEND EVENT TO 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 ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* ASSIGN EVENT HANDLERS IN THE APPLICATION CLASS TO EACH DESIRED EVENT
CREATE OBJECT G_APPLICATION.
SET HANDLER G_APPLICATION->HANDLE_NODE_DOUBLE_CLICK FOR G_TREE. "实现双击
PERFORM BUILD_NODE_TABLE USING NODE_TABLE. "填充树的节点
CALL METHOD G_TREE->ADD_NODES
EXPORTING
TABLE_STRUCTURE_NAME = 'MTREESNODE'
NODE_TABLE = NODE_TABLE
EXCEPTIONS
FAILED = 1
ERROR_IN_NODE_TABLE = 2
DP_ERROR = 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.
*設置TREE CONTROL中的節點默認為展開狀態
CALL METHOD G_TREE->EXPAND_NODE
EXPORTING
NODE_KEY = G_NODE_KEY
* LEVEL_COUNT =
* EXPAND_SUBTREE =
EXCEPTIONS
FAILED = 1
ILLEGAL_LEVEL_COUNT = 2
CNTL_SYSTEM_ERROR = 3
NODE_NOT_FOUND = 4
CANNOT_EXPAND_LEAF = 5
OTHERS = 6.
IF SY-SUBRC <> 0."...
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " CREATE_AND_INIT_TREE
*&---------------------------------------------------------------------*
*& FORM BUILD_NODE_TABLE
*&---------------------------------------------------------------------*
* TEXT
*----------------------------------------------------------------------*
* -->P_NODE_TABLE TEXT
*----------------------------------------------------------------------*
FORM BUILD_NODE_TABLE USING NODE_TABLE TYPE NODE_TABLE_TYPE.
DATA:NODE TYPE MTREESNODE.
DATA: L_INDEX LIKE SY-TABIX.
**設置父節點屬性
NODE-NODE_KEY = 'ZOA_REG'.
G_NODE_KEY = NODE-NODE_KEY.
CLEAR NODE-RELATKEY. " SPECIAL CASE: A ROOT NODE HAS NO PARENT
CLEAR NODE-RELATSHIP.
NODE-HIDDEN = ''. " THE NODE IS VISIBLE,
NODE-DISABLED = ''. " SELECTABLE,
NODE-ISFOLDER = 'X'. " A FOLDER.
* NODE-N_IMAGE = 'X'.
* NODE-EXP_IMAGE = 'X'.
NODE-STYLE = CL_GUI_SIMPLE_TREE=>STYLE_DEFAULT.
* NODE-NO_BRANCH = 'X'.
* NODE-EXPANDER = 'X'.
* NODE-DRAGDROPID
NODE-TEXT = '员工工号如下'.
APPEND NODE TO NODE_TABLE.
**設置子節點屬性
SORT IT_TREE BY USERNO.
L_INDEX = 0.
LOOP AT IT_TREE ASSIGNING <FS1>.
CLEAR: NODE-N_IMAGE.
L_INDEX = L_INDEX + 1.
NODE-NODE_KEY = L_INDEX .
NODE-RELATKEY = 'ZOA_REG'.
NODE-RELATSHIP = CL_GUI_SIMPLE_TREE=>RELAT_LAST_CHILD.
NODE-HIDDEN = ''. " THE NODE IS VISIBLE,
NODE-DISABLED = ''.
NODE-ISFOLDER = ' '. " 'X' 表示可折叠;'':表示不可折叠
NODE-TEXT = <FS1>-USERNO.
APPEND NODE TO NODE_TABLE.
ENDLOOP.
ENDFORM. " BUILD_NODE_TABLE
*&---------------------------------------------------------------------*
*& FORM GET_DATA
*&---------------------------------------------------------------------*
* TEXT
*----------------------------------------------------------------------*
* -->P_R_DATE TEXT
*----------------------------------------------------------------------*
FORM GET_DATA .
CLEAR : IT_TREE[].
SELECT * FROM ZOA_REG
INTO CORRESPONDING FIELDS OF TABLE IT_TREE WHERE WERKS = '1201'.
IF IT_TREE[] IS NOT INITIAL.
ELSE.
MESSAGE 'ERROR' TYPE 'E'.
ENDIF.
ENDFORM. " GET_DATA
5、画面SE51中设置如下图:
6、数据表如下:
7、运行结果:
至此,树控件设置结束。
转载于:https://www.cnblogs.com/saper/archive/2011/12/11/2334616.html
SAP屏幕设计器专题:树控件的使用(九)相关推荐
- SAP屏幕设计器专题:页签控件(八)
SO,此篇随笔用来讲解SAP屏幕中页签控件的使用. 一.运行SE38,新建一只程序 Z_SCREEN3,不用写任何代码,保存激活. 二.运行SE51,新建屏幕号0100,输入说明,点击"格式 ...
- SAP屏幕设计器专题:编写控件代码(三)
上一篇博文我只是画了一个屏幕,一个外壳而已,真正要实现我们需要的功能还需要写相应的代码. 输入SE51,打开我们的例子程序,切换到"流程逻辑",默认的屏幕代码如下图所示: 第一个P ...
- SAP屏幕设计器专题:表格控件属性的设定(七)
上篇讲到了如何设计一个表格控件出来,实现我们需要的功能.本篇来谈谈让表格更专业点. 一.选择框 本例通过选择品号之后按下Enter自动带出品名出来. 相应的程序中代码如下: 这样当程序在运行的时候就可 ...
- qt 定义一个长度的数组_Qt设计器:创建控件数组
也许这是一个愚蠢的问题,但我是新来的C + +和Qt.抱歉给您带来不便.Qt设计器:创建控件数组 在Qt Designer中,我创建多个标签(例如): my_label1 my_label2 my_l ...
- 基于web的工作流设计器(多比图形控件)
多比图形控件是一款基于Web的矢量图形控件, 类似于网页上的Visio控件,是目前国内外最佳的基于web的工作流设计器.工作流流程监视器解决方案. 可广泛应用于包括:电力.军工.煤炭.化工.科研.能源 ...
- 【Qt教程】2.1 - Qt5 UI设计器、常用控件
1. UI设计器使用 新建工程,将 .ui文件勾上. 双击 .ui文件,会弹出UI设计器,其布局大概为: 其中UI界面的信号槽只能使用系统事件,不能使用自定义信号与槽.所以主要还是由用户代码来完成. ...
- Qt编写控件属性设计器2-拖曳控件
一.前言 上一篇文章把插件加载好了,并且把插件中的所有控件都显示到了列表框中,这次要做的就是实现拖曳控件的功能,用户选择一个控件拖曳到画布上,松开,在松开位置处自动实例化该控件,这个需要用到dropE ...
- Qt编写控件属性设计器3-拉伸控件
一.前言 插件控件加载了,拖曳控件也实现了,接下来就是一个最难点了,跟QtDesigner或者其他开发环境一样,能够任意自由的拉伸控件大小,移动位置,为了这个功能,还特别编写了一个控件来实现这个功能, ...
- SAP UI5 应用开发教程之五十六 - SAP UI5 树控件(tree)的开发试读版
一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...
最新文章
- latex中插入代码
- 转载:T-SQL语句大全
- 白话Elasticsearch49-深入聚合数据分析之 Percentile Ranks Aggregation-percentiles rank以及网站访问时延SLA统计
- java怎么判断字符串是否为空的几种方法(亲测)
- excel筛选排序从小到大_excel表格怎么按字数的多少来排列!
- 重磅福利!10本豆瓣平均8.0分技术书免费看!速来!
- Epic:把虚幻引擎推向所有游戏平台
- swift中变量的几种类型
- IDEA+SpringBoot+Dubbo在webapp下创建前端页面
- java虚拟机-d参数配置_Java虚拟机(五):常用JVM配置参数
- AD6.8_mcu123 分享地址
- html矩形变圆形的代码,html5canvas绘制矩形和圆形的实例代码.pdf
- 周记——20150817
- (转载)北上广深房价只会涨不会降
- clonezilla使用_使用Clonezilla克隆Windows和Linux驱动器和分区
- Windows入侵痕迹清理
- 你只是看起来很努力-阅读记录
- Android TTS语音播报实践
- Linux 安装httpd(apache)超详细教程
- 买不起书的来下电子书吧
热门文章
- 二分查找树性能分析(Binary Search Tree Performance Analysis)
- vue项目-封装API接口
- MySQL 高级 - 存储过程 - 函数
- Thymeleaf读取model里面的对象||Thymeleaf读取model里面的集合||Themeleaf在js中取值||访问带参数的消息||ThymeleafObjects的使用[取三大作域的值
- js常用事件整理—兼容所有浏览器
- JSP知识点笔记-基本技术常识
- Python+selenium 自动化-selenium的版本查看和升级
- 5.4 matllab数据插值案例(机动车刹车距离问题、)
- OpenCV学习--saturate_cast防止数据溢出
- [Leetcode]笔记