本篇文章為大家展示了SAP Fiori編程模型規(guī)范里如何進(jìn)行@ObjectModel.readOnly工作原理解析,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),山城企業(yè)網(wǎng)站建設(shè),山城品牌網(wǎng)站建設(shè),網(wǎng)站定制,山城網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,山城網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
SAP官網(wǎng)的ABAP Programming Model for Fiori幫助文檔里,定義了很多注解(Annotation):
SAP Help Portal
對于這些注解,我們可以從其字面含義和SAP幫助文檔去掌握其用法和功能。
以@ObjectModel.readOnly為例,施加了這個注解的CDS view字段,在對應(yīng)的Fiori UI上以只讀的方式渲染:
并且也不能通過編程的方式進(jìn)行修改。
大家在使用這些注解的時候,有沒有想過,它們是怎么工作的?
以@ObjectModel.readOnly為例,現(xiàn)在就請跟著Jerry一起,去探索它的前后臺實現(xiàn)原理。
在Chrome開發(fā)者工具的UI5面板里,找到Posting Date這個控件對應(yīng)的屬性,發(fā)現(xiàn)字段editable屬性值為false,這就是其在UI不能編輯的原因。
如果你的Chrome開發(fā)者工具沒有UI5這個標(biāo)簽,請參考Jerry這篇文章,安裝Chrome for UI5的擴(kuò)展:
[Jerry的Fiori原創(chuàng)文章合集]( Jerry的Fiori原創(chuàng)文章合集)
既然后臺模型是CDS view,那么前臺UI顯然基于Fiori Elements. 我想知道Posting Date這個控件的editable屬性是在什么時候被設(shè)置成false的。
在SmartField.setEditable函數(shù)里設(shè)置斷點,重新打開Fiori UI,點擊Edit進(jìn)入編輯模型,斷點觸發(fā),從調(diào)用棧能看出,有代碼調(diào)用SmartField.setEditable時,傳入的參數(shù)為false.
那么這個false如何計算出來的?順著當(dāng)前的調(diào)用棧往外層查找,發(fā)現(xiàn)一個重要的函數(shù):
AnnotationHelper.canUpdateProperty.
從函數(shù)名就能猜測出,這個函數(shù)負(fù)責(zé)計算一個控件的屬性是否允許更新(Update),工作的上下文就是注解(Annotation).
這個方法實現(xiàn)體的語義也很清楚,如果后臺模型字段sap:updatable設(shè)置為false,則canUpdateProperty函數(shù)調(diào)用返回false,導(dǎo)致SmartField.setEditable以參數(shù)false去渲染Fiori UI.
我們打開OData服務(wù)的metadata,發(fā)現(xiàn)posting date字段對應(yīng)的sap:updatable果然為false.
至此Fiori UI的工作原理分析完畢。我們再來看后臺。我的CDS view里只添加了@ObjectModel.readOnly為true的注解,而非sap:updatable. 顯然,這二者存在一定的關(guān)聯(lián)關(guān)系。
在Jerry之前的文章 Jerry的CDS view自學(xué)系列 介紹過CDS view框架處理邏輯,有這么一段代碼:
第839行的IF判斷,如果OBJECTMODEL.READONLY為true,則read_only屬性為X.
而read_only屬性為true,會導(dǎo)致posting date字段的屬性集合內(nèi)表里,新增一條read_only為X的記錄:
最后,在SADL框架的屬性檢測邏輯中,一旦發(fā)現(xiàn)字段屬性集合內(nèi)表里存在read_only為X的屬性,則將lv_creatable和lv_updatable置為false.
而SADL框架計算出來的這兩個值為false的布爾變量,最后就會將sap:creatable和sap:updatable設(shè)置為false.
@ObjectModel.readOnly屬性的前后臺工作原理的神秘面紗,至此就揭開了,然而它只是SAP Fiori編程模型眾多注解的冰山一角。
上述內(nèi)容就是SAP Fiori編程模型規(guī)范里如何進(jìn)行@ObjectModel.readOnly工作原理解析,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。