SAP Fiori里的Adapt UI按钮,神出鬼没的奥秘
今天是2020年2月2日鼠年大年初九,這是Jerry鼠年的第9篇文章,也是汪子熙公眾號總共第208篇原創(chuàng)文章。
這幾天大家在家一日游的感覺如何?
工作中Jerry的同事曾經(jīng)問過我一個問題,Fiori界面上這個Adapt UI的按鈕,為什么有的系統(tǒng)上有,有的系統(tǒng)上沒有?Fiori Key User正是通過點擊該按鈕,進入Fiori UI的Adaptation模式,從而實現(xiàn)在屏幕上新增擴展字段的目的。
比較下面兩個不同系統(tǒng)的截圖:
為什么這個Adapt UI按鈕,如此神出鬼沒,有的系統(tǒng)上有顯示,有的沒有?
自己動手,豐衣足食。假設(shè)你的身邊找不到Fiori專家,如何通過自己在系統(tǒng)里調(diào)試的方法找到問題的答案呢?
Jerry之前的文章 Jerry的Fiori原創(chuàng)文章合集 ,搜集了很多案例,講述了如何通過單步調(diào)試,去分析和處理Fiori開發(fā)工作中的一些常見問題。
現(xiàn)在我們再次通過單步調(diào)試的方式來分析這個Adapt UI按鈕動態(tài)顯示與否的邏輯。
首先根據(jù)Jerry這篇博客介紹的SAP UI5控件在瀏覽器端的渲染邏輯的知識,找出是一個ID為sap.ushell.plugins.rta的插件,負責管理該Adapt UI按鈕。我個人把rta理解成Run Time Adaptation.
https://blogs.sap.com/?p=133359
這個插件從哪里來呢?在Chrome開發(fā)者工具里對sap.ushell.config和sap-ushell-config這組關(guān)鍵字進行全文搜索,找到了下面的代碼片段:
由此可見,rta這個插件實例,存儲在sap-ushell-config這個全局對象的bootstrapPlugins屬性里。
在Adapt UI按鈕能夠顯示的系統(tǒng)上調(diào)試,發(fā)現(xiàn)全局對象sap-ushell-config的值,來自oServerSideConfig這個JSON對象,而后者的值,是從SAP Fiori Launchpad的html頁面里一個硬編碼的字符串反序列化而成:
把FioriLaunchpad.html里這個硬編碼的字符串拷貝下來:
decode之后,發(fā)現(xiàn)其層級結(jié)構(gòu)同我們之前在Chrome開發(fā)者工具里觀察到的sap-ushell-config全局對象完全一致,說明我們找對地方了。
下一步就是要弄清楚FioriLaunchpad.html里這個硬編碼的字符串到底來自何方。標準開發(fā)人員一個字符一個字符敲進去的?SAP軟件沒有這么傻。
SE80打開Fiori Launchpad Shell對應的BSP應用:
/ui2/ushell, 發(fā)現(xiàn)字符串的值來自變量:
${SERVER-SIDE-CONFIG}
因此SE80里我們找到的這個FioriLaunchpad.html只是起到一個模板文件的作用,里面第76行出現(xiàn)的${SERVER-SIDE-CONFIG}, 也只是一個占位符,會被運行時該變量的實際值替換,最后就成了我們在Chrome開發(fā)者工具里觀察到的那個長長的字符串。
那么變量${SERVER-SIDE-CONFIG}的值從哪里來?在BSP應用里查找,發(fā)現(xiàn)get_server_side_config_json方法返回的值,注入到該變量里。
所以現(xiàn)在的問題轉(zhuǎn)化為,通過單步調(diào)試get_server_side_config_json方法,弄清楚里面的邏輯:
當我單步調(diào)試進入該方法時,發(fā)現(xiàn)上圖第18行l(wèi)r_data->mt_plugin這個內(nèi)表里,已經(jīng)包含了需要返回并注入到變量${SERVER-SIDE-CONFIG}里的當前系統(tǒng)上所有可用的Fiori Launchpad插件實例了,本文關(guān)注的sap.rta.plugin也赫然在列。
那么為什么本文開頭提到的另一個系統(tǒng)里,沒有顯示Adapt UI按鈕呢?
問題就出在下圖第22行的CHECK語句。第18行的mt_plugin內(nèi)表,存儲了當前系統(tǒng)所有可用的Fiori Launchpad插件,每個插件都對應一個catalog ID.
第21行的內(nèi)表it_catalogs, 存放的是當前登錄用戶通過分配的PFCG角色所擁有的catalog ID集合。
上圖這段代碼的語義是,遍歷當前系統(tǒng)所有可用的Fiori Launchpad插件,如果其對應的catalog ID,沒有出現(xiàn)在登錄用戶所擁有的catalog ID集合里,那么該插件對于該登錄用戶來說就是無效的(invalid), 應該將其從Fiori Launchpad上隱藏。
從上圖的調(diào)試窗口,我得知Run Time Adaptation這個插件對應的catalog ID為/UIF/SAP_RTA_PLUGIN, 然后我到ABAP后臺SU01去檢查,發(fā)現(xiàn)在看不到Adapt UI按鈕的那個系統(tǒng)里,我的用戶果然沒有分配這個catalog. 于是將其分配上去:
問題得以解決,現(xiàn)在Fiori UI里,這個久違的Adapt UI又回來了。
這就是一個實際的“自己動手,豐衣足食”的例子——我通過單步調(diào)試,沒有求助Fiori專家,也解決了工作中遇到的實際問題。
更多閱讀
-
Jerry的通過CDS view + Smart Template 開發(fā)Fiori應用的blog合集
-
SAP Fiori應用的三種部署方式
-
Jerry的Fiori原創(chuàng)文章合集
-
SAP成都C4C小李探花:淺談Fiori Design Guidelines
-
SAP Fiori + Vue = ?
-
Fiori Fundamentals和SAP UI5 Web Components
-
30分鐘用Restful ABAP Programming模型開發(fā)一個支持增刪改查的Fiori應用
-
SAP Fiori應用索引大全
-
介紹一種Fiori標準應用的增強方式
-
揭開SAP Fiori編程模型規(guī)范里注解的神秘面紗 - @ObjectModel.readOnly工作原理解析
-
為什么SAP GUI里的傳統(tǒng)事務碼能通過Fiori Launchpad啟動并運行在瀏覽器里
-
一步步把SAP GUI的事務碼配置到SAP Fiori Launchpad里
要獲取更多Jerry的原創(chuàng)文章,請關(guān)注公眾號"汪子熙":
總結(jié)
以上是生活随笔為你收集整理的SAP Fiori里的Adapt UI按钮,神出鬼没的奥秘的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 明日之后医疗无人机怎么选 无人机技能应该
- 下一篇: 送水