树视图可以用于表示数据的层次。

  例如:SAP CRM中的组织结构数据可以表示为树视图。

  在SAP CRM Web UI的术语当中,没有像表视图(table view)或者表单视图(form view)那种专门的树视图类型。我们可以认为树视图是表视图的一种特例。因此,没有可以用于创建树视图的向导,需要按以下特定的步骤手动改造已存在的视图。

  首先,这个看起来挺难的,但是随着实践次数的增多,你会很容易理解它。在本文,我将创建一个如下模样的树视图。

  

  如你所见,它有两级结构。第一级展示LEAD ID,下一级展示客户。我使用了这样一个简化过的例子。

  为了学习这个教程,我们需要创建一个表视图。这里不描述创建表视图的步骤,因为在先前的文章中已经讲过了。

  在本文中,我创建了一个使用了基本实体“BTQLeadDoc”的表视图。

  在组件控制器中创建了一个具有相同类型的上下文节点,并在其方法DO_INIT_CONTEXT中写入代码以获取数据。

  接着绑定表视图上下文节点和组件控制器上下文节点,因此表视图可以获取到数据。DO_INIT_CONTEXT中写入的代码如下。

  

  这段代码做了什么?

  我简单地获取了前10条lead记录,把它们交给上下文节点LEAD。在表视图和组件控制器上下文节点间进行了数据绑定,数据就会同样地流到表视图。

我们做好了准备,开始主要环节吧。

  首先,前往表视图上下文节点实现类并且把它的父类从“CL_BSP_WD_CONTEXT_NODE_TV”改为 “CL_BSP_WD_CONTEXT_NODE_TREE”。如果有询问特定方法重定义的对话框,选择“是”。

  该类提供了两个重要方法。

  GET_TABLE_LINE_SAMPLE 和 REFRESH.

  第一个方法将返回基于视图列的结构。

  REFRESH方法通常用于生成节点第一级或者根节点。

  我现在仅仅使用了两列来展示信息。因此前往GET_TABLE_LINE_SAMPLE按需要增加两列。

  方法激活后,使用事务BSP_WD_CMPWB代码重新打开整个组件。现在你可以在“配置”标签看到视图配置中的两列。将这两列从可用区域移动到展示区域,修改相应的标题,保存配置。

  我们将在后面使用REFRESH方法。

  现在有一个重要的步骤要做,就是修改htm文件中的标签。使用chtmlb标签:configTreeto 来显示树视图。前往htm页面,移除已存在的CONFIGCELLERATOR或者CONFIGTABLE标签,填入如下的标签,并激活。

  标签中的“LEAD”是一个上下文节点。

  nodeTextColumn属性用于选择树的根节点或者第一列的属性。这里我按照需求选择ID列。

  在使用了需要的节点填充节点表属性后,我们将它传递给LEAD->NODE_TAB。指定用于折叠树的事件处理器“collapse”和用于展开树的事件处理器“expand”:OnCollapseNode onExpandNode.

  下一步,我们需要在SE24中创建一个有父类的类。

  CL_BSP_WD_TREE_NODE_PROXY,这个类会提供一个叫作GET_CHILDREN的方法,用于创建子节点。

  

  在激活类之前,重定义GET_CHILDREN 方法并激活。让我们回到REFRESH方法,写下如下代码并激活。 

  

  只不过是循环上下文节点中的每条记录——换言之,lead记录——并且使用NODE_FACTORY的方法GET_PROXY为每条记录创建节点。接着我们使用方法ADD_ROOT_NODE为树添加根节点。在该场景中,因为我获取了10条记录,因而会创建10个根节点。

  传入刚刚在SE24中创建的类的名字给proxy type参数。我们已经创建好了根节点,但是还没显示它,需要手动地添加GETTER方法给代理类,以显示树中的属性。

  前往代理类“ZCL_TREE_PROXY_MAIN”复制方法IF_BSP_MODEL_SETTER_GETTER~_GET_XYZ点击过滤复选框,并且将其复制到空行。这样做将会复制方法所需要的所有导入导出参数。接着修改名字为GET_ID。我们只复制GETTER方法模板,并且根据属性名对它重命名。 

  

  

  写下如下代码,以获取lead的ID。

  

  第一级节点的创建和显示已经完成,下一步要关注子节点(客户节点)。为创建第二级节点,需要在代理类的get_children方法中写代码。我们将为子节点创建一个代理类。前往SE24并且按上面的方法创建一个新的类。

  

  我们也需要展示客户。按照相同的程序添加一个GETTER方法GET_PROSPECT,写下如下代码。 

  

  需要记住的关键点是,我们在代理类中创建GETTER方法,他们不是上下文节点类的一部分。

  子节点的显示完成了,但我们没有创建它。现在前往创建的第一个类“ZCL_TREE_PROXY_MAIN”,在GET CHILDREN方法中写入代码。

  

  

  

  这些代码做了什么?

  这里我们使用了一些BOL编程,来获取lead的客户,因此需要通过某些关系来到达目标实体BTPARTNER。我读取了lead的所有合作伙伴。

  获取所有合作伙伴之后,循环每个合作伙伴,使用NODE FACTORY方法和上面创建的“ZCL_TREE_PROXY_CUSTOME”来创建子节点。

  创建子节点后,设置IS_LEAF属性为TRUE,因为在该场景中,CUSTOMER是最后一级,在这之后不显示任何客户下的子节点。因此,子节点的文件夹图标的相邻处不会有任何箭头显示。

  接下来在视图实现类中创建两个事件处理器,名为collapse和expand,并写下如下代码。

  

  

  如名所示,在你折叠或展开节点时会触发它们。

  我们需要做的最后一件事是在DO PREPARE OUTPUT方法中添加一点代码,来调用REFRESH方法。

  

  现在,你可以运行应用,观察输出。

  当你第一次看这篇教程时,看起来会有很多步骤,但实际上,它不是那么难。

  如果想要将“地址”显示为“客户”的子节点,需要创建一个新的代理类,在CUSTOMER代理类的GET CHILDREN方法中通过客户和地址间的BOL关系写入代码,并且需要一个在那个代理类添加GETTER方法以显示地址。别忘记在GET_TABLE_LINE_SAMPLE中添加一个新的“地址”列。

  你可以自己试试。希望本文能帮助你,也希望你能把这个站点推荐给你的同事,如果你觉得它值得的话。

本文链接:http://www.cnblogs.com/hhelibeb/p/6035059.html

原文链接:TREE VIEW   

更多信息请参考:Tree view change and save

 

最新文章

  1. windows64系统中mysql64位绿色安装
  2. HierarchyViewer for iOS 2.0 BETA Introduction
  3. 基因变异(codevs 3194)
  4. VBA excel中表示列的字母换成数字
  5. Java将Unix时间戳转换成指定格式日期
  6. mysql笔记(前面自己写的不标准有些地方)
  7. jqery基础知识
  8. UITableViewCell 上的按钮点击事件
  9. TCP/IP协议的编写《转载》
  10. SAP HANA studio 创建分析视图
  11. hackerrank 训练军队
  12. MyBatis缓存策略
  13. 【Qt】窗口居中显示
  14. C#实现Zip压缩解压实例
  15. apache 多并发测试
  16. openstack(Pike 版)集群部署(二)--- Keystone 部署
  17. ListView嵌套 EditText的光标不显示
  18. Xtreme8.0 - Kabloom 动态规划
  19. 高校区LAN局域网校内网组建实践经验
  20. LRU缓存淘汰算法

热门文章

  1. 使用struct处理二进制
  2. ASP.NET Core 1.1.0 Release Notes
  3. 使用 JavaScriptService 在.NET Core 里实现DES加密算法
  4. 猖獗的假新闻:2017年1月1日起iOS的APP必须使用HTTPS
  5. pdo的使用
  6. 统计iOS项目的总代码行数的方法
  7. 安卓客户端a标签长按弹框提示解决办法
  8. 解决 Could not find com.android.tools.build:gradle 问题
  9. git提交项目到已存在的远程分支
  10. 「译」JUnit 5 系列:环境搭建