揭开SAP Fiori编程模型规范里注解的神秘面纱 - @ObjectModel
今天是農(nóng)歷鼠年大年初五,本文是鼠年第5篇文章,也是汪子熙公眾號(hào)第204篇原創(chuàng)文章。
最近大家真是談蝙蝠色變呀!
SAP官網(wǎng)的ABAP Programming Model for Fiori幫助文檔里,定義了很多注解(Annotation):
https://help.sap.com/viewer/cc0c305d2fab47bd808adcad3ca7ee9d/1709%20000/en-US/896496ecfe4f4f8b857c6d93d4489841.html
對(duì)于這些注解,我們可以從其字面含義和SAP幫助文檔去掌握其用法和功能。
以@ObjectModel.readOnly為例,施加了這個(gè)注解的CDS view字段,在對(duì)應(yīng)的Fiori UI上以只讀的方式渲染:
并且也不能通過(guò)編程的方式進(jìn)行修改。
大家在使用這些注解的時(shí)候,有沒(méi)有想過(guò),它們是怎么工作的?
以@ObjectModel.readOnly為例,現(xiàn)在就請(qǐng)跟著Jerry一起,去探索它的前后臺(tái)實(shí)現(xiàn)原理。
在Chrome開(kāi)發(fā)者工具的UI5面板里,找到Posting Date這個(gè)控件對(duì)應(yīng)的屬性,發(fā)現(xiàn)字段editable屬性值為false,這就是其在UI不能編輯的原因。
如果你的Chrome開(kāi)發(fā)者工具沒(méi)有UI5這個(gè)標(biāo)簽,請(qǐng)參考Jerry這篇文章,安裝Chrome for UI5的擴(kuò)展:
Jerry的Fiori原創(chuàng)文章合集
既然后臺(tái)模型是CDS view,那么前臺(tái)UI顯然基于Fiori Elements. 我想知道Posting Date這個(gè)控件的editable屬性是在什么時(shí)候被設(shè)置成false的。
在SmartField.setEditable函數(shù)里設(shè)置斷點(diǎn),重新打開(kāi)Fiori UI,點(diǎn)擊Edit進(jìn)入編輯模型,斷點(diǎn)觸發(fā),從調(diào)用棧能看出,有代碼調(diào)用SmartField.setEditable時(shí),傳入的參數(shù)為false.
那么這個(gè)false如何計(jì)算出來(lái)的?順著當(dāng)前的調(diào)用棧往外層查找,發(fā)現(xiàn)一個(gè)重要的函數(shù):
AnnotationHelper.canUpdateProperty.
從函數(shù)名就能猜測(cè)出,這個(gè)函數(shù)負(fù)責(zé)計(jì)算一個(gè)控件的屬性是否允許更新(Update),工作的上下文就是注解(Annotation).
這個(gè)方法實(shí)現(xiàn)體的語(yǔ)義也很清楚,如果后臺(tái)模型字段sap:updatable設(shè)置為false,則canUpdateProperty函數(shù)調(diào)用返回false,導(dǎo)致SmartField.setEditable以參數(shù)false去渲染Fiori UI.
我們打開(kāi)OData服務(wù)的metadata,發(fā)現(xiàn)posting date字段對(duì)應(yīng)的sap:updatable果然為false.
至此Fiori UI的工作原理分析完畢。我們?cè)賮?lái)看后臺(tái)。我的CDS view里只添加了@ObjectModel.readOnly為true的注解,而非sap:updatable. 顯然,這二者存在一定的關(guān)聯(lián)關(guān)系。
在Jerry之前的文章 Jerry的CDS view自學(xué)系列 介紹過(guò)CDS view框架處理邏輯,有這么一段代碼:
第839行的IF判斷,如果OBJECTMODEL.READONLY為true,則read_only屬性為X.
而read_only屬性為true,會(huì)導(dǎo)致posting date字段的屬性集合內(nèi)表里,新增一條read_only為X的記錄:
最后,在SADL框架的屬性檢測(cè)邏輯中,一旦發(fā)現(xiàn)字段屬性集合內(nèi)表里存在read_only為X的屬性,則將lv_creatable和lv_updatable置為false.
而SADL框架計(jì)算出來(lái)的這兩個(gè)值為false的布爾變量,最后就會(huì)將sap:creatable和sap:updatable設(shè)置為false.
@ObjectModel.readOnly屬性的前后臺(tái)工作原理的神秘面紗,至此就揭開(kāi)了,然而它只是SAP Fiori編程模型眾多注解的冰山一角。敬請(qǐng)關(guān)注Jerry后續(xù)的分享,感謝閱讀。
更多閱讀
-
Jerry的通過(guò)CDS view + Smart Template 開(kāi)發(fā)Fiori應(yīng)用的blog合集
-
SAP Fiori應(yīng)用的三種部署方式
-
Jerry的Fiori原創(chuàng)文章合集
-
SAP成都C4C小李探花:淺談Fiori Design Guidelines
-
SAP Fiori + Vue = ?
-
Fiori Fundamentals和SAP UI5 Web Components
-
30分鐘用Restful ABAP Programming模型開(kāi)發(fā)一個(gè)支持增刪改查的Fiori應(yīng)用
-
SAP Fiori應(yīng)用索引大全
-
介紹一種Fiori標(biāo)準(zhǔn)應(yīng)用的增強(qiáng)方式
要獲取更多Jerry的原創(chuàng)文章,請(qǐng)關(guān)注公眾號(hào)"汪子熙":
總結(jié)
以上是生活随笔為你收集整理的揭开SAP Fiori编程模型规范里注解的神秘面纱 - @ObjectModel的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 白条闪付怎么使用?
- 下一篇: 为什么SAP GUI里的传统事务码能通过