這是 Jerry 2021 年的第 28 篇文章,也是汪子熙公眾號總共第 299 篇原創文章。
Jerry 之前的文章 在沒有任何前端開發經驗的基礎上, 建立第一個 SAP Fiori Elements 應用,介紹瞭如何使用 Visual Studio Code,建立 SAP Fiori Elements 應用。
後來有朋友在微信上向我諮詢,使用文章描述的步驟,生成的 Fiori Elements 應用裡,並不存在應用專屬的 (Application Specific) View 和 Controller,所以不知道如何對該應用進行二次開發。
的確,生成的專案檔案裡,只有一個光禿禿的 Component.js, 裡面宣告瞭一個 json 格式的後設資料描述檔案 manifest.json. 而我們知道 json 格式的檔案,裡面是無法編寫應用邏輯的。
另一個朋友向我詢問,SAP 推薦的 Fiori Elements 開發工具,到底是 WebIDE 還是 Visual Studio Code?
Jerry 首先回答第二位朋友的問題。
SAP 社群有一篇如何使用 SAP Business Application Studio 進行 Vue 應用開發的部落格,SAP WebIDE 和 Business Application Studio 的產品經理 Yuval,在評論區裡回答網友提問時,提供了下列有用的資訊:
同之前 SAP雲平臺 Neo 環境上傳統的 Full Stack WebIDE 相比,SAP Business Application Studio 是 SAP Business Technology Platform 上的雲應用開發工具,並不侷限於 SAP UI5 技術,而是支援包括 Vue.js, React 在內的任何 HTML5 前端開發技術。
SAP Business Application Studio 支援安裝各種 Extensions,因而能夠從容適配雲時代不斷湧現的各種新技術。藉助一個被稱為 SAP Fiori tools 的擴充套件包,SAP Business Application Studio 能方便地建立 SAP Fiori Elements 應用。SAP Fiori tools 也能在本地安裝的 Visual Studio Code 裡使用。
因此,SAP Business Application Studio / Visual Studio Code,都是 SAP 推薦用來開發 SAP Fiori Elements 應用的工具。
關於 SAP Business Application Studio 的更多介紹,請參考 Jerry 的文章:
SAP新一代全棧開發工具:SAP Business Application Studio
回到本文標題,用 Visual Studio Code 建立的 SAP Fiori Elements 應用,如何對其做二次開發?
根據需求實現的難易程度不同,可以採取 Adaptation 和 Extension 的方式來完成二次開發。
- 所謂 Adaptation,就是修改 SAP Fiori Elements 應用的 manifest.json 檔案,來實現一些複雜度較低的需求。
- 所謂 Extension,就是透過 Jerry 之前的文章 SAP產品增強技術回顧 裡介紹的 SAP UI5 ExtensionHook 技術,建立 SAP Fiori Elements Extension 並進行 JavaScript 的定製程式碼開發。
先看 Adaptation 的一個實際例子。
透過 Jerry 上一篇文章 在沒有任何前端開發經驗的基礎上, 建立第一個 SAP Fiori Elements 應用 介紹的步驟,建立的 Fiori Elements 應用的表格部分,只支援單選,即下圖表格行專案最左端的圓形選擇控制元件。
下面我在 Visual Studio Code 裡透過 Adaptation 方式,將該表格改成支援多項選擇。
Ctrl+Shift+P,開啟 Guided Development,這也是 SAP Fiori tools 擴充套件包裡的擴充套件之一:
該擴充套件提供了若干嚮導,指引開發者透過一系列步驟,完成 Fiori Elements 應用的 Adaptation.
因為我想讓表格支援多選,所以選擇 List Report Page - Enable Multiple selection in tables:
點選 Start Guide,
Adaptation 嚮導會自動定位到 manifest.json 對應區域,並顯示相應的程式碼。
下圖的含義是,只需在 manifest.json 檔案裡給 table 欄位新增上 multiSelect 為 true 的屬性,即可讓 Fiori Elements List Report 應用的表格,支援多選。點選 Apply,即可自動完成對 manifest.json 的修改,結束 Adaptation.
修改之後的 manifest.json 區域如下圖所示。也就是說,如果對於 manifest.json 裡支援的屬性設定非常熟悉的話,可以直接編輯該檔案,無需使用 Fiori Guided Development 擴充套件。
"extends": {
"extensions": {
"sap.ui.controllerExtensions": {
"sap.suite.ui.generic.template.ListReport.view.ListReport": {
"controllerName": "com.sap.jerry.jerryfioriapp.WangZiXi"
}
}
}
},
現在表格的選擇模式已經變成多選了:
而如果想對該 SAP Fiori Elements 應用編寫 JavaScript 自定義邏輯,需要採取 SAP UI5 的 Extension 技術。ABAP 開發人員可以把這個技術看作是 JavaScript 版本的 BAdI.
在 manifest.json extends 區域註冊一個 extension,型別為 sap.ui.controllerExtensions,子型別為 sap.suite.ui.generic.template.ListReport.view.ListReport.
下圖的語義是,開發人員希望定義一個由欄位 controllerName 指定的 controller extension,來擴充套件 SAP Fiori Elements List Report 標準的 controller.
SAP Fiori Elements ListReport 標準的 controller,其實現程式碼位於 sap.suite.ui.generic.template.ListReport.controller 的 ControllerImplementation.js 裡。
這個標準的 Controller 裡,第 641 行程式碼呼叫 onBeforeRebindTableExtension 方法。假設我們想重新實現該方法,在表格渲染前執行一些自定義邏輯,則可以將這些自定義邏輯,實現在 manifest.json 註冊的 controller extension 裡。
注意 controller extension 的實現檔案裡,sap.ui.define 的第一個引數宣告的 controller 名稱,必須和 manifest.json 裡註冊的 controllerName 欄位保持一致。
sap.ui.define("com.sap.jerry.jerryfioriapp.WangZiXi", [], function() {
return {
onBeforeRebindTableExtension: function(oEvent) {
debugger;
}
}
}
);
這樣,執行時,在 Fiori Elements List Report 表格被渲染之前,我們的二次開發程式碼就能被框架呼叫:
Jerry 後續會分享更多關於 SAP Fiori Elements 的開發和擴充套件知識,敬請持續關注。感謝閱讀。
更多閱讀
- SAP Fiori應用索引大全
- Fiori Fundamentals和SAP UI5 Web Components
- 為什麼SAP GUI裡的傳統事務碼能透過Fiori Launchpad啟動並執行在瀏覽器裡
- 一步步把SAP GUI的事務碼配置到SAP Fiori Launchpad裡
- SAP UI5應用開發人員瞭解UI5框架程式碼的意義
- SAP UI5 module懶載入機制
- SAP UI5 控制元件渲染機制
- HTML原生事件 VS SAP UI5 Semantic事件
- SAP UI5控制元件後設資料的後設資料實現
- SAP UI5控制元件的例項資料修改和讀取邏輯
- SAP UI5控制元件資料繫結的實現原理
- SAP UI5控制元件資料繫結的三種模式:One Way, Two Way和OneTime實現原理比較
- SAP UI5 OData謠言粉碎機:極短時間內傳送兩個Odata request,前一個會自動被cancel掉嗎
- SAP UI5和Angular的函式防抖(Debounce)和函式節流(Throttle)實現原理介紹
- SAP UI渲染模式:客戶端渲染 VS 伺服器端渲染
- SAP UI的載入動畫效果和幽靈設計(Ghost Design)
- 介紹一個能開發簡單SAP UI5應用的線上IDE:StackBlitz
- SAP CRM Fiori 應用和 SAP Commerce Cloud (電商雲) UI 如何透過調整CSS來改變UI顯示風格
- SAP 產品一脈相承的 UI 增強思路,在 SAP Commerce Cloud(電商雲) UI 增強實現中的體現
- 如何分辨 SAP Fiori Launchpad 裡的真假 Fiori 應用
- 在沒有任何前端開發經驗的基礎上, 建立第一個 SAP Fiori Elements 應用
- SAP Fiori 應用裡圖示(Icon)的渲染原理和使用技巧
更多Jerry的原創文章,盡在:"汪子熙":