基於 SAP Cloud Application Programming Model 快速構建 MTA 工程

2021-02-20 SAP中國研究院

按照我們以往的經驗,如果要在 SAP 雲平臺上開發業務系統,前端一般使用 SAPUI5;後端則通過Java 實現業務邏輯,例如採用 JPA 構建數據模型,通過 SpringMVC 向前端提供 Restful API 等等。除了前後端的開發工作外,我們還需要處理前後端之間的集成,因此整個開發效率一直不是很高。而 SAP 的 Cloud Application Programming Model (CAP)則能夠幫助開發者顯著提升工作效率,減少代碼的編寫工作,轉而將更多的精力集中在業務功能的開發與優化上。

CAP 的核心是 CDS 引擎和 CDS 語言。CDS 的語法規範和 JavaScript 十分類似,它可用於開發數據模型、業務邏輯和前端 UI。一個以往需要兩三天完成的具備 CRUD 的業務功能,如果利用 CAP 框架,也許兩三個小時就能開發完。


從項目結構上看,基於 CAP 構建的項目採用的是 Multi Target Application (MTA) 結構。MTA 是由一系列軟體模塊組成的獨立應用程式。每個模塊可以由不同的程式語言開發,也可以使用不同的打包技術,但是它們共享同一個生命周期。開發者可通過 MTA Descriptor (一個 YAML 配置文件) 定義模塊之間的關係,然後通過 MTA Build Tool 將它們打包成一個 MTAR 文件,然後部署到 SAP 雲平臺上。

接下來我們將通過一個簡單實例,與您分享如何利用 CAP 創建一個端到端的項目工程,將應用應用程式發布到 Fiori Launchpad 上,並部署到 SAP 雲平臺。

構建示例項目只需要一個 SAP 雲平臺試用帳戶以及由平臺免費提供的 Web IDE。在實際項目開發時,您可以搭配使用 VS Code 與 SAP Web IDE。本地 IDE 非常有助於檢查打包或部署的錯誤日誌。您需要準備的工具包括:

Visual Studio Code 

Cloud MTA Build Tool

Node.js / NPM

Git

Maven

Grunt

CF CLI

Web IDE 是 NEO 平臺的集成開發環境,而目前在阿里雲上的SAP 雲平臺是 Cloud Foundry平臺,所對應的開發環境是 Business Application Studio。

鑑於本文在撰寫時,SAP 雲平臺尚未在阿里雲上落地,因此開發者使用的是 Web IDE。由於客戶的雲平臺大多數都為 Cloud Foundry 平臺的,因此我們會在今後與您分享有關 Business Application Studio 的使用方法,敬請期待。


在構建應用程式之前,我們首先需要一個用於 Cloud Foundry 環境的 SAP 雲平臺子帳戶。請前往 https://account.hanatrial.ondemand.com 註冊試用帳戶。

Step 1: 在 SCP Cockpit 頁面中創建一個子帳戶,然後再在子帳戶中創建一個新 Space。


Step 2: 跳轉至 Entitlement 頁面,並添加所需的服務,包括 Application Runtime、HTML5 Applications、 Portal 和 SAP HANA Service。


Step 3: 創建一個 Quota Plan,然後將其分配給已創建的 Space。

創建 SCP Cloud Business Application


在創建 MTA 工程前,請首先在 Web IDE - Extension 中開啟 SAP Cloud Platform Business Application Development Tools,然後完成以下步驟。

Step 1: 進入 Web IDE,選擇導航菜單 "New - Project from Template"。在項目模版中選擇 SAP Cloud Platform Business Application。


Step 2: 輸入項目名稱 (如: "sample")。在 Template Customization Tab 中勾選 Use HTML5 Application Repository。


Step 3: 點擊 Project Details 中的 Service (sr),然後選擇 Java,並將 java package 定義為 my.bookshops;接著勾選 Include sample files in project as default,此選項會為項目創建一個 Bookshop 示例工程;最後勾選 Enable User Authentication (UAA)。


Step 4: 點擊 finish 完成項目創建。項目會默認創建 "db" 和 "srv" 兩個子模塊。

示例代碼在 db/data-model.cds 定義了 3 個數據對象,分別在 db/csv 目錄下生成基於 *.csv格式的 3 個測試數據文件。


調用這 3 個數據對象,用三行 CDS 代碼在 srv/cat-service.cds 發布為 ODATA Entity 服務。對於註解了 @insertonly 的 Orders,對該文件 Build 以後,會生成一個用於業務增強的OrdersService.java,以提供創建數據以外的增強邏輯,如:數據校驗和業務邏輯增強。
 


Step 5: 現在我們嘗試在 Web IDE 內部署並測試示例服務。右鍵選擇項目,選擇導航菜單Build|Build CDS。CDS Build 的作用是將 db/data-model.cds 生成為 *.hdbcds 腳本,將 srv/cat-service.cds 生成為 EDMX 格式的 ODATA Metadata文件。


Step 6
: Build 完成以後,右鍵選擇 srv 目錄,選擇菜單 Run as Java Application。隨後,示例的 OData service 即通過 Web IDE 部署到 Cloud Foundry。


點擊待發布的 API 連結,並測試已經發布的 ODATA Service。




接下來,讓我們添加兩個獨立的 UI5 application:Books 和 Authors。它們分別包含一個列表頁面。

Step 1: 右鍵點擊項目根目錄,選擇菜單 New | HTML5 Module。在 Template Selection Tab 內選擇 List Report Application。

Step 2: 在 Basic Information Tab 中輸入 module name 和 title。



Step 3: 點擊下一步,在 Data Connection Tab 中選擇 Current Project 服務 CatalogService。


Step 4: 點擊 Annotation Selection Tab,保留默認值並點擊先一步。

Step 5: 點擊 Customization Tab, 在 OData Collection 菜單中選擇 Books,點擊 Finish 完成創建。


Step 6: 在目錄 sample/books/webapp/ 下打開 manifest.json,在 Navigation Tab 內創建一個 Sematic Object,聲明一個可以被加入 Fiori Launchpad Site 的 App。
 


Step 7: 打開 sample/books 目錄下的 xs-app.json 文件,更改 authenticationMethod 為route。讓它調用 UAA 來對訪問權限進行校驗。(註:我們這裡可以用相同的方法添加另一個UI5 Application: authors)。   


Step 8: 建議創建一個 UI5 Application 的目錄: app。將已經創建的 books 和 order 這兩個目錄剪切並複製到這個目錄,優化項目的層級結構。


Step 9: 右鍵分別點擊目錄 sample1/app/books 或 authors, 選擇菜單 Run | Run as Web Application, 並選擇 Run with Mockdata,可以在 Web IDE 環境下測試 List Report 頁面。

為了將 UI App 發布到 Fiori Launchpad,我們需要在已有的 MTA 工程中添加一個 Fiori Launchpad Site。


Step 1: 右鍵點擊項目目錄,選擇導航菜單 New | SAP Fiori Launchpad Site Module,輸入名稱 flp,然後點擊 finish 完成創建。


Step 2
: 打開 flp/portal-site 目錄下的 CommonDataModel.json 文件。在 Launchpad Editor 內添加 Books, Authors 到 Default Group。




使用 Fiori Launchpad site,配置 UAA 是必須的,UAA 默認的 IDP 是SAP ID。在項目目錄下打開 xs-security.json 文件,加入 UAA 的默認配置。在項目目錄下打開 xs-security.json 文件,加入 UAA 的默認配置。 


同時打開 mta.yaml 文件,在 resources 節點下找到 sample-uaa,刪除 config 參數,添加 path:xs-security.json,同時打開 mta.yaml 文件,在 resources 節點下找到 sample-uaa,刪除 config 參數,添加 path:xs-security.json。
 


為了方便在本地用 Visual Studio Code 開發、打包和部署,建議從一開始就基於 Git 管理項目。右鍵選中項目,選擇導航菜單 Git - Initialize the local repository,填入提前建好的外部Git Repository 地址即可。

將 MTA 項目打包成用於部署的 *.MTAR文件

Step 1: 安裝 Cloud MTA Build Tool。在終端 Command Line 執行 npm 命令安裝 mbt:


Step 2: 在本地一個工程目錄,通過 git 將 Web IDE 提交至 Git 的工程, Clone 到本地 (或者直接在 Web IDE 裡導出到本地 )。

Step 3: 在終端 Command Line 跳轉至項目功能目錄/sample。

Step 4: 用 cds 命令,對 CDS 文件進行編譯。

cds build -clean


Step 5: 執行 mbt build 打包項目工程。

打包完成後,會在mta_archives裡生成.mtar部署文件。

將 MTA 項目部署至 Cloud Foundry

Step 1: 通過終端 Command Line 登錄 Cloud Foundry Account 和 Space:

Step 2: 執行 cf deploy 將 mta_archives/sample_0.0.1.mtar 部署到 Cloud Foundry:

cf deploy mta_archives/sample_0.0.1.mtar


在日誌中找到 sample-aporouter,打開發布的連結,即可訪問 Application Fiori Launchpad site:


最後,持久層模塊(db)、服務模塊(srv)、前UI(app/books、authors) 及 Fiori Launchpad(flp) 被打包成 MTA 包,並成功部署到了 SCP Cloud Foundry。


希望本文內容對大家在初次構建一個基於 CAP 框架的端到端項目工程有所幫助。原始碼可參考:https://github.com/spyguy/sampleDemo.git。

Jason 於 2012 年加入 SAP 工作,目前在 SAP 成都研究院 SCP Delivery 團隊擔任方案架構師一職,專注於為亞太及大中華區客戶交付基於 SAP Cloud Platform 的客戶化解決方案。

如果您或者您身邊的技術大牛也想要分享與 SAP 雲平臺有關的開發內容和實用技巧,歡迎您積極投稿或者推薦。我們會進行適當篩選,並隨後與作者溝通聯繫。

投稿郵箱:gavin.du@sap.com,
jiahui.zou01@sap.com 和 kate.shen02@sap.com。

往期回顧: 

相關焦點

  • SAP S/4HANA Cloud SDK 入門介紹
    運行以下命令安裝 SDK:npm install -g @sap-cloud-sdk/cli之後使用命令行新建一個項目:sap-cloud-sdk init my-sdk-project自動生成的項目文件結構如下圖所示:
  • 基於 SAP 雲平臺的雲應用授權管理 (上)
    <dependency> <groupId>com.sap.cloud.security.xsuaa</groupId> <artifactId>spring-xsuaa-test</artifactId> <version>2.0.0</version><
  • Spring Cloud第一篇:服務註冊與發現Eureka
    一、spring cloud簡介spring cloud 為開發人員提供了快速構建分布式系統的一些工具,包括配置管理、服務發現、斷路器、路由、微代理
  • 【微服務系列】spring cloud教程一
    一、spring cloud簡介spring cloud 為開發人員提供了快速構建分布式系統的一些工具,包括配置管理、服務發現、斷路器、路由、微代理、事件總線、全局鎖、決策競選、分布式會話等等。它運行環境簡單,可以在開發人員的電腦上跑。
  • 使用 ServerLess, Nodejs, MongoDB Atlas cloud 構建 REST API
    本篇文章中我們將使用 ServerLess、MongoDB Atlas cloud 與 Node.js 的結合來快速構建一個 REST API,無論你是前端工程師還是後端工程師,只要你掌握一些 JavaScript 基礎語法就可以完成。通過本文你能學到什麼?
  • DAY 1: 學習CUDA C Programming Guide
    Many applications that process large data sets can use a data-parallel programming model to speed up the computations.
  • 如何使用 SpringCloud 搭建服務註冊中心?
    創建服務註冊中心(Server)這裡首先說明一點,雖然說SpringCloud與SpringBoot互為御用,從概念上說它們有不同分工,但實現上它們之間卻並不是各自獨立的實體,而是一種寄生關係:SpringCloud也要基於
  • Netflix之後,如何用Spring Cloud 新組件構建微服務架構?
    本文基於 Spring Cloud 新組件,闡述了如何構建微服務架構。2020 年 12 月 22 日,Spring 在官方博客正式發布 2020.0.0 版本(即 Ilford),這是一個採用新命名規範的版本,但是,更引人關注的是該版本移除了多個之前處於維護模式的 Netflix 組件,如 Ribbon、Hystrix 和 Zuul。
  • 通過實例了解SAP Cloud Platform Integration
    SAP Cloud Platform Integration是部署在SAP雲平臺上的基於雲的集成平臺,它可以集成雲應用與其他的解決方案,無論解決方案是基於雲的還是本地部署的。以下一概簡稱SAP Cloud Platform Integration為SCPI。
  • 手把手教你搭建Spring Cloud(二)- 基礎服務搭建
    到此,我們消費者80就部署構建完成了。現在我們的思路是,將一些相同的代碼,提到一個公共的工程裡面,供各種服務統一調配和使用。構建公共項目cloud-api-commons這個項目中不僅可以放我們重複的代碼,以後還可以放一些我們的工具類,或者一些第三方的接口。
  • Spring Cloud Eureka 入門 (二)服務提供者詳解
    詳解 springcloud-eureka-client-provider 服務提供者工程1.springcloud-eureka-server  工程目錄結構├── pom.xml└── src    └── main        ├── java        │   └── org        │       └── spring        │
  • Spring Cloud Eureka 入門 (一)服務註冊中心詳解 ...
    詳解 Eureka 工程 springcloud-eureka-server 1.springcloud-eureka-server  工程目錄結構├── pom.xml└── src    └── main        ├── java        │   └── org        │       └── spring
  • 應用程式安全經理/Application Security Manager
    擁有在代碼和API級別應用程式安全領域7年以上的軟體開發專業知識和經驗,理解常見的安全編碼實踐和模式編程,理解攻擊向量和預防機制7+ years of software development expertise and experience in application security on code and API level, understanding of
  • springcloud(二):註冊中心Eureka
    後來研究springcloud的時候發現了Netflix公司,就在想它們是不是同一家公司,經過核對github上面郵件後綴判定確實是同一家公司,其實springcloud的微服務就基於Netflix公司的開源產品來做的。Netflix的開源框架組件已經在Netflix的大規模分布式微服務環境中經過多年的生產實戰驗證,正逐步被社區接受為構造微服務框架的標準組件。
  • SAP招高級開發,開發,助理開發(針對應屆)!
    You will have to build up excellent product know-how of the ByD/C4C/ HCP application.3 to 5 years of experience with programming user interfaces for Web-based software applications.Proficiency with XHTML, CSS, object-oriented JavaScript, and AJAX.
  • SpringCloud與Gateway新一代網關
    Spring Cloud Gateway是Spring官方基於Spring 5.0,Spring Boot 2.0和Project Reactor等技術開發的網關,Spring Cloud Gateway旨在為微服務架構提供一種簡單而有效的統一的API路由管理方式。
  • 從零搭建 Spring Cloud 服務
    ps:  博主基於Maven+idea搭建。 另外SpringCloud需要基於springboot搭建。2.1 引入Spring Boot相關依賴 這裡的springboot用的是1.5.7版本引入Spring Cloud相關依賴 這裡為 Edgware.SR52.1 工程初始化配置在Idea中創建工程:File -> New ->Project
  • Spring Cloud快速入門一
    -- 添加依賴管理,子模塊中Spring Cloud相關的依賴都會基於當前配置的版本選擇依賴版本 -><dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId>
  • 網關Spring Cloud Gateway科普
    Spring Cloud Gateway 具有如下特性:基於Spring Framework 5、Project Reactor 和 Spring Boot 2.0 進行構建;可以對路由指定 Predicate(斷言)和 Filter(過濾器);易於編寫的 Predicate(斷言)和 Filter(過濾器);
  • 基於iCloud構建獨立項目用戶體系
    而iCloud是我遇到最合適用來構建起用戶體系,以及拓展功能需求的工具了。自己已經獨立做了兩款應用,都是基於iCloud建立起來的,歡迎體驗反饋,要是再來個五星好評是對我最大的鼓勵~記帳:夢見帳本(長按識別)遊戲:掃雷Elic-無盡天梯(長按識別)