今天是农历鼠年大年初五,本文是鼠年第5篇文章,也是汪子熙公众号第204篇原创文章。

最近大家真是谈蝙蝠色变呀!

SAP官网的ABAP Programming Model for Fiori帮助文档里,定义了很多注解(Annotation):
https://help.sap.com/viewer/cc0c305d2fab47bd808adcad3ca7ee9d/1709%20000/en-US/896496ecfe4f4f8b857c6d93d4489841.html

对于这些注解,我们可以从其字面含义和SAP帮助文档去掌握其用法和功能。

以@ObjectModel.readOnly为例,施加了这个注解的CDS view字段,在对应的Fiori UI上以只读的方式渲染:

并且也不能通过编程的方式进行修改。

大家在使用这些注解的时候,有没有想过,它们是怎么工作的?

以@ObjectModel.readOnly为例,现在就请跟着Jerry一起,去探索它的前后台实现原理。

在Chrome开发者工具的UI5面板里,找到Posting Date这个控件对应的属性,发现字段editable属性值为false,这就是其在UI不能编辑的原因。

如果你的Chrome开发者工具没有UI5这个标签,请参考Jerry这篇文章,安装Chrome for UI5的扩展:

Jerry的Fiori原创文章合集

既然后台模型是CDS view,那么前台UI显然基于Fiori Elements. 我想知道Posting Date这个控件的editable属性是在什么时候被设置成false的。

在SmartField.setEditable函数里设置断点,重新打开Fiori UI,点击Edit进入编辑模型,断点触发,从调用栈能看出,有代码调用SmartField.setEditable时,传入的参数为false.

那么这个false如何计算出来的?顺着当前的调用栈往外层查找,发现一个重要的函数:

AnnotationHelper.canUpdateProperty.

从函数名就能猜测出,这个函数负责计算一个控件的属性是否允许更新(Update),工作的上下文就是注解(Annotation).

这个方法实现体的语义也很清楚,如果后台模型字段sap:updatable设置为false,则canUpdateProperty函数调用返回false,导致SmartField.setEditable以参数false去渲染Fiori UI.

我们打开OData服务的metadata,发现posting date字段对应的sap:updatable果然为false.

至此Fiori UI的工作原理分析完毕。我们再来看后台。我的CDS view里只添加了@ObjectModel.readOnly为true的注解,而非sap:updatable. 显然,这二者存在一定的关联关系。

在Jerry之前的文章 Jerry的CDS view自学系列 介绍过CDS view框架处理逻辑,有这么一段代码:

第839行的IF判断,如果OBJECTMODEL.READONLY为true,则read_only属性为X.

而read_only属性为true,会导致posting date字段的属性集合内表里,新增一条read_only为X的记录:


最后,在SADL框架的属性检测逻辑中,一旦发现字段属性集合内表里存在read_only为X的属性,则将lv_creatable和lv_updatable置为false.

而SADL框架计算出来的这两个值为false的布尔变量,最后就会将sap:creatable和sap:updatable设置为false.

@ObjectModel.readOnly属性的前后台工作原理的神秘面纱,至此就揭开了,然而它只是SAP Fiori编程模型众多注解的冰山一角。敬请关注Jerry后续的分享,感谢阅读。

更多阅读

  • Jerry的通过CDS view + Smart Template 开发Fiori应用的blog合集

  • SAP Fiori应用的三种部署方式

  • Jerry的Fiori原创文章合集

  • SAP成都C4C小李探花:浅谈Fiori Design Guidelines

  • SAP Fiori + Vue = ?

  • Fiori Fundamentals和SAP UI5 Web Components

  • 30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用

  • SAP Fiori应用索引大全

  • 介绍一种Fiori标准应用的增强方式

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

揭开SAP Fiori编程模型规范里注解的神秘面纱 - @ObjectModel相关推荐

  1. 揭开SAP Fiori编程模型规范里注解的神秘面纱 - @OData.publish工作原理解析

    Jerry的前一篇文章 揭开SAP Fiori编程模型规范里注解的神秘面纱 - @ObjectModel.readOnly工作原理解析,给大家分享了@ObjectModel.readOnly这个注解对 ...

  2. 【入行必修】 揭开 AI人工智能工程师 三大岗位 工作内容的 神秘面纱!

    揭开 AI人工智能工程师 三大岗位 工作内容的 神秘面纱! 引言 AI原本是一个专业领域,没什么特别的.作为码农一枚,笔者的工作内容正好在这个领域. 近来这一年左右时间里,连续发生了多件事情,使得笔者 ...

  3. SAP Fiori Elements List Report 里的表格类型(tableType)是如何决定出来的

    从 SAP Fiori Elements 实现源代码中的 SmartTable.xml 能看出,ListReport 类型的 SAP Fiori Elements 应用,其表格类型包含 4 种: An ...

  4. SAP Fiori smart template技术里CDS view的注解和UI元素对应关系

  5. SAP Fiori里的Adapt UI按钮,神出鬼没的奥秘

    今天是2020年2月2日鼠年大年初九,这是Jerry鼠年的第9篇文章,也是汪子熙公众号总共第208篇原创文章. 这几天大家在家一日游的感觉如何? 工作中Jerry的同事曾经问过我一个问题,Fiori界 ...

  6. 一步步把SAP GUI的事务码配置到SAP Fiori Launchpad里

    今天是2020年1月31日鼠年大年初七,这是Jerry鼠年的第7篇文章,也是汪子熙公众号总共第206篇原创文章. Jerry之前的文章 为什么SAP GUI里的传统事务码能通过Fiori Launch ...

  7. SAP CAP 编程模型简介

    官网 CAP 是用于构建企业级服务和应用程序的语言.库和工具框架.它引导开发人员沿着经过验证的最佳实践和大量现成的解决方案来应对重复性任务的"黄金之路". 基于 CAP 的项目受益 ...

  8. 如何查找SAP Fiori UI上某个字段对应的底层数据库表

    我国古代,形容一个人武艺全面,会说他/她"十八般兵器样样精通".所谓十八般兵器(有时也称十八般武艺),即刀.枪.剑.戟.斧.钺.钩.叉.鞭.锏.锤.抓.镋.棍.槊.棒.拐.流星锤. ...

  9. abap mm后台表_如何查找SAP Fiori UI上某个字段对应的底层数据库表

    今天是立春,鼠年大年十一.这是Jerry鼠年的第10篇文章,也是汪子熙公众号总共第209篇原创文章. 昨天凌晨的时候,四川地区又发生了地震. 成都市民纷纷表示,我们太难了. 2020刚一开始就活得如此 ...

最新文章

  1. 开发者和矿工合二为一将是比特币世界的灾难
  2. ftp在命令行状态下下载跟上传东西
  3. Python学习(七) 流程控制if语句
  4. java web 项目启动_Java web项目启动Tomcat报错解决方案
  5. 自建CDN Xnign产品指标
  6. css3是什么 ptml_CSS3 @keyframes 规则
  7. python复数类型转换_Python 复数数据类型详解(complex)[学习 Python 必备基础知识][看此一篇就够了]...
  8. 自主知识产权 曙光龙芯3号服务器将面市
  9. ios 简书 获取通讯录信息_ios 获取本地通讯录信息
  10. 各层电子数排布规则_原子核外电子排布规律性质-1~36号原子结构示意图-电子层排布规律...
  11. python 多元线性回归的系数检验 t p值,多元线性回归检验t检验(P值),F检验,R方等参数的含义...
  12. 如何提高公文写作水平?公文写作笔杆子写材料经典语句汇编(7类3800多字)
  13. 《机器学习》周志华第一章课后习题
  14. linux服务器运维工程师怎么样,怎样才算合格的运维工程师?linux运维技术
  15. 异常,Map,File
  16. JavaScript实现Sleep效果
  17. Latex不能编译eps文件
  18. 【FOFA】fofa搜索引擎的常用搜索语法
  19. 数据库date日期转String类型
  20. 直接收藏-超级好用的国内配色网站

热门文章

  1. 烂泥虚拟机硬盘简简单单扩容
  2. python的内存分配
  3. SpringCloud之声明式服务调用 Feign(三)
  4. linux安装php7.2.7
  5. 06_排序_希尔排序
  6. 如何使用安装光盘为本机创建yum repository
  7. android Camera 拍照的两个问题
  8. 【word2vec】篇三:基于Negative Sampling 的 CBOW 模型和 Skip-gram 模型
  9. 讲讲大厂面试必考的假设检验
  10. 如何在发文一小时后预测出公众号的阅读量?