在这一篇中将学习一下ALV Tree的使用方法。通过名字可以看出,ALV TREE应该是将ALV与TREE这两者进行组合。

ALV Tree实现原理:创建一个 cl_gui_alv_tree对象,定义一个 treev_hhdr类型的数据,主要用来显示tree的Header信息。调用ALVtree的  SET_TABLE_FOR_FIRST_DISPLAY方法,调用ALV tree的 ADD_NODE方法逐行添加数据。在这里不进行详细描述,直接看代码吧。

*&---------------------------------------------------------------------*
*& Report  ZTEST_TREE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZTEST_TREE.

DATA: g_alv_tree           TYPE REF TO cl_gui_alv_tree,
      g_customer_container TYPE REF TO cl_gui_custom_container.

DATA: gt_sflight      type sflight occurs 0,
      ok_code like sy-ucomm,
      save_ok like sy-ucomm.

start-of-SELECTION.
  set SCREEN 100.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
  SET PF-STATUS 'MAIN0100'.
*  SET TITLEBAR 'xxx'.
  IF g_alv_tree is INITIAL.
    PERFORM init_tree.
  ENDIF.
  call method cl_gui_cfw=>flush.
ENDMODULE.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
  save_ok = ok_code .
  CLEAR ok_code.
  CASE save_ok .
    WHEN 'EXIT'.
      CALL METHOD g_alv_tree->FREE.
      leave program.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*&      Form  init_tree
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM init_tree .
  CREATE OBJECT g_customer_container
    EXPORTING
      CONTAINER_NAME     = 'CUS_CON'
      .

CREATE OBJECT g_alv_tree
    EXPORTING
      PARENT                      = g_customer_container
      NODE_SELECTION_MODE         = CL_GUI_COLUMN_TREE=>node_sel_mode_single
      ITEM_SELECTION              = 'X'
      NO_HTML_HEADER              = 'X'
      .

DATA: g_tree_header type treev_hhdr.
  g_tree_header-HEADING = 'Month/Carrier/Date'.
  g_tree_header-TOOLTIP = 'Flights in a month'.
  g_tree_header-width   = 30.

CALL METHOD g_alv_tree->SET_TABLE_FOR_FIRST_DISPLAY
    EXPORTING
      I_STRUCTURE_NAME    = 'SFLIGHT'
      IS_HIERARCHY_HEADER = g_tree_header
    CHANGING
      IT_OUTTAB           = gt_sflight.

perform create_hierarchy.
  CALL METHOD g_alv_tree->FRONTEND_UPDATE.

ENDFORM.                    " init_tree
*&---------------------------------------------------------------------*
*&      Form  create_hierarchy
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM create_hierarchy .
  DATA: ls_sflight type sflight,
        lt_sflight type sflight occurs 0,
        t_yyyymm(6) TYPE C,
        t_carrid LIKE sflight-carrid,
        t_yyyymm_last(6) TYPE C,
        t_carrid_last LIKE sflight-carrid.

DATA: K_month type lvc_nkey,
        K_carrid type lvc_nkey,
        K_last TYPE lvc_nkey.

select * from sflight into table lt_sflight up to 150 rows.
  SORT lt_sflight by fldate+0(6) carrid fldate+6(2).

LOOP AT lt_sflight INTO ls_sflight.
    t_yyyymm = ls_sflight-fldate+0(6).
    t_carrid = ls_sflight-carrid.

IF t_yyyymm <> t_yyyymm_last.
      t_yyyymm_last = t_yyyymm.
      PERFORM AddMonth USING t_yyyymm
                       CHANGING K_month .
      CLEAR t_carrid_last.
    ENDIF.

IF t_carrid <> t_carrid_last.
      t_carrid_last = t_carrid.
      PERFORM AddCarrid USING t_carrid K_month
                        CHANGING K_carrid.
    ENDIF.

PERFORM AddLine USING ls_sflight K_carrid
                    CHANGING K_last.
  ENDLOOP.
ENDFORM.                    " create_hierarchy
*&---------------------------------------------------------------------*
*&      Form  AddMonth
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_T_YYYYMM  text
*      <--P_K_MONTH  text
*----------------------------------------------------------------------*
FORM AddMonth  USING    P_T_YYYYMM TYPE C
               CHANGING P_K_MONTH TYPE lvc_nkey.
  DATA: g_sflight TYPE sflight,
        l_node_text type lvc_value.
  l_node_text = P_T_YYYYMM.
  CALL METHOD g_alv_tree->ADD_NODE
    EXPORTING
      I_RELAT_NODE_KEY     = ''
      I_RELATIONSHIP       = cl_gui_column_tree=>relat_last_child
      IS_OUTTAB_LINE       = g_sflight
*      IS_NODE_LAYOUT       =
*      IT_ITEM_LAYOUT       =
      I_NODE_TEXT          = l_node_text
    IMPORTING
      E_NEW_NODE_KEY       = P_K_MONTH
*    EXCEPTIONS
*      RELAT_NODE_NOT_FOUND = 1
*      NODE_NOT_FOUND       = 2
*      others               = 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.
ENDFORM.                    " AddMonth
*&---------------------------------------------------------------------*
*&      Form  AddCarrid
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_T_CARRID  text
*      -->P_K_MONTH  text
*      <--P_K_CARRID  text
*----------------------------------------------------------------------*
FORM AddCarrid  USING    P_T_CARRID TYPE  sflight-carrid
                         P_K_MONTH TYPE lvc_nkey
                CHANGING P_K_CARRID TYPE lvc_nkey.
  DATA: g_sflight TYPE sflight,
        l_node_text type lvc_value.
  l_node_text = P_T_CARRID.
  CALL METHOD g_alv_tree->ADD_NODE
    EXPORTING
      I_RELAT_NODE_KEY     = P_K_MONTH
      I_RELATIONSHIP       = cl_gui_column_tree=>relat_last_child
      IS_OUTTAB_LINE       = g_sflight
*      IS_NODE_LAYOUT       =
*      IT_ITEM_LAYOUT       =
      I_NODE_TEXT          = l_node_text
    IMPORTING
      E_NEW_NODE_KEY       = P_K_CARRID
*    EXCEPTIONS
*      RELAT_NODE_NOT_FOUND = 1
*      NODE_NOT_FOUND       = 2
*      others               = 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.
ENDFORM.                    " AddCarrid
*&---------------------------------------------------------------------*
*&      Form  AddLine
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_LS_SFLIGHT  text
*      -->P_K_CARRID  text
*      <--P_K_LAST  text
*----------------------------------------------------------------------*
FORM AddLine  USING    P_LS_SFLIGHT TYPE sflight
                       P_K_CARRID TYPE lvc_nkey
              CHANGING P_K_LAST TYPE lvc_nkey.
  DATA: l_node_text type lvc_value.
  l_node_text = P_LS_SFLIGHT-fldate.
  CALL METHOD g_alv_tree->ADD_NODE
    EXPORTING
      I_RELAT_NODE_KEY     = P_K_CARRID
      I_RELATIONSHIP       = cl_gui_column_tree=>relat_last_child
      IS_OUTTAB_LINE       = P_LS_SFLIGHT
*      IS_NODE_LAYOUT       =
*      IT_ITEM_LAYOUT       =
      I_NODE_TEXT          = l_node_text
    IMPORTING
      E_NEW_NODE_KEY       = P_K_LAST
*    EXCEPTIONS
*      RELAT_NODE_NOT_FOUND = 1
*      NODE_NOT_FOUND       = 2
*      others               = 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.
ENDFORM.                    " AddLine

ALV TREE学习笔记相关推荐

  1. Link Cut Tree 学习笔记

    Link Cut Tree 学习笔记 说在前边 最近补 CF 碰见一道 LCT ,就打算学习一下这个东西...顺便复习一下 splay. 具体算法及实现 参考了FlashHu, Candy? P369 ...

  2. K-D Tree 学习笔记

    K-D Tree 学习笔记 最近看了一下k-NN然后它说如果特征空间维数比较低的时候用K-D Tree来求k近邻比较快所以就来补一下学OI时没学的K-D Tree假装写一个学习笔记吧. 是什么? 是一 ...

  3. Retrieval based on EI tree学习笔记

    Retrieval based on EI tree 针对于图像检索中替换属性的问题,属性的表示贯穿训练始终,但是属性之间的关系却没有被利用好.本文使用了EI-tree的结构,表示属性间的关系. 1. ...

  4. Decision Tree学习笔记(基础篇)

    写在前面,博客仅供个人学习所用,不得商用.有问题请评论,我也是初学者,大家共同进步. 参考链接:决策树的一些基本概念以及实现原理 决策树python调用 决策树实现代码python 基本概念 决策树的 ...

  5. LSM Tree 学习笔记——MemTable通常用 SkipList 来实现

    最近发现很多数据库都使用了 LSM Tree 的存储模型,包括 LevelDB,HBase,Google BigTable,Cassandra,InfluxDB 等.之前还没有留意这么设计的原因,最近 ...

  6. ALV GRID学习笔记----Double Click事件

    10月底的时候进行了BC412课程的培训,课后自己做了一些实验,从今天开始就将这些实验记录下来,以便于以后需要使用的时候能够查询一下!(很遗憾的是公司组织了很多的培训,但是在实际工作中很少能够运到,所 ...

  7. K-D Tree学习笔记

    引入 K-D Tree 是一种处理高维空间的数据结构. 支持O(nk−1k)O(n^{\frac {k-1}k})O(nkk−1​)查询给定超矩形内的点的信息, kkk 为维数. 可以用替罪羊树的思想 ...

  8. Link/Cut Tree学习笔记

    最近正是实验课的高峰期,我数了一下,除了毛概没有实验课,其他的课都有实验课...不过好在这些实验都不是很难.我尽力挤出时间用来刷题. 简介 Link/Cut Tree和树链剖分很相似,二者处理的问题也 ...

  9. Link Cut Tree学习笔记

    捋一下思路 模板题:https://www.luogu.org/problemnew/show/P3690 推荐LCT的教程,个人认为很详细,本文做了部分引用:https://www.luogu.or ...

最新文章

  1. LIbGDX 示例Tests详解一:AccelerometerTest
  2. shell 练习(13) —— 监控 httpd 进程数是否异常
  3. vue-cli2、vue-cli3脚手架详细讲解
  4. java web tcp长连接超时时间_常用java web容器http长连接超时设置
  5. linux-vim-文本编辑
  6. 本地、服务器文件互传命令
  7. nacl溶解度_运用溶解度曲线判断混合物分离、提纯的方法
  8. 2013.01.16 Python的面向对象编程
  9. 机械系统传动创新组合设计实验台,QY-JXSX08
  10. DoTween动画系统
  11. 微软招 HR 了!看来是招聘需求太旺盛,忙不过来了
  12. mac小白怎么下载网页视频?
  13. 从共享征信黑名单开始:LinkEye想打造基于区块链的征信联盟
  14. 阿里巴巴JAVA代码规范二【Major】
  15. FastDFS清空数据及文件步骤
  16. 顺时针打印矩阵(编程题讲解)
  17. STM32G4外设之GPIO
  18. jdk和jre(jdk和jre的关系)
  19. 卡罗林斯卡医学院计算机方向,卡罗林斯卡医学院:全球卫生专业受学生欢迎
  20. 什么叫克隆人_什么叫克隆人?克隆技术有什么好处,快来涨姿

热门文章

  1. haproxy小结(一)基础概念篇
  2. iTerm,让你的Mac OS命令行也能丰富多彩
  3. 3.JAVA基础复习——JAVA中的类与对象
  4. ToString()、Convert.ToString()、(string)、as string 的区别
  5. Bugzill 备份
  6. 改善医疗营运效率 哈佛医学中心与 AWS 共同合作
  7. linux查看内存、CPU占用资源最多的进程
  8. Linux深入理解Socket异常
  9. 测试与CMMI质量体系
  10. 开源 java CMS - FreeCMS2.3会员个人资料