如何在 SAP BTP 上通過 CDS view 快速建立 Fiori Elements 應用
本文基於 SAP Business Technology Platform 的 ABAP 程式設計環境進行的開發。
使用 ABAP Development Tool 登入 SAP BTP ABAP 程式設計環境,新建一個 package,命名為 Z_JERRY_CDS.
右鍵選中該 package,建立一個新的 Consumption view. 該檢視是一個消費檢視,它基於業務物件 (BO) 檢視 /DMO/I_TRAVEL_U,提供了獨立於消費層的給定資料模型。
它包含在其上執行的應用程式所需的所有核心資訊。
消費檢視是定義在 BO 檢視之上的 CDS 檢視,用於:
- 公開適合給定消費用例的欄位
- 使用註釋(例如用於 UI、搜尋和 OData)用元資料豐富資料模型。
這個消費檢視建立好之後,原始碼如下:
使用 ABAP Development Tool Content Assistant 快捷鍵,可以迅速將標準檢視 /DMO/I_Ttravel_U 的所有欄位,通過選單 Insert all elements(template),帶入到當前的消費視圖裡:
選擇 Open with Data Preview,即可檢視該消費檢視的資料:
資料顯示如下:
下一步,將 CDS 檢視公開為業務服務。 這將允許我們在 Fiori Elements 預覽中預覽 ABAP Development Tool 裡所作的更改。
業務服務由服務定義和服務繫結組成。
可以使用服務定義來定義將哪些資料(以所需的粒度)公開為業務服務。
然後使用服務繫結將服務定義繫結到客戶端-伺服器通訊協議,例如 OData。 這允許我們為同一定義提供多個繫結,例如 將服務暴露給 UI 和 A2X 提供者。
新建一個 Service Definition:
維護名稱和描述資訊:
在 Service Definitions 裡,將之前建立的消費檢視,Z_C_TRAVEL_DATA_JERRY, 暴露成服務:
基於建立好的 Service Definition,再建立一個 Service Binding:
啟用這個 Service Binding 之後,點選 Entity Set and Association 區域的 Preview 按鈕,就能檢視自動生成的 Fiori Elements 應用了:
開啟的 Fiori Elements 應用,預設沒有配置任何列表欄。
點選上圖工具欄的齒輪圖示,選擇檢視上所有欄位作為列表列專案:
現在 Fiori Elements 應用就能正常顯示資料了:
為了避免使用者每次預覽 Fiori Elements 應用之前,都要手動去點選齒輪圖示選擇列表列專案,我們可以在消費視圖裡新增如下註解:
@UI : {
lineItem : [{position: 10, importance: #HIGH}],
selectionField: [{position: 10 }]
}
如上圖所示,TravelID 和 AgencyID 兩個檢視欄位,添加了註解 @UI.lineItem, 這使得它們被設定為預設必須顯示的表格列專案。
點選齒輪之前,這兩個欄位前的 checkbox 總是預設被勾上。
我們可以將 CDS view 視圖裡的註解,單獨維護到一個開發物件裡。
首先在 CDS view 視圖裡,加上下面這行註解:
@Metadata.allowExtensions: true
右鍵選單選擇 Source Code -> Extract Metadata Extension:
這會建立一個新的 ABAP 開發物件,專門用於儲存 CDS view 的註解元資料:
選擇 Next,自動解析出原 CDS view 裡目前為止已經添加了的註解元資料:
Metadata.layer 的值,選擇成預設的 #CORE:
下面再介紹如何通過新增 CDS view 註解,讓自動生成的 Fiori Elements 應用,具有搜尋功能。
新增如下的註解:
@Search.searchable: true
然後在希望支援搜尋的檢視欄位,memo,即描述資訊欄位上,新增下面的註解:
@Search.defaultSearchElement: true
@Search.fuzzinessThreshold: 0.90
啟用 CDS view,重新整理 Fiori Elements 應用,即可看到表格控制元件上方,多了一個搜尋輸入框。能夠正常工作。
最後介紹如何通過註解新增 Selection Field
即過濾欄位。
例如,我們希望根據 Travel ID 對錶格進行過濾,則給 TravelID 欄位新增如下的註解:
selectionField: [{position: 10 }]
最後的介面效果,能夠通過 Travel ID 進行過濾了:
更多Jerry的原創文章,盡在:"汪子熙":