使用SAP Cloud Application Programming模型開發OData的一個實際例子
剛剛過去的SAP TechEd上,SAP CTO Juergen Mueller向外界傳遞了一個重要的資訊:身處雲時代大環境下的SAP從業者,在SAP雲平臺上該如何選擇適合自己的開發方式?
Juergen Mueller用了一棵決策樹來向大家介紹,對於擁有不同開發技能水平的SAP從業者,可以按照這棵樹,根據自身情況和專案需要來選擇不同層次和組合的開發工具以及程式設計模型。
上圖右邊的分支表明,如果不想拋棄已經習得的ABAP開發技能,可以選擇SAP雲平臺上的ABAP程式設計環境;反之,如果青睞nodejs,Java這些技術棧,那麼SAP雲平臺也不會讓你失望:SAP Cloud Application Programming Model(簡稱為CAP),是SAP推薦的在SAP Cloud Platform上進行開發的最佳實踐。
究竟什麼是SAP Cloud Application Programming Model?SAP官網上給出了定義:一套由開發語言,開發工具和庫有機整合的框架,提供了一種高效,快捷,全棧式的企業級服務和應用開發手段。CAP包含一套開發最佳實踐,讓開發者能夠專注於應用內具體業務邏輯的開發,而無需分心將精力花在重複的底層基礎設施功能的實現上去。
看一個具體的例子,通過Cloud Application Programming Model實現一個簡單的線上書店應用。書店裡出售很多書(Books),每本書包含ID,名稱,作者(Author)和庫存這四個欄位。使用者通過建立訂單(Orders)進行購買。
如果是用ABAP技術棧實現這個需求,一種比較容易的方式是使用事務碼SEGW,通過OData協議來實現。在SEGW裡建立Books,Author和Orders模型,以及對應的增刪改查。Jerry在去年的文章 SAP OData程式設計指南 裡曾詳細介紹。再後來有了CDS view,可以通過在CDS view上加註解@OData.publish的方式快速建立OData服務。
到了SAP Cloud Platform ABAP程式設計環境上,我們有了更加好用的工具:Restful ABAP Programming Model,
30分鐘用Restful ABAP Programming模型開發一個支援增刪改查的Fiori應用
Jerry帶您瞭解Restful ABAP Programming模型系列之二:Action和Validation的實現
從以上短短的描述,我們能夠感受到,近些年來ABAP技術棧隨著SAP向雲端轉型而不斷快速向前演進的趨勢。
下面我們就來看看如何用SAP CAP實現這個線上書店的需求。
命令列執行下面的命令:
npm set @sap:registry= https://npm.sap.com
npm i -g @sap/cds
從SAP的npm倉庫裡下載cds庫並進行全域性安裝:
接下來直接敲cds命令,如果看到下面的幫助資訊,說明安裝成功了。此後所有的CAP開發,都圍繞著這個cds命令進行。
CAP開發的IDE可以使用Visual Studio Code,當然也可以用其他文字編輯工具。推薦Visual Studio Code的原因是SAP釋出了一款針對CAP開發的Visual Studio Code擴充套件,支援語法高亮和靜態檢查,可以從SAP官網下載:
https://tools.hana.ondemand.com/#cloud
和我們開發一個nodejs應用類似,基於CAP的程式設計,第一步就是cds init,這個命令會自動幫我們建立CAP應用的骨架和從 http:// npm.sap.com 下載CAP應用必需的庫檔案。
cds init執行完畢後,開啟Visual Studio Code,介面如下,這些全是cds init自動生成的:
新建srv資料夾,下面建立檔案cat-service.cds,完成Books,Authors和Orders的建模,即定義每個模型的欄位,以及模型間的跳轉關係:
定義完之後,執行命令cds run,就可以本地預覽我們剛剛建立的模型了。這個命令啟動了一個本地伺服器,通過 http://localhost:4004訪問:
到目前為止,因為我們沒有實現這個模型的持久層,所以還觀察不到任何資料。
在實現持久層之前,我們可以先mock一些資料。新建cat-service.js, 在裡面硬編碼一些測試資料:
這樣,再次請求Books和Authors,就能在瀏覽器裡看到mock的資料了:
下面我們進行持久層的相關開發。新建一個資料夾db,下面新建一個檔案data-model.cds,把之前實現在cat-service.cds裡的模型定義拷貝過來。第17行的managed意思是把Orders模型的增刪改查操作託管給框架完成。
此時cat-service.cds裡的實現就乾淨多了,直接重用上一步data-model.cds裡定義好的模型。注意此處的@readonly和@insertonly註解。
這個例子裡我們選用SQLite這個輕型資料庫來儲存資料。用命令列npm i sqlite3 -D安裝SQLite,然後進行資料庫部署:
cds deploy --to sqlite:db/my-bookshop.db
根據cds deploy命令的輸出提示,package.json也相應被更新了:
前面提過Books和Authors這兩個模型具有@readonly註解,因此我們新建兩個csv檔案,維護一些資料在檔案內:
然後將這兩個csv檔案通過命令cds deploy匯入到資料庫裡。
登入sqlite控制檯,使用select語句檢視成功從csv檔案匯入的資料:
前面提到Orders的註解是@insertonly, 現在我們想實現一個新功能,每次針對一本書下單後,該圖書的庫存減一。
《生化危機》目前只有12本了:
開啟之前存放mock資料的cat-service.js, 在下單之前的hook裡實現庫存減一的操作:
然後進行測試:在postman裡執行post請求,下單再買一本:
此時再次執行get請求,發現《生化危機》的庫存已經和期望的一樣扣掉了一本了:
這種頻繁下單的顧客,估計是和Jerry一樣的生化系列愛好者。
希望這個例子能夠幫助大家對如何使用Cloud Application Programming Model進行開發有一些基本的認識。感謝閱讀。
要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2665440/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一個典型的使用 SAP Cloud Application Programming 模型開發的 Fiori 應用CloudAPP模型
- SAP Cloud Application Programming bookshop 例子的 Fiori PreviewCloudAPPView
- SAP Cloud Application Programming CDS 模型間 association 的設定CloudAPP模型
- SAP Cloud Application Programming bookshop 例子 Vue頁面不能正常顯示的原因分析CloudAPPVue
- SAP Cloud Application Programming 裡的@(path) 註解CloudAPP
- SAP Cloud Application Programming 程式設計模型(CAP)的設計準則CloudAPP程式設計模型
- SAP Cloud Application Programming CatalogService 預設的路徑CloudAPPGse
- SAP Business Application Studio 裡建立一個基於 CAP 模型的 OData 服務APP模型
- SAP Cloud Application Programming 介紹(2021 更新版)CloudAPP
- 使用SAP WebIDE進行SAP Cloud Platform Business Application開發WebIDECloudPlatformAPP
- 如何使用SAP Cloud Application Studio建立一個PDF formCloudAPPORM
- 使用url引數傳遞SAP Analytics Cloud filter的一個例子CloudFilter
- SAP 電商雲 Spartacus UI Proxy Facade 的一個實際例子UI
- SAP C/4HANA Sales Cloud使用OData服務和第三方系統整合的一個具體例子Cloud
- 一個實際的例子學習 SAP BTP Java 應用的 @Before 註解使用方式Java
- 使用 SAP Cloud SDK 連線 OData 服務Cloud
- Rxjs debounce 運算子在 SAP Spartacus 函式節流中的一個實際使用例子JS函式
- SAP CRM AET Application Reference型別擴充套件欄位的一個例子APP型別套件
- SAP Cloud for Customer裡一個Promise的實際應用場合CloudPromise
- Angular 原理圖 Schematics 學習 - 動手開發一個實際的例子Angular
- 通過一個具體的例子,講解 SAP Cloud Platform Integration(CPI) 的使用方法CloudPlatform
- 使用 SAP Business Application Studio 開發 Vue 應用APPVue
- SAP Spartacus SSR 中的 shimming 實現的一個例子
- 通過一個實際的例子學習 combineLatest
- 使用 SAP Business Application Studio 建立 Fiori Elements 應用顯示 OData 資料APP
- 使用 ViroReact 開發增強實現應用的一個具體例子React
- 用一個實際例子理解Dockervolume工作原理Docker
- SAP UI5 使用 Smart Control 的一個具體例子UI
- SAP Cloud for Customer和SAP Fiori系統裡的OData測試工具Cloud
- 如何使用 Restful ABAP Programming 程式設計模型開發一個支援增刪改查的 Fiori 應用REST程式設計模型
- 使用 SAP Business Application Studio 搭建 CAP Java 開發環境APPJava開發環境
- 通過實際的例子,介紹 SAP ABAP 裡的 Repository Information System 的使用技巧ORM
- 一步步使用SAP C4C Cloud Application Studio建立一個BO和對應的螢幕CloudAPP
- 用一個實際例子理解Docker volume工作原理Docker
- 從一個實際的例子觸發,理解什麼是 Rxjs 的 defer 函式JS函式
- 如何給在 SAP Business Application Studio 裡開發的 OData 服務準備測試資料試讀版APP
- SAP Spartacus SplitViewComponent Migration 的一個具體例子View
- SAP UI5 OData 模型(V2) 的使用方法介紹UI模型