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

简介: 揭开SAP Fiori编程模型规范里注解的神秘面纱 - @ObjectModel

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


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


image.png


image.png


SAP官网的ABAP Programming Model for Fiori帮助文档里,定义了很多注解(Annotation):

https://help.sap.com/viewer/cc0c305d2fab47bd808adcad3ca7ee9d/1709%20000/en-US/896496ecfe4f4f8b857c6d93d4489841.html

image.png



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

image.png



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

image.png



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


image.png


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


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


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


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


Jerry的Fiori原创文章合集


image.png


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


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


image.png


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


AnnotationHelper.canUpdateProperty.


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

image.png



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


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


image.png


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


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

image.png



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


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


image.pngimage.png



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


image.png


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


image.png


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


image.png


更多阅读


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标准应用的增强方式



相关文章
|
设计模式 开发框架 前端开发
手把手教你封装一个健壮的MVP框架,面向接口开发。
在我们的日常开发中,我们都知道 Android 端的开发框架有 MVC,MVP,MVVM,说起这几个框架,大家也肯定都有自己的看法,甚至很多同学也都封装过。
90 0
个人若依框架学习大杂烩
个人若依框架学习大杂烩
148 0
|
JavaScript 索引
揭开SAP Fiori编程模型规范里注解的神秘面纱 - @OData.publish工作原理解析
揭开SAP Fiori编程模型规范里注解的神秘面纱 - @OData.publish工作原理解析
116 0
揭开SAP Fiori编程模型规范里注解的神秘面纱 - @OData.publish工作原理解析
|
Web App开发 JavaScript 开发者
揭开SAP Fiori编程模型规范里注解的神秘面纱 - @ObjectModel
揭开SAP Fiori编程模型规范里注解的神秘面纱 - @ObjectModel
揭开SAP Fiori编程模型规范里注解的神秘面纱 - @ObjectModel
揭开this的神秘面纱-属性篇 | 带你学《Java面向对象编程》之七
本节通过几组实例介绍了如何灵活地使用this进行本类属性的调用以及this在类中的特殊含义。
|
Web App开发 前端开发 .NET
【ABP框架系列学习】模块系统(4)
原文:【ABP框架系列学习】模块系统(4) 0.引言 ABP提供了构建模块和通过组合模块以创建应用程序的基础设施。一个模块可以依赖于另外一个模块。通常,程序集可以认为是模块。如果创建多个程序集的应用程序,建议为每个程序集创建模块定义。
1585 0
|
前端开发 JavaScript .NET
【ABP框架系列学习】介绍篇(1)
原文:【ABP框架系列学习】介绍篇(1)   0.引言 该系列博文主要在【官方文档】及【tkbSimplest】ABP框架理论研究系列博文的基础上进行总结的,或许大家会质问,别人都已经翻译过了,这不是多此一举吗?原因如下: 1.【tkbSimplest】的相关博文由于撰写得比较早的,在参照官方文档学习的过程中,发现部分知识未能及时同步(当前V4.0.2版本),如【EntityHistory】、【Multi-Lingual Engities】章节未涉及、【Caching】章节没有Entity Caching等内容。
1914 0
|
前端开发 API 数据库
下一篇
无影云桌面