在SAP雲平臺的CloudFoundry環境下消費ABAP On-Premise OData服務

2022-02-01 汪子熙

我的前一篇文章 使用Java+SAP雲平臺+SAP Cloud Connector調用ABAP On-Premise系統裡的函數 介紹了在SAP雲平臺的Neo環境下如何通過SAP Cloud Connector消費ABAP On-Premise系統裡的函數。在那篇文章demo程序的Java代碼裡,我們實際是通過JCO(Java Connector)來遠程調用ABAP On-Premise系統裡的函數。

今天我們換個環境,試試SAP雲平臺的CloudFoundry環境。

同時我們也試試換一種方式來消費ABAP On-Premise系統的服務。讓我們開發一個Web應用,通過OData的方式顯示ABAP On-Premise系統裡的產品列表及價格信息。

該例子運行效果如下圖所示。

同前一篇文章提到的在SAP雲平臺的Neo環境裡消費ABAP On-Premise函數相比,在CloudFoundry環境裡實現同樣的需求,所需的步驟要複雜一些。

同Neo環境的部署相比,在CloudFoundry環境下最顯著的架構區別就是多了個App Router。為什麼CloudFoundry環境下需要這個東西?我的同事李貝寧在他的文章 SAP成都研究院李三郎:SCP Application Router簡介 裡做過詳細闡述。

為了完成這個例子,我們需要部署兩個應用到SAP雲平臺的CloudFoundry環境去,即App Router和Web應用本身。兩個例子的完整代碼在我的github上:

https://github.com/i042416/CloundFoundry_Connectivity

上圖各模塊間交互的簡單闡述:

1. App Router作為用戶訪問Web應用的入口。

2. App Router將請求重定向到XSUAA實例,彈出登錄界面。該實例負責完成登錄認證,稍後會創建它。下圖是登錄界面在我手機上打開的效果。

3. 登錄完成後,App Router將請求重定向到Web應用。

4. Web應用向XSUAA發起兩個並行的請求,如圖4a和4b所示,獲取用於訪問接下來第5,第6步的JSON Web Token。

5. Web應用訪問Destination實例獲取對應配置信息。

6. Web應用將請求發送給Connectivity實例。

7. Connectivity實例將請求通過Secure tunnel(安全隧道)轉發給Cloud Connector。

8. Cloud Connector和On-Premise系統都位於Corporate Network裡,直接調用其服務。

明白了原理,下面跟著Jerry一起做一做吧。

1. 我前一篇文章 使用Java+SAP雲平臺+SAP Cloud Connector調用ABAP On-Premise系統裡的函數 介紹了Cloud Connector的下載與安裝,因此現在我們可以重用之前安裝好的Cloud Connector。

點擊Add Subaccount按鈕,基於CloudFoundry Subaccount創建一個新的配置:

最重要的是維護CloudFoundry Subaccount的ID和用戶名(登錄郵箱)。

創建一個從Virtual Host到Internal Host的映射關係。Virtual Host的名稱可以隨便維護,我維護的是my-backend, 記住這個名稱,以後會用到。Internal Host我維護的是提供OData服務的On-Premise系統的主機名和埠號。點擊Check按鈕,確保Cloud Connector能夠成功連接On-Premise系統,狀態為Reachable。

將On-Premise系統的下列4個ICF服務路徑暴露出來:

/sap/bc/lrep

/sap/iwbep

/sap/opu/odata

/sap/public

至此Cloud Connector上的配置完成了。

2. 回顧我們之前介紹的模塊交互圖,Cloud Connector上的配置無法直接被部署在CloudFoundry上的應用消費。我們還需要在SAP雲平臺上創建三個不同類型的實例。

首先在SAP雲平臺Cockpit裡創建一個新的Destination,URL欄位指向前一步Cloud Connector裡創建的Virtual Host。這個Destination的名稱也得記錄下來,後面會用到。

進入Service Marketplace,創建一個新的XSUAA實例:

這個connectivity-jerry-demo就是稍後我要部署到SAP雲平臺上的Web應用名稱。

創建好的XSUAA實例:

connectivity和destination的實例創建的方式相同,不再贅述。下圖是為了完成本文介紹的場景所需的三個不同類型的實例創建好之後的狀態截圖。

至此SAP雲平臺上的配置也全部完成。

3. 現在開始Web應用的開發。先看App Router的xs-app.json: 入口文件是index.html, 這個html文件其實就一行代碼:

<a href="/app/">Go to App</a>

點擊之後,會跳轉到/app/, 而/app/的route配置如下,指向destination "dest-to-app":

而這個destination對應的真實url維護在App Router的manifest.yml文件中。同樣需要在該yml文件的services欄位裡維護前一步創建的XSUAA實例:

再看Web應用的manifest.yml文件:需要將前一步驟依次創建的三種類型的實例名稱分別維護如下圖所示:

接下來我們需要進行Web應用裡UI5部分的開發,指定產品列表的數據源基於哪一個OData服務。在UI5的controller文件裡,指定OData模型的路徑為相對路徑data-eu。

針對這個相對路徑data-eu,在neo-app.json裡定義了一個路由,會被重定向到On-Premise系統的標準OData服務EPM_REF_APPS_SHOP_SRV。具體重定向到哪個On-Premise系統是由路由的target欄位決定的。在我這個例子裡是jerry-abap-backend, 它就是我們之前在SAP雲平臺Cockpit裡創建的Destination。

這個Destination的URL欄位指向Cloud Connector的Virtual host,該host又映射到On-Premise系統的主機名和埠號。至此大功告成了,SAP Cloud Connector上的配置,App Router,Web應用,SAP雲平臺上的connectivity,XSUAA和destination三個實例,這一系列模型猶如一臺機器上的一個個零件,協同工作,實現了從Internet Network到Corporate Network的訪問場景。

將兩個應用部署到SAP雲平臺的CloudFoundry環境去,點擊App Router作為訪問的入口,能看到文章開頭的產品列表頁面。

並且Chrome開發者工具裡觀察到的網絡請求的路徑裡僅僅包含前文提到的UI5應用的neo-app.json裡配置的路由data-eu, 而On-Premise系統的主機名和埠號並未暴露到Cloud環境中。

當然,為了跑這個demo,您需要在On-Premise系統使用事務碼/iwfnd/maint_service,為EPM_REF_APPS_SHOP_SRV這個標準的OData服務指定一個後臺系統。在我下圖的例子裡,該服務的後臺實現系統我指定成了AG3。

在Java代碼裡列印實際的url,發現是http://my-backend:80/sap/opu/odata/sap/EPM_REF_APPS_SHOP_SRV/$metadata。

該url裡的my-backend:80會被Cloud Connector替換成實際的On-Premise系統的地址並發送到On-Premise系統去。

相關焦點

  • 使用SAP Cloud Application Programming模型開發OData的一個實際...
    剛剛過去的SAP TechEd上,SAP CTO Juergen Mueller向外界傳遞了一個重要的信息:身處雲時代大環境下的SAP從業者,在SAP雲平臺上該如何選擇適合自己的開發方式?+SAP Cloud Connector調用ABAP On-Premise系統裡的函數在SAP雲平臺的CloudFoundry環境下消費ABAP On-Premise OData服務ABAP vs Java, 蛙泳 vs 自由式聊聊C語言和ABAP
  • SAP ABAP應用伺服器的HTTP響應狀態碼(Status Code)
    +SAP Cloud Connector調用ABAP On-Premise系統裡的函數在SAP雲平臺的CloudFoundry環境下消費ABAP On-Premise OData服務ABAP vs Java, 蛙泳 vs 自由式聊聊C語言和ABAP
  • 在SAP分析雲裡根據業務數據繪製詞雲(Word Cloud)
    後來了解到SAP Analytics Cloud自身就支持使用R的開發包wordclound生成詞云:https://www.sapanalytics.cloud/resources-r-packages/
  • SAP ABAP和Java裡的弱引用(WeakReference)和軟引用(SoftReference)
    +SAP Cloud Connector調用ABAP On-Premise系統裡的函數在SAP雲平臺的CloudFoundry環境下消費ABAP On-Premise OData服務ABAP vs Java, 蛙泳 vs 自由式聊聊C語言和ABAP
  • Magento外貿獨立站之二 Google Cloud Platform雲平臺服務詳解
    昨天,在晨飛博客上分享了如何獲得google cloud platform的300美金,免費使用一整年google雲服務。很多人並不知道Google Cloud Platform (簡稱 GCP)到底是什麼,能用來幹什麼。在我看來,不管你做不做跨境電商,做平臺也好,做自建站也罷,GCP適用每一個人,每一個對知識與科技創新渴求的人。
  • ABAP CDS-介紹(ABAP CDS視圖)
    那些熟悉ABAP領域應用程式開發的人對SAP NetWeaver Application Server AS ABAP中包含的傳統數據建模工具應該並不陌生——特別是存儲了對象定義的ABAP數據字典(DDIC),例如abap程序中用到的資料庫表和視圖。而隨後出現了SAP HANA和將數據密集型邏輯下推到資料庫層的新範式。
  • SAP系統和微信集成的系列教程之四:如何將SAP C4C主數據變化推送給...
    在C4C系統中創建一個新的OData服務,選中新建的擴展欄位WechatID,將其暴露到OData API中:將新建的C4C OData服務重命名為zindividualcustomer,在Postman裡測試,確保使用OData filter操作符時,能夠讀取包括這個擴展欄位在內的客戶主數據的值
  • 值得看AIoT雲平臺Worthcloud2.0發布,賦能智能家居新生態
    深圳2019年7月9日 /美通社/ -- 2019年7月9日,廣州建博會期間,萬佳安物聯集團旗下值得看雲計算有限公司自主研發的AIoT雲平臺Worthcloud2.0在廣州香格裡拉正式對外發布。
  • 微服務等於Spring Cloud?了解微服務架構和框架
    spring cloud netflix:與各種Netflix OSS組件(Eureka,Hystrix,Zuul,Archaius等)集成。spring cloud bus:用於將服務和服務實例與分布式消息傳遞聯繫起來的事件總線。用於在集群中傳播狀態更改(例如配置更改事件)spring cloud for cloud foundry:將您的應用程式與Pivotal Cloudfoundry集成。
  • 筆記整理-ABAP示例程序
    運行系統命令:RSBDCOS0    對象列表查詢:RSWBO060    修改對象條目:RSWBO052    檢查SAP*和DDIC密碼:RSUSR003    傳輸文本至請求:RSTXTRAN    SAPscript輸入、輸出:RSTXSCRP    刪除舊abap的dumps:RSSNAPDL
  • ABAP CCDEF, CCIMP, CCMAC, CCAU, CMXXX這些東東是什麼鬼
    +SAP Cloud Connector調用ABAP On-Premise系統裡的函數在SAP雲平臺的CloudFoundry環境下消費ABAP On-Premise OData服務ABAP vs Java, 蛙泳 vs 自由式聊聊C語言和ABAP
  • Cloud vs. Edge 的利與弊
    高質量的託管服務提供商應該通過其SLA保證不低於100%的正常運行時間可靠性。 多功能性:由於託管設施能夠容納多個租戶,擴展容量就像在機架上安裝一個新伺服器一樣簡單。與on-prem解決方案不同,總有足夠的電源和散熱基礎設施來支持額外的增長。通過構建混合IT環境,利用物理數據中心的優勢以及雲計算的巨大能力,雲on-ramps也可以使客戶擴展到雲中。
  • 不喜歡SAP GUI?那試試用Eclipse進行ABAP開發吧
    即使是用SAP雲平臺Neo編程環境裡的SDK,開發人員也可以在本地完成開發後,使用命令行或者Eclipse Run As菜單將其發布到SAP雲平臺上。然而這種用法對於ADT來說行不通,因為後者仍然是一個Client / Server模式中的Client端。
  • 招聯消費金融領導到訪西仲雲法律服務平臺
    9月3日下午,招聯消費金融有限公司資產管理部郭昭辰、賀勇民兩位領導到訪西仲雲法律服務平臺深度問診「網際網路仲裁」,探討業務合作,主題圍繞「服務、取費、流程、執行」展開,受邀參加本次會議的有方元集團,西安民間金融小鎮,廣州八爪魚科技公司,西仲雲法律服務平臺等20餘人。
  • 雲開發 VSCode 插件 Cloudbase Toolkit 的正確打開方式
    Step2 創建環境如果您已經開通了雲開發服務,並創建了相關環境,可以跳過此步驟。登錄騰訊雲官方帳號打開騰訊雲官網,註冊騰訊雲帳號,然後登錄帳號。如有帳號,可直接登錄創建環境。創建環境點擊新建環境,輸入環境名稱,選擇按量計費模式,點擊立即開通,等待服務開通完成後繼續進行下面的操作。
  • 實戰丨使用NextCloud建立屬於自己私有的雲存儲網盤
    比如360網盤,但問題是,國內的網盤服務都是說停就停,根本沒有哪個能真正讓人放心,那麼怎麼辦才好呢?解決方案:使用Nextcloud建立屬於自己私有的雲存儲網盤篇幅有限,我們僅在文中呈現實戰內容,如果需要教學視頻和完整筆記,可聯繫文末老師領取。
  • cloud=雲,on cloud nine=?
    on cloud nine:欣喜若狂因為cloud是雲☁️
  • 小米雲深度學習平臺的架構設計與實現
    而亞馬遜和騰訊雲相繼推出了面向開發者的公有雲服務,可以同時支持多種主流的開源深度學習框架,阿里、金山和小米也即將推出基於GPU的雲深度學習服務,還有無數企業在默默地研發內部的機器學習平臺和大數據服務。面對如此眼花繚亂的雲服務和開源技術,架構師該如何考慮其中的技術細節,從用戶的角度又該如何選擇這些平臺或者服務呢。
  • python:wordcloud詞雲庫
    庫1、基本介紹是優秀的詞雲展示第三方庫,詞雲是以詞語為基本單位,更加直觀和藝術的展示文本2、使用說明wordcloud庫把詞雲當做一個WordCloudwordcloud.WordCloud()代表一個文本對應的詞雲可以根據文本中的詞語重複的頻率等參數繪製詞雲詞雲的形狀、尺寸和顏色都是可以設定的3、常規用法w=wordcloud.WordCloud
  • 當內存資料庫遇到雲:SAP HANA Cloud助力企業數位化轉型
    雲,我所欲也;內存資料庫,亦我所欲也。二者可得兼乎?當SAP HANA Cloud雲內存資料庫落地中國,大批中國企業即可通過這項「魚與熊掌兼得」的雲服務,加速數位化轉型的步伐。這時候如果有一個更加先進的雲端環境,面對數據分析和海量數據之間日益尖銳的矛盾,企業迫切地需要一個更加先進、更加快速、更加節省成本的運行環境。雲資料庫的出現,幫助企業大幅降低了數據中心的建設和運維成本,因而深受客戶歡迎,許多企業對於雲資料庫的需求也水漲船高。預計到2022年,75%的本地資料庫將會被部署或遷移到雲平臺。