树视图可以用于表示数据的层次。
例如:SAP CRM中的组织结构数据可以表示为树视图。
在SAP CRM Web UI的术语当中,没有像表视图(table view)或者表单视图(form view)那种专门的树视图类型。我们可以认为树视图是表视图的一种特例。因此,没有可以用于创建树视图的向导,需要按以下特定的步骤手动改造已存在的视图。
首先,这个看起来挺难的,但是随着实践次数的增多,你会很容易理解它。在本文,我将创建一个如下模样的树视图。
如你所见,它有两级结构。第一级展示线索ID,下一级展示客户。我使用了这样一个简化过的例子。
为了学习这个教程,我们需要创建一个表视图。这里不描述创建表视图的步骤,因为在先前的文章中已经讲过了。
在本文中,我创建了一个使用了基本实体“BTQLeadDoc”的表视图。
在组件控制器中创建了一个具有相同类型的上下文节点,并在其方法DO_INIT_CONTEXT中写入代码以获取数据。
接着绑定表视图上下文节点和组件控制器上下文节点,因此表视图可以获取到数据。DO_INIT_CONTEXT中写入的代码如下。
这段代码做了什么?
我简单地获取了前10条线索记录,把它们交给上下文节点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方法模板,并且根据属性名对它重命名。
写下如下代码,以获取线索的ID。
第一级节点的创建和显示已经完成,下一步要关注子节点(客户节点)。为创建第二级节点,需要在代理类的get_children方法中写代码。我们将为子节点创建一个代理类。前往SE24并且按上面的方法创建一个新的类。
我们也需要展示客户。按照相同的程序添加一个GETTER方法GET_PROSPECT,写下如下代码。
需要记住的关键点是,我们在代理类中创建GETTER方法,他们不是上下文节点类的一部分。
子节点的显示完成了,但我们没有创建它。现在前往创建的第一个类“ZCL_TREE_PROXY_MAIN”,在GET CHILDREN方法中写入代码。
这些代码做了什么?
这里我们使用了一些BOL编程,来获取线索对应的客户,因此需要通过某些关系来到达目标实体BTPARTNER。我读取了线索的所有合作伙伴。
获取所有合作伙伴之后,循环每个合作伙伴,使用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 WEB UI中展示消息,不是一项很难的任务,只需要创建消息并在之后调用方法来显示它
消息类和消息号:
我在SE91中创建了如下的消息类和消息号。
我们需要在合适的地方写代码以在Web UI中显示消息。这里我就在DO PREPARE OUTPUT方法放置代码了。
cl_bsp_wd_message_service用于在Web UI中显示消息。在上面的代码中,我们获取了一个消息服务的实例,接着调用它的ADD_MESSAGE方法并传入消息号id 消息号和消息类型。
消息类型指出了消息的种类:E是错误,S是成功,W是警告,I则是信息。
所有的E类型会显示为红色,所有的W类型会显示为黄色。
这是我运行应用后获取的输出结果。
长文本:
有时,我们也许想要随着错误提示展示更多的信息。在这种情况下,需要为消息类中的消息维护长文本。
在消息的长文本得到维护后,框架会自动地在消息后面显示一个名为“DETAILS”的链接条。如果用户点击,他会被得到一个带有详细信息的弹出框。
前往消息类,维护长文本。别忘记关闭弹出框的自我解释。
保存,运行应用。
可导航的消息:
在上面的部分,我们已经创建了简单的消息。有些时候,我们不得不执行某些特定的行为,来处理错误消息。
比如,点击错误消息,用户会被导航到某些其它屏幕上面,或者触发某些特定的代码。
在下面这个例子中我将展示如何在点击消息栏中的消息导航到另一个视图中。
我已经创建了两个视图,制作了一个从源视图到目标视图的导航链接,并且把两个视图都分配给了窗口。源视图为默认视图,因此在显示窗口时,源视图会首先显示。请看下面的截图:
第一步,我们需要添加一个接口“IF_BSP_WD_MESSAGE_HANDLER”在你的视图实现类里面,如果它不是可用的。
添加后,激活类。
接下来,我们需要把消息订阅到全局消息服务。我在DO PREPARE OUTPUT中写下了如下代码:
首先使用subscribe message方法来订阅消息,之后让消息在Web UI中可见。保存并激活方法。
如果你现在测试应用,可以看到消息将显示为超链接。
无论何时,当用户点击超链接,IF_BSP_WD_MESSAGE_HANDLER~HANDLE_MESSAGE会触发。我们需要在该方法中写代码。
前往视图实现类,添加如下代码。
在这个方法中,我简单地触发了导航,把导航链接的值作为参数传递给外向插件。
测试应用。
点击消息,你就可以导航到目标视图了。
本文链接:http://www.cnblogs.com/hhelibeb/p/6019699.html
原文链接:DISPLAYING MESSAGES
参考阅读:Message handling in SAP CRM Web UI
- « 前一页
- 1
- ...
- 14
- 15
- 16
- 17
- 18
- 19
- 后一页 »