SAP Cloud Application Programming 介绍(2021 更新版)
這是Jerry 2021年的第 25 篇文章,也是汪子熙公眾號總共第 296 篇原創文章。
最近有朋友給我留言,詢問關于 SAP Cloud Application Programming(簡稱CAP) 的相關開發流程。
早在 SAP 2019 TechEd 上,SAP CTO Juergen Mueller 向 SAP 生態圈傳遞了一條重要信息:身處云時代大環境下的 SAP 從業者,如何選擇最適合自己的 SAP 開發方式?
Juergen Mueller 給出了下圖所示的決策樹,幫助大家進行技術選型:
決策樹中展示的主要分支解釋如下:
-
如果待實現的需求,能夠通過非代碼方式來完成,可以嘗試工作流(Workflow) 或者低代碼解決方案(Low-Code),比如 SAP RAD by Mendix,細節可以參考 Jerry 這篇文章:SAP云平臺上的Low Code Development(低代碼開發)解決方案。
-
如果只能通過編碼實現需求,則可以選擇基于 ABAP 技術棧的 RAP(Restful ABAP Programming) 編程模型,或者非 ABAP 技術棧的 Cloud Application Programming 模型。
SAP Cloud Application Programming 模型的準確定義是什么?
SAP 官網的定義是:SAP Cloud Application Programming 是一套由開發語言,開發工具和庫有機集成的框架,提供了一種高效,快捷,全棧式的企業級服務和應用開發手段。CAP 包含一套開發最佳實踐,讓開發者能夠專注于應用內具體業務邏輯的開發,而無需分心將精力花在重復的底層基礎設施功能的實現上去。
Jerry 在 2019 年 SAP TechEd 結束后,曾經寫過一篇文章,通過一個在線書店的例子,介紹了 SAP Cloud Application Programming 編程模型的使用方式:
使用Cloud Application Programming模型開發OData的一個實際例子
如果大家照著文章里介紹的步驟,自己動手實踐一遍,不難發現,我們絕大部分工作量都花在了思考并設計在線書店里涉及到的業務領域模型(Domain Model),比如書籍,書籍類別,作者,訂單及模型間的相互關聯關系。而這些模型本身的增刪改查和持久化邏輯等更底層的技術實現,全部由 SAP CAP 本身完成,無需應用開發人員操心。SAP CAP 期望通過這種設計,來提高企業級應用的開發效率和健壯性。
距離 Jerry 前一篇文章已經過去兩年了,最近我抽時間查詢了 SAP 官網關于 SAP CAP 開發流程的介紹,發現其在 2019 年的基礎上,從CAP 提供的開發工具的使用角度上說,沒有太大的變化,但不少細節之處進行了優化,使用起來感覺更加順暢。
本文介紹的使用 SAP Cloud Application Programming 模型開發在線書店的過程,分為下列四個步驟:
本文使用到的源代碼,在 SAP 官網上能夠下載。
本文使用基于 nodejs 的 SAP Cloud Application Programming 完成在線書店應用的開發,因此需要安裝并配置 nodejs 開發環境。
首先使用命令行,安裝 CAP 的 SDK 工具:
npm i -g @sap/cds-dk
完成之后敲 cds 命令,確保能看到下列輸出:
然后創建一個空的 CAP 項目:
cds init bookshop
cds init 命令行創建出來的項目,本質上還是一個 nodejs 應用,包含了 CAP 應用的骨架。我們接下來需要進入上圖標注了三個序號的文件夾里,進行相應的業務邏輯開發。
-
app 文件夾里存放的是 CAP 應用的前端 UI 頁面,這些頁面消費該 CAP 應用提供的 OData 服務,將業務數據以 UI 方式展示出來。可以基于任何前端框架實現。
-
db 文件夾里存放的是 CAP 的業務模型定義,以及持久化數據庫相關的資源。
-
srv 文件夾里存放的是 OData 服務定義。這些 OData 服務負責將 db 里定義的業務模型承載的業務數據暴露給消費者,比如被 app 文件夾里開發的前端應用所消費。
用 Visual Studio Code 打開新建好的 CAP 項目,首先在 db 文件夾的 schema.cds 文件里,創建在線書店業務模型。使用關鍵字 entity 定義一個名為 Books 的模型。
冒號后面的 managed,包含了幾乎所有業務模型都需要定義的 Administrative 信息,即創建時間,創建者,修改時間,修改者。因此 SAP CAP 出于重用目的,將這四個字段包裹在名為 managed 的 aspect 中。應用人員定義的業務模型,通過 : managed 的語法將其包含入內。
ABAP 開發人員可以將這種機制,類比成 ABAP DDIC 的 Include Structure.
采用同樣的語法,定義書籍作者(Authors) 和書籍類別(Genres)模型后,我們下一個需要考慮的問題就是,如何插入業務數據到這些模型對應的數據庫表里。
SAP CAP 提供了一種比較簡單的數據導入方式,即本地維護一些包含業務數據的 csv 文件,將這些 csv 文件導入到模型對應的數據庫表里。無獨有偶,SAP Commerce Cloud (電商云)也支持這種 csv 文件導入的方式,實現數據導入功能。這種數據導入方式,在 SAP Commerce Cloud 里稱為 ImpEx (Import & Export 的簡寫).
我在 db 文件夾下 schema.cds 里定義的命名空間為 sap.capire.bookshop, 因此為了使用 csv 文件向這個命名空間里的數據庫表導入數據,需要按照下列命名規范創建 csv 文件:
<命名空間>-<模型名稱>.csv
比如我導入數據庫的作者數據,創建的 csv 文件名為:sap.capire.bookshop-Authors.csv
書籍數據:sap.capire.bookshop-Books.csv
書籍類別數據:sap.capire.bookshop-Genres.csv
csv 文件維護完畢之后,執行 cds deploy 命令,將 csv 文件導入到數據庫里。命令中 sqlite 冒號后面是我指定的數據庫名稱:my.db
cds deploy --to sqlite:my.db
數據導入成功后,在Visual Studio Code SQLite Explorer里能瀏覽數據庫表及其內容:
接下來,需要將上圖所示的 my.db 數據庫中的業務數據,通過 OData 服務,暴露給消費者。
SAP CAP 采用聲明式(Declarative)的服務定義方式,將業務數據通過 OData 暴露出來。
在 srv 文件夾下新建一個 cat-service.cds 文件,實現一個圖書的目錄瀏覽服務(Catalog Service).
上圖 OData 服務源代碼一些關鍵點說明:
-
使用 using 關鍵字,導入 db 文件夾下 schema.cds 文件中定義的命名空間 sap.capire.bookshop 下包含的業務模型。
-
@path 注解,定義了該目錄服務的 endpoint 為 /browse.
-
@readonly 注解,表明該 OData 服務只能以只讀的方式,暴露 Books 和 ListOfBooks 數據給消費者。
因為 Books 模型的定義里,沒有直接包含書籍的作者名,而是通過一個名為 author 的 Association,指向對應的 Authors 模型。因此,上圖第五行,通過auth.name 后面的 as 關鍵字,將 Association 指向的作者模型的 name 字段,內聯到 OData Books 模型中來。
執行 cds run 命令,啟動開發好的 CAP 應用:
http://localhost:4004 訪問,就可以測試我們通過以上三個步驟,開發完成的 OData 服務了。
這個由 cds SDK 自動生成的默認界面,提供了很多 OData 服務測試功能。
比如點擊 Books 超鏈接,能通過下面 url 代表的 OData 服務調用,查看到服務器數據庫上所有的書籍數據:
http://localhost:4004/browse/Books
點擊 Fiori Preview 超鏈接,能夠在一個自動生成的 SAP Fiori Elements 應用里,調用上述 url,將書籍數據展示在 Fiori UI 上。
Jerry 后續的文章,會根據該在線書店的例子,介紹更多 SAP Cloud Application Programming 開發相關的內容,敬請期待。
更多閱讀
-
使用SAP Cloud Application Programming模型開發OData的一個實際例子
-
30分鐘用Restful ABAP Programming模型開發一個支持增刪改查的Fiori應用
-
Jerry帶您了解Restful ABAP Programming模型系列之二:Action和Validation的實現
-
Jerry帶您了解Restful ABAP Programming模型系列之三:云端ABAP應用調試
-
SAP云平臺上的Low Code Development(低代碼開發)解決方案
更多Jerry的原創文章,盡在:“汪子熙”:
總結
以上是生活随笔為你收集整理的SAP Cloud Application Programming 介绍(2021 更新版)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python跟pycharm的区别_py
- 下一篇: SAP Cloud Applicatio