天天看點

SAP Fiori Elements 公開課第三單元學習筆記 - OData 和注解深入講解

課程位址

很多 SAP 從業者反映,open SAP 上的視訊,因為網絡原因無法通路,是以我會陸續在我的個人微 信 号“汪子熙”上面,把這些視訊配上中文字幕并釋出出來,敬請關注。

SAP Fiori Elements 公開課第三單元學習筆記 - OData 和注解深入講解

本單元的話題是 SAP OData 和注解的深入講解。

SAP Fiori Elements 公開課第三單元學習筆記 - OData 和注解深入講解

下面是本單元視訊講解的中文字幕,均由 Jerry 人工翻譯而成。

====

歡迎大家來到 Open SAP Fiori Elements 公開課第三單元。本單元介紹 OData 和注解

我是 Stefan Engelhardt, 是 SAP Fiori Elements 的開發架構師

在第二單元,Marcel 已經簡單介紹了 OData. 每個 Fiori Elements 應用都需要一個 OData 服務

Fiori Elements 對 OData 服務的背景技術棧沒有特殊要求,因為 OData 協定本身就是對背景實作細節的抽象

SAP Fiori Elements 公開課第三單元學習筆記 - OData 和注解深入講解

現在我們将深入介紹 OData 服務的核心概念。從資料模型的元描述開始

每個 OData 服務都有其資料模型的元描述資訊。螢幕右邊是一個例子

我們通常簡稱為 OData 中繼資料。在 OData url 後面加上 $metadata 即可檢視其中繼資料

螢幕左邊底部的超連結是 該 OData 中繼資料的完整 url

中繼資料定義了業務模型及其屬性

下圖右邊是一個 OData V4 的例子,定義了一個 Person 模型

SAP Fiori Elements 公開課第三單元學習筆記 - OData 和注解深入講解

包含使用者名,FirstName 等字段

中繼資料中屬性也具有進一步的定義

這些進一步的定義包含屬性的資料類型,比如 Edm.String, 是否允許存儲 null 值,字段最大長度等

描述實體與其他實體關系的字段被稱為導航字段

模型的導航字段指明了模型和其導航目标模型的基數關系,即"一對一"還是"一對多"

例如螢幕中名為 Trips 的導航屬性,指向的目标模型 Trip,類型是 Collection, 說明 Person 和 Trip 兩個模型是一對多的關系

此外,中繼資料還可以包含複雜類型,actions 和 singleton 等等的定義

Marcel 在上一個單元中已經介紹過,OData 支援增删改查操作

讓我們來看一些例子

這裡我們能看到對一個 OData 服務發起的 HTTP 請求和響應

第一個場景是讀取所有的 People. People 的類型是 Person, 定義在中繼資料裡

HTTP 響應包含對應的資料集。結果清單裡的第一條記錄是 Russell Whyte

我們還可以通過指定 key, 來查詢某條特定的 Person 記錄

把鍵值 russellwhyte 添加到花括号裡,在響應中您可以看到, 該請求隻傳回了一條對應的資料

讓我們再來看看一些更複雜的查詢

使用 $top,隻傳回前兩條記錄。使用 $select, 隻讀取 FirstName 和 LastName 字段

對結果集再次過濾,條件為至少擁有一條 Trip 記錄,且費用超過3000

如大家看到的, 我們可以非常靈活地構造複雜查詢語句

現在展示如何建立一條 Person 記錄

使用 HTTP POST 請求,在請求正文中維護 Person 資料響應傳回 HTTP 201 狀态碼,表明資料建立成功

SAP Fiori Elements 公開課第三單元學習筆記 - OData 和注解深入講解

為提高 Fiori 使用者體驗,SAP 定義了一種标準化的支援文檔 Draft 版本的處理機制

有了 Draft 機制,使用者對文檔的編輯可以随時中斷并随時繼續

SAP Fiori Elements 公開課第三單元學習筆記 - OData 和注解深入講解

隻有當使用者完成編輯之後,文檔資料才會存儲到對應的資料庫表裡

在 SAP Fiori Elements 應用裡,每當使用者在編輯模式下添加或者更改資訊時,Draft 版本的資料都會自動被儲存

這種自動儲存的請求響應,可能會包含一些提示消息,比如 SalesArea 的 sold-to party 沒有維護

當 sold-to party 資料發生變化時,HTTP 響應包含了該 party 所有資料,以便顯示在 UI 上

比如位址和聯系人資訊。Draft 機制使應用具備動态互動的特性

SAP Fiori Elements 公開課第三單元學習筆記 - OData 和注解深入講解

注意,Draft 機制應該通過架構提供開箱即用的支援

如果在應用程式層面重新實作整套 Draft 處理機制,工作量相當巨大

上一單元 Marcel 也介紹過 OData 注解。這些注解從行為和消費方式兩方面,對模型提供更多描述資訊

現在我将解釋 OData 注解的工作原理,并舉例說明

注解是 OData 額外的中繼資料,格式為 XML

注解定義于 OData 和 SAP 維護的詞彙表中

注解都是一些抽象的定義,是以較穩定,不會頻繁變動,能夠被包括 SAP UI5 在内的消費端解析

SAP Fiori Elements 解析注解并生成對應的 UI 頁面

看一個具體的例子:Travel App 裡的 Total Price 字段

SAP Fiori Elements 公開課第三單元學習筆記 - OData 和注解深入講解

在 OData Measures 詞彙表裡,存在一個 ISOCurrency 注解

OData 中繼資料裡的 TotalPrice 類型被其注解,指向目标字段 CurrencyCode

因而架構代碼能夠了解,TotalPrice 是一個貨币金額,而 CurrencyCode 字段包含了貨币機關

于是 Fiori Elements 在金額字段的右邊顯示貨币機關

該注解還用于根據貨币機關顯示對應的小數,并保證在表格中讓金額的顯示也能正确對齊

注解當然還能夠定義更複雜的 UI 元素

例如,這些 UI 可以是通過 UI.LineItem 定義的表格

通過 UI.FieldGroup 定義的 form, 通過 UI.Chart 定義的圖表等等

SAP Fiori Elements 公開課第三單元學習筆記 - OData 和注解深入講解

此外,注解還可以從行為方面來對應用程式進行描述

一個例子是在應用程式中提供增删改查等功能

比如通過注解,可以指定 Travel 模型可以被編輯,于是 Fiori Elements 在 UI 上繪制 Edit 按鈕

工具欄其他按鈕的顯示或隐藏邏輯也以此類推

SAP Fiori Elements 公開課第三單元學習筆記 - OData 和注解深入講解

另一個場景是所謂 Side Effect 的定義

例如,當表格行項目級别的産品單價發生變化時,UI 需要重新從背景讀取最新的訂單擡頭級别的總價資訊

SAP 系統背景可以提供基于 ABAP CDS 或者 CAP CDS 的注解

或者也可以使用本地檔案定義的注解。對于 UI 來說,它不關心注解來自背景伺服器或是本地檔案

CDS View 中的注解被背景伺服器翻譯成 XML 格式的注解

後者被 Fiori Elements 架構解析

XML 格式的注解可以被任何類型的背景伺服器使用

這些背景伺服器可以是 SAP 傳統的 ABAP 程式設計模型,SAP BW 和非 SAP 伺服器。下圖右邊是 ABAP CDS 注解的一個例子

SAP Fiori Elements 公開課第三單元學習筆記 - OData 和注解深入講解

您平時對于開發工具的偏好,可能會影響您對注解類型的選擇

在 SAP Fiori Tools 中,其提供的向導式建立步驟,能幫助我們建立正确的注解

SAP Fiori Elements 公開課第三單元學習筆記 - OData 和注解深入講解

XML 和 CAP CDS 注解都能被 SAP Fiori Tools 支援

如果您使用 ABAP Development Tool, 可以直接在 ABAP CDS 中維護注解

生命周期管理和功能可用性同樣會影響注解類型的選取

SAP Fiori Elements 公開課第三單元學習筆記 - OData 和注解深入講解

UI 項目本地檔案提供的注解,其生命周期同應用程式一緻。CDS 注解的生命周期同 OData 服務實作一緻

如果我們是在一個比較低版本的 ABAP 伺服器上開發,某些注解可能無法被支援。如果有疑問,請查詢文檔

讓我們總結一下本單元的内容

我們介紹了 OData 概念的核心部分,OData 中繼資料,OData 請求,以及 Draft 機制

SAP Fiori Elements 公開課第三單元學習筆記 - OData 和注解深入講解

我們也學習了什麼是 OData 注解,以及它是如何影響 Fiori Elements 應用的

現在大家可以期待下一單元的内容了。屆時我們将介紹如何搭建 Fiori Elements 應用的開發環境。