Jerry答网友提问:SAP CRM WebClient UI里的EXT,STRUCT等含义

2020年,Jerry会做一个新的尝试,选择部分朋友向我提出的问题,在公众号,知识星球或者微信圈子这些平台上公开回答,这样或许能帮助到更多的朋友。
具体说明参见我前一篇文章:2020年关于SAP知识问答的一个新的尝试

网友的提问:

Jerry的解答:

以上截图是CRM系统里BSP_WD_CPMWB这个事务码进入之后,任意打开一个上下文节点(Context Node)看到的信息:

STRUCT的含义?

在Jerry之前的文章 Jerry的WebClient UI 42篇原创文章合集 提到这样一张图:

在UI层的CRM BSP component的MVC设计里,Model,即Context node,绑定的是Business Object Layer的模型,因此Context node Attributes文件夹下面,以STRUCT开头的字段,意味着这个字段是绑定到BOL模型节点里的一个字段的,二者存在一一对应关系,如下图箭头所示。而下图蓝色字段LOCKED, 前面没有STRUCT前缀,说明这个字段并非来自BOL模型节点,而是开发者直接创建的,这种字段一般用于应用逻辑里存储临时状态,或是代表当前应用的某个标志位,没有对应的底层存储,在SAP很多产品里也称这种字段为transient field或者calculated field.

展开某个字段,看到的GET, GET_M, GET_I, GET_V, GET_P, GET_A是什么意思?

要回答这个问题,得从CRM WebClient UI页面的渲染方式说起。

如上图这种视图源代码,使用的标签页不是HTML支持的原生标签,浏览器是无法识别和解析的,因此需要有一个中间层,或者说转换器,将这些SAP封装过的标签转换成浏览器支持的原生HTML标签。

按照这个转换器所处位置的不同,分为服务器端渲染和浏览器端渲染两种方式。SAP CRM WebClient UI基于SAP BSP技术——Business Server Page,光听名字就知道是在服务器端渲染了。而SAP UI5,是典型的浏览器端渲染,我们在其XML视图里书写的那些标签同样无法直接被浏览器使用,需要每个标签对应的渲染器,在浏览器端用JavaScript代码生成对应原生的HTML标签。

回到CRM WebClient UI,对于Attributes里的这些STRUCT字段们,我们在渲染出的最终页面里,有的是一般的输入字段,有的是超链接,有的是下拉框,有的不可编辑,SAP开发的转换器怎么知道要将每个字段渲染成什么样呢?

奥妙就在这些GET方法里。这里有一个小小的设计模式的思路在内,即SAP CRM WebClient UI的框架代码,负责服务器端渲染80%的工作量,即把整个页面的框架搭出来,包括一个页面有多少字段,字段之间的相对位置等。剩下20%的工作量,比如每个字段的类型,外观等属性,这些信息框架不可能知道,也不应该知道,这些应该由应用程序提供接口(也可以理解成回调),在接口里实现这些属性,然后由框架调用这些接口。我们可以把这个模式看成是设计模式里的一种——模板模式(Template Design Pattern).

看具体的例子。

双击进入CONFIG这个字段的GET_P方法里。P的意思是Property,属性。UI框架在渲染CONFIG这个字段时,会调用GET_P_CONFIG这个接口,询问应用:你想把CONFIG这个字段渲染成什么类型(下图第4行的fieldtype)?

应用程序通过第五行的field_type_checkbox回答框架:我想把CONFIG字段渲染成checkbox, 拜托了。

UI框架拿到这个信息后,就可以做对应的渲染工作了。

如果想研究UI拿到这个字段类型后如何渲染的细节,在GET_P方法里打断点,然后打开一个页面,单步调试记录:

GET_I: 如果应用逻辑里需要根据某种条件动态决定该字段是否可编辑,将逻辑写在这个接口里。

纯粹的GET_P方法:这里面奥妙很多,尤其是这个CONVERT_TO_STRING方法,将底层数据库表里对应的字段根据BOL模型里的字段类型渲染成最终对用户友好易读的字符串。比如底层数据库表里存储的是不含任何时区的时间戳(timestamp), 那么这个方法会根据用户设置里的时区,自动转换成该时区的本地时间。

GET_V: 如果想实现自定义的F4 Value Help,在此实现。

GET_A: 如果某字段的启用与否,依赖于某个Business Switch的开与关,在此实现。在SFW开头的系列事务码里查看和操作Business Switch和Function.

EXT开头的字段,代表通过CRM增强工具Application Extension Tool(AET)创建的增强字段。

希望本文能解答这位朋友提出的问题,感谢阅读。

相关阅读

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

原文地址:https://www.cnblogs.com/sap-jerry/p/12188779.html

时间: 2024-08-02 19:04:17

Jerry答网友提问:SAP CRM WebClient UI里的EXT,STRUCT等含义的相关文章

如何在SAP CRM WebClient UI里创建HANA Live Report

1. 使用业务角色ANALYTICSPRO登录WebClient UI: 2. 点击新建按钮: 为新建的报表分配一个HANA Live Query: 指定Query的参数: 上图WebClient UI选择的参数都定义在HANA studio里: 给报表添加属性: 添加measure: 之后报表即可在WebClient UI里成功渲染: 并且也能在CRM Fiori的Customer Report应用里看到该report. 如果想获得更多关于上图提到的Fiori应用,请查看我的公众号文章 SAP

CRM WebClient UI里的文件是如何上传到Netweaver后台的

使用Chrome开发者工具调试CRM WebClient UI里附件上传的功能: 从本地选择一个文件,断点触发: 前端取得用户选中上传的文件名: Jerry.txt 点Attach按钮后,触发ABAP后台的事件处理函数: 从Chrome开发者工具的network标签能观察到,UI向ABAP后台发送了一个http post请求: 后台依次处理所有的form parts: 从对应的form part里取出文件名称和文件类型: 以及实际的文件内容(由于security原因,该form part的内容无

SAP CRM WebClient UI和Fiori UI混搭并存

SAP CRM里有个功能可以创建HANA live report,消费HANA Studio里创建的模型. 最后创建好的report长这个样子: 具体创建步骤可以参考我的博客Step by Step to create HANA live report in Webclient UI 这些report肉眼上看去显示在WebClient UI里,而WebClient UI似乎不能这么灵活的显示这些风格特异的图标.这是怎么实现的呢? 红色方框里的UI区域实际上是一个UI5应用: Webclient

SAP CRM WebClient UI和Hybris backoffice UI开发的相同点

CRM WebClient和Hybris backoffice的UI开发都不需要开发人员手写原生的html代码. CRM WebClient UI 在CRM WebUI workbench里,开发人员需要写下图这些SAP封装的tag: 这些Tag能在事物码SE80里找到: Hybris backoffice UI 比如我通过backoffice左边倒L形的工作中心列表查看优惠券列表,这个列表实际上是一棵树,根节点是Marketing. 上图界面是通过在XML文件里定义Hybris封装的tag来实

SAP CRM WebClient UI和Hybris Commerce里的跨组件跳转

CRM WebClient UI How to debug cross component navigation framework https://wiki.scn.sap.com/wiki/display/CRM/How+to+debug+cross+component+navigation+framework Hybris 点了一个产品的图片,系统怎么知道需要load哪个jsp文件来渲染? 之前的issue讨论过,这个点击对应的url,会被Spring MVC map到一个通过@Reque

使用Selenium自动化测试SAP CRM WebClient UI

<meta charset="utf-8"> package com.xc.crm.test; import static org.junit.Assert.*; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.NoSuchElementException; imp

SAP CRM WebClient UI的on_new_focus应该怎么理解

问题 我在做练习16时(第3步的e,f),发现有一句这样的描述: Double click on method CONNECT_NODES.Make Value node 'Competitors' dependent from BTAdminH. METHOD connect_nodes. DATA: coll_wrapper TYPE REF TO cl_bsp_wd_collection_wrapper. coll_wrapper = btadminh->get_collection_wr

SAP CRM WebClient UI表格编辑模式的调试明细

如果我们写了EDITMODE = NONE, 那么toolbar不出现是expected的behavior 详见debug: 发现conversation history 里面的table cell可以编辑,这显示不make sense.同事在试图把这些table cell设成readonly的时候发现一些问题,总结如下: (1) 如果BSP html里面加上EDITMODE = "NONE", 则toolbar不会出来.开始同事认为这是framework的问题,但是通过下面的debu

CRM WebClient UI和Hybris里工作中心跳转的url生成逻辑

CRM WebClient UI 把Work center的navigation target在client side不可见:在Chrome development tool里看不到,而是点击了Work center之后,在后台ABAP端计算出navigation target. Hybris 这个Catalog的下拉menu里每个item都对应一个url,在html里用 tag实现.这个url在客户端可见. https://localhost:9002/yacceleratorstorefro