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的WebClient UI 42篇原创文章合集
  • 也可以了解Jerry提到的UI5的客户端渲染方式,看Jerry这篇文章:Jerry的UI5框架代码自学教程

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

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

  1. SAP CRM WebClient UI里如何找到Assignment block和settype的映射关系

    SAP CRM WebClient UI 产品主数据里的assignment block,要么对应一个settype,要么对应一个relationship. 如何根据assignment block, ...

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

    使用Chrome开发者工具调试CRM WebClient UI里附件上传的功能: 从本地选择一个文件,断点触发: 前端取得用户选中上传的文件名: Jerry.txt 点Attach按钮后,触发ABAP ...

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

    1. 使用业务角色ANALYTICSPRO登录WebClient UI: 2. 点击新建按钮: 为新建的报表分配一个HANA Live Query: 指定Query的参数: 上图WebClient U ...

  4. 如何在 SAP CRM WebClient UI 里在 Context node 上下文里访问其他 Context Node 的数据

    今天一个朋友在微信上咨询我一个问题: 抽象一下,这个问题就是:如何在 Context Node A 的上下文,比如 GET 方法里,读取到 Context Node B 的数据? 以 Product ...

  5. SAP CRM webclient ui里直接编写原生的JavaScript

  6. SAP CRM WebClient UI交互式报表的Gross Value工作原理

    SAP CRM WebClient UI交互式报表(Interactive Report)的Gross Value工作原理 the selection fields passed to backend ...

  7. SAP CRM WebClient UI搜索结果界面的扩展字段显示

    SAP CRM WebClient UI搜索结果界面的扩展字段显示原理. 要获取更多Jerry的原创文章,请关注公众号"汪子熙":

  8. SAP CRM WebClient UI和CRM Fiori Account里显示Opportunity逻辑

    我们知道SAP CRM WebClient UI的Account页面下有一个assignment block名叫opportunities,在SAP CRM Fiori UI里也有一个opportun ...

  9. 在SAP CRM WebClient UI中用javascript触发ABAP event

    环境:SAP CRM WebClient UI 需求:在WebClient UI里不通过用户手动点击,而是使用JavaScript代码自动触发ABAP后台的代码. 解决方案: 1. 定义一个hidde ...

最新文章

  1. os与sys类使用小节
  2. oracle 会话实例,返璞归真:Oracle实例级别和会话级别的参数设置辨析
  3. 常见三种字符编码的区别:ASCII、Unicode、UTF-8
  4. Android----使用代码 建立gprs 闹钟 连接
  5. 《windows核心编程》–Windows内存体结构(二)
  6. 最新 MySQL数据库安装详解(简洁快速)
  7. CUDA——线程配置
  8. Spark提交代码的两种方式
  9. python curl 获取返回值_php curl_exec()函数 CURL获取返回值的方法
  10. Web 应用程序渗透测试清单
  11. python编程就业_python编程语言就业做什么工作的?python就业方向
  12. 短时傅里叶变换STFT(matlab)
  13. 2021年与 Linux 有关的几件大事
  14. 减轻压力保护脊椎,上学路上更轻松,Deuter多特护脊减负双肩背包体验
  15. win10插入耳机没声音解决办法
  16. 【软考软件评测师】2019综合知识历年真题
  17. ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to
  18. AutoCad二次开发:ObjectARX
  19. 基于JAVA+SpringMVC+Mybatis+MYSQL的书笺小筑二手书交易系统
  20. css控制中文字体间距

热门文章

  1. Visual basic 6读写ini文件
  2. python元编程之使用动态属性实现定制类--特殊方法__setattr__,__getattribute__篇
  3. Shell按行读取文件的3种方法
  4. Android内存解析(二)— 详解内存,内部存储和外部存储
  5. Java-马士兵设计模式学习笔记-观察者模式-读取properties文件改成单例模式
  6. Office文件的奥秘——.NET平台下不借助Office实现Word、Powerpoint等文件的解析(一)...
  7. HD2 电容屏不灵怎么办?
  8. C++ dlopen mini HOWTO 一篇非常好的介绍C++ dlopen linux/mac os x 编程的资料
  9. Office编程在dot Net环境中总结(Word生成表格报表篇)
  10. JAVA面试题(part6)--局部内部类