在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屏幕设计器专题:树控件的使用(九)相关推荐

  1. SAP屏幕设计器专题:页签控件(八)

    SO,此篇随笔用来讲解SAP屏幕中页签控件的使用. 一.运行SE38,新建一只程序 Z_SCREEN3,不用写任何代码,保存激活. 二.运行SE51,新建屏幕号0100,输入说明,点击"格式 ...

  2. SAP屏幕设计器专题:编写控件代码(三)

    上一篇博文我只是画了一个屏幕,一个外壳而已,真正要实现我们需要的功能还需要写相应的代码. 输入SE51,打开我们的例子程序,切换到"流程逻辑",默认的屏幕代码如下图所示: 第一个P ...

  3. SAP屏幕设计器专题:表格控件属性的设定(七)

    上篇讲到了如何设计一个表格控件出来,实现我们需要的功能.本篇来谈谈让表格更专业点. 一.选择框 本例通过选择品号之后按下Enter自动带出品名出来. 相应的程序中代码如下: 这样当程序在运行的时候就可 ...

  4. qt 定义一个长度的数组_Qt设计器:创建控件数组

    也许这是一个愚蠢的问题,但我是新来的C + +和Qt.抱歉给您带来不便.Qt设计器:创建控件数组 在Qt Designer中,我创建多个标签(例如): my_label1 my_label2 my_l ...

  5. 基于web的工作流设计器(多比图形控件)

    多比图形控件是一款基于Web的矢量图形控件, 类似于网页上的Visio控件,是目前国内外最佳的基于web的工作流设计器.工作流流程监视器解决方案. 可广泛应用于包括:电力.军工.煤炭.化工.科研.能源 ...

  6. 【Qt教程】2.1 - Qt5 UI设计器、常用控件

    1. UI设计器使用 新建工程,将 .ui文件勾上. 双击 .ui文件,会弹出UI设计器,其布局大概为: 其中UI界面的信号槽只能使用系统事件,不能使用自定义信号与槽.所以主要还是由用户代码来完成. ...

  7. Qt编写控件属性设计器2-拖曳控件

    一.前言 上一篇文章把插件加载好了,并且把插件中的所有控件都显示到了列表框中,这次要做的就是实现拖曳控件的功能,用户选择一个控件拖曳到画布上,松开,在松开位置处自动实例化该控件,这个需要用到dropE ...

  8. Qt编写控件属性设计器3-拉伸控件

    一.前言 插件控件加载了,拖曳控件也实现了,接下来就是一个最难点了,跟QtDesigner或者其他开发环境一样,能够任意自由的拉伸控件大小,移动位置,为了这个功能,还特别编写了一个控件来实现这个功能, ...

  9. SAP UI5 应用开发教程之五十六 - SAP UI5 树控件(tree)的开发试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

最新文章

  1. latex中插入代码
  2. 转载:T-SQL语句大全
  3. 白话Elasticsearch49-深入聚合数据分析之 Percentile Ranks Aggregation-percentiles rank以及网站访问时延SLA统计
  4. java怎么判断字符串是否为空的几种方法(亲测)
  5. excel筛选排序从小到大_excel表格怎么按字数的多少来排列!
  6. 重磅福利!10本豆瓣平均8.0分技术书免费看!速来!
  7. Epic:把虚幻引擎推向所有游戏平台
  8. swift中变量的几种类型
  9. IDEA+SpringBoot+Dubbo在webapp下创建前端页面
  10. java虚拟机-d参数配置_Java虚拟机(五):常用JVM配置参数
  11. AD6.8_mcu123 分享地址
  12. html矩形变圆形的代码,html5canvas绘制矩形和圆形的实例代码.pdf
  13. 周记——20150817
  14. (转载)北上广深房价只会涨不会降
  15. clonezilla使用_使用Clonezilla克隆Windows和Linux驱动器和分区
  16. Windows入侵痕迹清理
  17. 你只是看起来很努力-阅读记录
  18. Android TTS语音播报实践
  19. Linux 安装httpd(apache)超详细教程
  20. 买不起书的来下电子书吧

热门文章

  1. 二分查找树性能分析(Binary Search Tree Performance Analysis)
  2. vue项目-封装API接口
  3. MySQL 高级 - 存储过程 - 函数
  4. Thymeleaf读取model里面的对象||Thymeleaf读取model里面的集合||Themeleaf在js中取值||访问带参数的消息||ThymeleafObjects的使用[取三大作域的值
  5. js常用事件整理—兼容所有浏览器
  6. JSP知识点笔记-基本技术常识
  7. Python+selenium 自动化-selenium的版本查看和升级
  8. 5.4 matllab数据插值案例(机动车刹车距离问题、)
  9. OpenCV学习--saturate_cast防止数据溢出
  10. [Leetcode]笔记