今天是2020年2月2日鼠年大年初九,這是Jerry鼠年的第9篇文章,也是汪子熙公衆号總共第208篇原創文章。
這幾天大家在家一日遊的感覺如何?
工作中Jerry的同僚曾經問過我一個問題,Fiori界面上這個Adapt UI的按鈕,為什麼有的系統上有,有的系統上沒有?Fiori Key User正是通過點選該按鈕,進入Fiori UI的Adaptation模式,進而實作在螢幕上新增擴充字段的目的。
比較下面兩個不同系統的截圖:
為什麼這個Adapt UI按鈕,如此神出鬼沒,有的系統上有顯示,有的沒有?
自己動手,豐衣足食。假設你的身邊找不到Fiori專家,如何通過自己在系統裡調試的方法找到問題的答案呢?
Jerry之前的文章 Jerry的Fiori原創文章合集 ,搜集了很多案例,講述了如何通過單步調試,去分析和處理Fiori開發工作中的一些常見問題。
現在我們再次通過單步調試的方式來分析這個Adapt UI按鈕動态顯示與否的邏輯。
首先根據Jerry這篇部落格介紹的SAP UI5控件在浏覽器端的渲染邏輯的知識,找出是一個ID為sap.ushell.plugins.rta的插件,負責管理該Adapt UI按鈕。我個人把rta了解成Run Time Adaptation.
https://blogs.sap.com/?p=133359這個插件從哪裡來呢?在Chrome開發者工具裡對sap.ushell.config和sap-ushell-config這組關鍵字進行全文搜尋,找到了下面的代碼片段:
由此可見,rta這個插件執行個體,存儲在sap-ushell-config這個全局對象的bootstrapPlugins屬性裡。
在Adapt UI按鈕能夠顯示的系統上調試,發現全局對象sap-ushell-config的值,來自oServerSideConfig這個JSON對象,而後者的值,是從SAP Fiori Launchpad的html頁面裡一個寫死的字元串反序列化而成:
把FioriLaunchpad.html裡這個寫死的字元串拷貝下來:
decode之後,發現其層級結構同我們之前在Chrome開發者工具裡觀察到的sap-ushell-config全局對象完全一緻,說明我們找對地方了。
下一步就是要弄清楚FioriLaunchpad.html裡這個寫死的字元串到底來自何方。标準開發人員一個字元一個字元敲進去的?SAP軟體沒有這麼傻。
SE80打開Fiori Launchpad Shell對應的BSP應用:
/ui2/ushell, 發現字元串的值來自變量:
${SERVER-SIDE-CONFIG}
是以SE80裡我們找到的這個FioriLaunchpad.html隻是起到一個模闆檔案的作用,裡面第76行出現的${SERVER-SIDE-CONFIG}, 也隻是一個占位符,會被運作時該變量的實際值替換,最後就成了我們在Chrome開發者工具裡觀察到的那個長長的字元串。
那麼變量${SERVER-SIDE-CONFIG}的值從哪裡來?在BSP應用裡查找,發現get_server_side_config_json方法傳回的值,注入到該變量裡。
是以現在的問題轉化為,通過單步調試get_server_side_config_json方法,弄清楚裡面的邏輯:
當我單步調試進入該方法時,發現上圖第18行lr_data->mt_plugin這個内表裡,已經包含了需要傳回并注入到變量${SERVER-SIDE-CONFIG}裡的目前系統上所有可用的Fiori Launchpad插件執行個體了,本文關注的sap.rta.plugin也赫然在列。
那麼為什麼本文開頭提到的另一個系統裡,沒有顯示Adapt UI按鈕呢?
問題就出在下圖第22行的CHECK語句。第18行的mt_plugin内表,存儲了目前系統所有可用的Fiori Launchpad插件,每個插件都對應一個catalog ID.
第21行的内表it_catalogs, 存放的是目前登入使用者通過配置設定的PFCG角色所擁有的catalog ID集合。
上圖這段代碼的語義是,周遊目前系統所有可用的Fiori Launchpad插件,如果其對應的catalog ID,沒有出現在登入使用者所擁有的catalog ID集合裡,那麼該插件對于該登入使用者來說就是無效的(invalid), 應該将其從Fiori Launchpad上隐藏。
從上圖的調試視窗,我得知Run Time Adaptation這個插件對應的catalog ID為/UIF/SAP_RTA_PLUGIN, 然後我到ABAP背景SU01去檢查,發現在看不到Adapt UI按鈕的那個系統裡,我的使用者果然沒有配置設定這個catalog. 于是将其配置設定上去:
問題得以解決,現在Fiori UI裡,這個久違的Adapt UI又回來了。
這就是一個實際的“自己動手,豐衣足食”的例子——我通過單步調試,沒有求助Fiori專家,也解決了工作中遇到的實際問題。
更多閱讀
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标準應用的增強方式
揭開SAP Fiori程式設計模型規範裡注解的神秘面紗 - @ObjectModel.readOnly工作原了解析
為什麼SAP GUI裡的傳統事務碼能通過Fiori Launchpad啟動并運作在浏覽器裡
一步步把SAP GUI的事務碼配置到SAP Fiori Launchpad裡