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

  例如: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

 

SAP CRM 树视图(TREE VIEW)的更多相关文章

  1. SAP CRM 复用视图

    在设计任何视图或组件的时候,我们需要以可复用的方式来设计它.UI组件设计的主要目标即可复用. 例如:几乎每个事务都要处理合作伙伴(客户).如果我们想要在Web UI显示那些合作伙伴,需要设计一个视图. ...

  2. SAP HANA中创建计算视图(Calculation View)

    [Step By Step]SAP HANA中创建计算视图(Calculation View) Demo Instruction: 该视图将两个表AUDIOBOOKS和BOOKS中的数据进行连接,并作 ...

  3. SAP CRM 性能小技巧

    导言 本页面打算收集SAP CRM实施中可以用于避免性能问题的注意事项,重要的事项会由图标标识. 如果你有其他的技巧想要说出来,别犹豫! 性能注意事项 通用 缓存读取类访问,特别是在性能关键的地方,比 ...

  4. SAP CRM 显示消息/在消息中进行导航

    向用户展示消息,在任何软件中都是十分重要的. 在SAP CRM WEB UI中展示消息,不是一项很难的任务,只需要创建消息并在之后调用方法来显示它 消息类和消息号: 我在SE91中创建了如下的消息类和 ...

  5. SAP CRM 客户控制器与数据绑定

    当用户从视图离开时,视图将失去它的数据.解决这个问题,需要引入客户控制器(Custom Controller)(译者注:SAP CRM客户端中,不同地方的Custom Controller会翻译为“客 ...

  6. Angular实现递归指令 - Tree View

    在层次数据结构展示中,树是一种极其常见的展现方式.比如系统中目录结构.企业组织结构.电子商务产品分类都是常见的树形结构数据. 这里我们采用Angular的方式来实现这类常见的tree view结构. ...

  7. 多层json的构造,取值,还有使用bootstrap的tree view在前端展示的相关问题

    bootstrap-tree view是一款非常好用的插件,它可以添加任意多层节点,效果如下所示: 使用之前需要在HTML页面添加依赖文件: <link href="bootstrap ...

  8. SAP CRM 自定义控制器与数据绑定

    当用户从视图离开时,视图将失去它的数据.解决这个问题,需要引入自定义控制器(Custom Controller)(译者注:SAP CRM自定义端中,不同地方的Custom Controller会翻译为 ...

  9. SAP ERP 与SAP CRM有什么不同?

    SAP ERP 与SAP CRM有什么不同? 从管理理念上来说,ERP是提高企业内部资源的计划和控制能力,讲究的是在满足客户.及时交货的同时最大限度地降低各种成本,通过提高内部运转效率来提高对客户的服 ...

随机推荐

  1. ExtJS 4.2 评分组件

    上一文章是扩展ExtJS自带的Date组件.在这里将创建一个评分组件. 目录 1. 介绍 2. 示例 3. 资源下载 1. 介绍 代码参考的是 Sencha Touch 2上的一个RatingStar ...

  2. SQL Server on Linux 理由浅析

    SQL Server on Linux 理由浅析 今天的爆炸性新闻<SQL Server on Linux>基本上在各大科技媒体上刷屏了 大家看到这个新闻都觉得非常震精,而美股,今天微软开 ...

  3. 在Sublime Text 3上安装代码格式化插件CodeFormatter

    1.了解CodeFormatter插件 在Sublime Text 3中编写代码,为了能让我们的代码格式变得漂亮整洁,需要一个能自动格式代码的插件.这里发现CodeFormatter插件不错,它能支持 ...

  4. Android总结之链式调用(方法链)

    前言: 最近在学习总结Android属性动画的时候,发现Android的属性动画设计采用了链式调用的方式,然后又回顾了一下了以前接触的开源框架Glide也是采用链式调用的方式,还有最近火的一塌糊涂的R ...

  5. 协议森林17 我和你的悄悄话 (SSL/TLS协议)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. TLS名为传输层安全协议(Transport Layer Protocol),这个协议是一套加密的 ...

  6. 【干货分享】流程DEMO-出差申请单

    流程名: 出差申请  业务描述: 员工出差前发起流程申请,流程发起时,会检查预算,如果预算不够,将不允许发起费用申请,如果预算够用,将发起流程,同时占用相应金额的预算,但撤销流程会释放相应金额的预算. ...

  7. 【从零开始学BPM,Day3】自定义表单开发

    [课程主题] 主题:5天,一起从零开始学习BPM [课程形式] 1.为期5天的短任务学习 2.每天观看一个视频,视频学习时间自由安排. [第三天课程] 1.课程概要 Step 1 软件下载:H3 BP ...

  8. SQL字符串函数

    LEN() :计算字符串长度(字符的个数.)datalength();//计算字符串所占用的字节数,不属于字符串函数.测试varchar变量与nvarchar变量存储字符串a的区别.见备注1.LOWE ...

  9. Ubuntu 16.04 安装 arm-linux-gcc 嵌入式交叉编译环境 问题汇总

    闲扯: 实习了将近半年一直在做硬件以及底层的驱动,最近要找工作了发现了对linux普遍要求很高,而且工作岗位也非常多,所以最近一些时间在时不时地接触linux. 正文:(我一时兴起开始写博客,准备不充 ...

  10. mono3.2和monodevelop4.0在ubuntu12.04上两天的苦战

    首先第一步是设置ubuntu server 12.04版更新源,推荐中科大的比较快:deb http://debian.ustc.edu.cn/ubuntu/ precise main multive ...