设为首页 收藏本站
查看: 1092|回复: 0

[经验分享] SAP屏幕设计器专题:树控件的使用(九)

[复制链接]

尚未签到

发表于 2015-9-17 12:45:53 | 显示全部楼层 |阅读模式
  在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中设置如下图:
DSC0000.jpg
  6、数据表如下:
DSC0001.jpg
  7、运行结果:
DSC0002.jpg
DSC0003.jpg
DSC0004.jpg
  
  至此,树控件设置结束。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-114964-1-1.html 上篇帖子: SAP abaper的一天 下篇帖子: 【转】SAP反记账功能祥解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表