SAP Cloud Application Programming 模型的推薦是將 service 和 model 模型的定義分離開。
因此,我們在 db 資料夾裡定義 model model.
新建一個 schema.cds
檔案:
namespace sap.capire.products;
using { Currency, cuid, managed, sap.common.CodeList } from '@sap/cds/common';
entity Products : cuid, managed {
title : localized String(111);
descr : localized String(1111);
stock : Integer;
price : Decimal(9,2);
currency : Currency;
category : Association to Categories;
}
entity Categories : CodeList {
key ID : Integer;
parent : Association to Categories;
children : Composition of many Categories on children.parent = $self;
}
內容如下:
這裡用關鍵字 entity
定義了 Products 和 Categories 兩個領域模型。其中Currency,cuid 和 CodeList 等標準型別,來自 @sap/cds/common
:
localized
關鍵字可用於標記需要翻譯的元素。 儲存不同語言的翻譯和儲存預設後備翻譯的能力由 CDS 自動處理。
Associations 和 Compositions
associations
和 compositions
可用於定義實體之間的關係。 它們通常允許您在不明確使用外來鍵的情況下定義這些關係。
雖然關聯定義了實體之間相當鬆散的耦合,但組合定義了包含關係。 組合也可以被認為是定義深層結構。 可以沿這些結構執行深度插入和更新插入。
在域模型中,類別實體定義了父元素和子元素。 這啟用了類別的層次結構。 一個類別的 children entity 被建模為一個組合。 一個包含所有子類的類別定義了一個深層巢狀結構。 刪除一個類別將自動刪除其所有子項。 然而,一個類別的父類被建模為一個關聯。 刪除一個類別顯然不應該刪除它的父類。
cuid 和 managed 都是 aspect
,後者用附加元素擴充套件 entity. cuid aspect 將 UUID 型別的關鍵元素 ID 新增到 entity.
managed aspect 將建立和修改時間戳等欄位新增到 entity 內。
我們按住 ctrl 鍵 + 左鍵,就能檢視到這些 aspect 對應的實現:
CodeLists 可用於儲存基於程式碼(例如貨幣、國家或語言)的全域性可翻譯定義。 特別是對於 UI,CodeList 可用於為某些輸入欄位提供值幫助。
Currency
定義是一種型別。 它定義了與貨幣實體的關聯。 Currencies 實體基於 ISO 4217 並使用三個字母的字母程式碼作為鍵,例如 EUR 或 USD,並提供了儲存相應貨幣符號(例如 € 或 $)的可能性。
在 service 定義裡,將 domain model 裡某些欄位暴露出來:
下面我們需要將 domain model 部署到 sqllite 裡。
首先使用命令列安裝 sqlite
:
npm install --save-dev sqlite3
執行如下命令列,使用命令列將 domain model 初始化 sqlite:
cds deploy --to sqlite
下一步我們需要將 spring boot 應用同 sqlite 資料庫建立關聯關係。
開啟 main/resources/application.yaml 檔案:
---
spring:
profiles: default
datasource:
url: "jdbc:sqlite:/home/user/projects/products-service/sqlite.db"
driver-class-name: org.sqlite.JDBC
initialization-mode: never
hikari:
maximum-pool-size: 1
使用 curl 插入一條新的資料:
curl -X POST http://localhost:8080/odata/v4/AdminService/Categories \
-H "Content-Type: application/json" \
-d '{"ID": 1, "name": "TechEd", "descr": "TechEd related topics", "children": [{"ID": 10, "name": "CAP Java", "descr": "Run on Java"}, {"ID": 11, "name": "CAP Node.js", "descr": "Run on Node.js"}]}'
然後使用下面的 url,即可成功訪問剛剛插入的 categories 資料:
https://workspaces-ws-pdwk4-a...