专栏首页Jerry的SAP技术分享揭开SAP Fiori编程模型规范里注解的神秘面纱 - @ObjectModel

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

今天是农历鼠年大年初五,本文是鼠年第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后续的分享,感谢阅读。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 30行代码消费腾讯人工智能开放平台提供的自然语言处理API

    版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://jerry.bl...

    Jerry Wang
  • cannot create employee - HR check BP_BUPA_CHECK_HR_IS_ACTIVE

    使用transaction code BP创建employee时,发现dropdown list里没有for employee的选项:

    Jerry Wang
  • SAP UI5应用和Hybris Commerce的国际化(internationalization)支持

    WebUI,UI5和Hybris的i18n support都是一个套路,developer在代码里不应hard code基于某一种特定language的text...

    Jerry Wang
  • 什么是JavaBean

    按着Sun公司的定义,JavaBean是一个可重复使用的软件组件。实际上JavaBean是一种Java类,通过封装属性和方法成为具有某种功能或者处理某个业务的对...

    阮键
  • Python flask路由间传递变量实例详解

    代码见https://github.com/qingnvsue/flask中的difrouters文件夹

    砸漏
  • 快速学习SpringBoot-Java配置

    在入门案例中,我们没有任何的配置,就可以实现一个SpringMVC的项目了,快速、高效!

    cwl_java
  • 前端路由相关实现

    版权声明:本文为吴孔云博客原创文章,转载请注明出处并带上链接,谢谢。 https://blog.csdn.net/wkyseo/articl...

    空空云
  • win7 64位系统及开发环境重装后的总结

       话说来这家公司之后就一直使用这个系统,现在感觉这系统跑的实在是有点慢了,运行,调试各种浪费时间呀,不过也用了将近20个月了,这也可以说是我用的最久的一个系...

    aehyok
  • 少走弯路,给Java 1~5 年程序员的建议

    精讲java
  • 少走弯路,给Java 1~5 年程序员的建议

    今天LZ是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈每个阶段要学习的内容甚至是一些书籍。这一部分的内容,同样适用于一些希望转行到Java的同学。

    java架构师

扫码关注云+社区

领取腾讯云代金券