天天看點

SAP Fiori裡的Adapt UI按鈕,神出鬼沒的奧秘

今天是2020年2月2日鼠年大年初九,這是Jerry鼠年的第9篇文章,也是汪子熙公衆号總共第208篇原創文章。

這幾天大家在家一日遊的感覺如何?

SAP Fiori裡的Adapt UI按鈕,神出鬼沒的奧秘

工作中Jerry的同僚曾經問過我一個問題,Fiori界面上這個Adapt UI的按鈕,為什麼有的系統上有,有的系統上沒有?Fiori Key User正是通過點選該按鈕,進入Fiori UI的Adaptation模式,進而實作在螢幕上新增擴充字段的目的。

比較下面兩個不同系統的截圖:

SAP Fiori裡的Adapt UI按鈕,神出鬼沒的奧秘

為什麼這個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
SAP Fiori裡的Adapt UI按鈕,神出鬼沒的奧秘

這個插件從哪裡來呢?在Chrome開發者工具裡對sap.ushell.config和sap-ushell-config這組關鍵字進行全文搜尋,找到了下面的代碼片段:

SAP Fiori裡的Adapt UI按鈕,神出鬼沒的奧秘

由此可見,rta這個插件執行個體,存儲在sap-ushell-config這個全局對象的bootstrapPlugins屬性裡。

SAP Fiori裡的Adapt UI按鈕,神出鬼沒的奧秘

在Adapt UI按鈕能夠顯示的系統上調試,發現全局對象sap-ushell-config的值,來自oServerSideConfig這個JSON對象,而後者的值,是從SAP Fiori Launchpad的html頁面裡一個寫死的字元串反序列化而成:

SAP Fiori裡的Adapt UI按鈕,神出鬼沒的奧秘

把FioriLaunchpad.html裡這個寫死的字元串拷貝下來:

SAP Fiori裡的Adapt UI按鈕,神出鬼沒的奧秘

decode之後,發現其層級結構同我們之前在Chrome開發者工具裡觀察到的sap-ushell-config全局對象完全一緻,說明我們找對地方了。

SAP Fiori裡的Adapt UI按鈕,神出鬼沒的奧秘

下一步就是要弄清楚FioriLaunchpad.html裡這個寫死的字元串到底來自何方。标準開發人員一個字元一個字元敲進去的?SAP軟體沒有這麼傻。

SE80打開Fiori Launchpad Shell對應的BSP應用:

/ui2/ushell, 發現字元串的值來自變量:

${SERVER-SIDE-CONFIG}

SAP Fiori裡的Adapt UI按鈕,神出鬼沒的奧秘

是以SE80裡我們找到的這個FioriLaunchpad.html隻是起到一個模闆檔案的作用,裡面第76行出現的${SERVER-SIDE-CONFIG}, 也隻是一個占位符,會被運作時該變量的實際值替換,最後就成了我們在Chrome開發者工具裡觀察到的那個長長的字元串。

那麼變量${SERVER-SIDE-CONFIG}的值從哪裡來?在BSP應用裡查找,發現get_server_side_config_json方法傳回的值,注入到該變量裡。

SAP Fiori裡的Adapt UI按鈕,神出鬼沒的奧秘

是以現在的問題轉化為,通過單步調試get_server_side_config_json方法,弄清楚裡面的邏輯:

SAP Fiori裡的Adapt UI按鈕,神出鬼沒的奧秘

當我單步調試進入該方法時,發現上圖第18行lr_data->mt_plugin這個内表裡,已經包含了需要傳回并注入到變量${SERVER-SIDE-CONFIG}裡的目前系統上所有可用的Fiori Launchpad插件執行個體了,本文關注的sap.rta.plugin也赫然在列。

SAP Fiori裡的Adapt UI按鈕,神出鬼沒的奧秘

那麼為什麼本文開頭提到的另一個系統裡,沒有顯示Adapt UI按鈕呢?

問題就出在下圖第22行的CHECK語句。第18行的mt_plugin内表,存儲了目前系統所有可用的Fiori Launchpad插件,每個插件都對應一個catalog ID.

第21行的内表it_catalogs, 存放的是目前登入使用者通過配置設定的PFCG角色所擁有的catalog ID集合。

SAP Fiori裡的Adapt UI按鈕,神出鬼沒的奧秘

上圖這段代碼的語義是,周遊目前系統所有可用的Fiori Launchpad插件,如果其對應的catalog ID,沒有出現在登入使用者所擁有的catalog ID集合裡,那麼該插件對于該登入使用者來說就是無效的(invalid), 應該将其從Fiori Launchpad上隐藏。

從上圖的調試視窗,我得知Run Time Adaptation這個插件對應的catalog ID為/UIF/SAP_RTA_PLUGIN, 然後我到ABAP背景SU01去檢查,發現在看不到Adapt UI按鈕的那個系統裡,我的使用者果然沒有配置設定這個catalog. 于是将其配置設定上去:

SAP Fiori裡的Adapt UI按鈕,神出鬼沒的奧秘

問題得以解決,現在Fiori UI裡,這個久違的Adapt UI又回來了。

這就是一個實際的“自己動手,豐衣足食”的例子——我通過單步調試,沒有求助Fiori專家,也解決了工作中遇到的實際問題。

SAP Fiori裡的Adapt UI按鈕,神出鬼沒的奧秘

更多閱讀

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裡

繼續閱讀