1. 程式人生 > 其它 >SAP 雲平臺上的 ABAP 程式設計環境裡如何消費第三方服務

SAP 雲平臺上的 ABAP 程式設計環境裡如何消費第三方服務

在ABAP On-Premises環境下,使用ABAP程式設計消費第三方服務,相信很多ABAP顧問都已經非常熟悉了,無非就是使用CL_HTTP_CLIENT或者CL_REST_HTTP_CLIENT來發送和接收HTTP請求。

下圖這短短的38行程式碼,展示瞭如何使用ABAP工具類CL_HTTP_CLIENT去訪問百度首頁並拿到回覆。

從百度返回的響應,通過方法GET_CDATA獲得,儲存於變數rv_data內:

當然如果我們是做正式的產品開發的話,一般不會把第三方服務的URL硬編碼在應用程式裡,而是通過事務碼SM59建立的Destination管理第三方服務的endpoint,然後把Destination名稱儲存於配置表裡,這樣使得第三方服務的URL同應用程式碼解除耦合關係。

下圖是一個例子,我在SM59事務碼裡維護了一個指向某C4C系統的Destination,取名為C4C:

然後在ABAP程式碼裡使用cl_http_client=>create_by_destination建立HTTP工具類的例項。後續操作同使用cl_http_client=>create_by_url構造例項的程式碼一致,這裡不再重複。

如果我們直接把On-Premises環境下的這些ABAP程式碼搬到SAP Cloud Platform的ABAP環境裡,會遇到很多語法錯誤:

原因在於,雲端的ABAP程式設計模型支援的只是ABAP程式語言的一個子集,我們只能使用SAP開放的白名單裡的資源,這個白名單即上圖左邊Released Objects裡面包含的內容。

因為過去在On-Premises環境裡使用過的CL_HTTP_CLIENT, CL_REST_HTTP_CLIENT, IF_HTTP_CLIENT等ABAP類和介面均不在白名單內,故無法在ABAP雲端環境使用。

既然在雲端了,我們就得使用雲端的程式設計正規化。

在SAP Cloud Platform ABAP程式設計環境訪問第三方服務的程式碼如下:

可以看到其思路就是通過CL_HTTP_DESTINATION_PROVIDER這個雲端的Destination工廠類,拿到Destination例項,然後基於該例項建立雲端上的ABAP HTTP客戶端例項。工廠類生產Destination例項需要兩個引數:

  • i_name
  • i_service_instance_name

根據這個方法的介面註釋,這兩個引數分別為Destination的名稱和Service instance的名稱。下面介紹如何獲得這兩個引數的值。

在SAP Cloud Platform Service Marketplace裡建立一個新的Destination例項:



我們把新建的例項取名為DestService,然後再基於該例項建立一個Destination配置,這個配置就好比我們在ABAP On-Premises的SM59事務碼裡建立的Destination:

Destination我取名為ZJERRY_API, 這就是前面提到的工廠方法裡第一個引數i_name值的由來。

點選Check Connection,確保該Destination指向的URL可以訪問:

然後點選Open Dashboard,開啟這個SAP Cloud Platform ABAP例項的Fiori介面:

點選Launchpad tile,建立一個新的Communication Arrangements:


需要為新建的Communication Arrangement選擇一個Communication Scenario,這裡我選擇SAP標準釋出的專門用於CloudFoundry環境同第三方服務進行整合的場景,ID為SAP_COM_0276:

建立Communication Arrangement時還要維護Service Key資訊:

這個Service Key的資訊可以從Destination例項列表的Service Key維護介面獲得:

在建立好的Communication Arrangement裡,維護Service Instance Name的值為jerry-service-instance, 這也就是ABAP程式碼裡傳給工廠方法的第二個引數。

執行這個ABAP類:

獲得期望的輸出:

介紹完這些消費步驟之後,大家也可以自己動手,申請 SAP 雲平臺上的 ABAP Trial 系統並進行開發。

進入SAP Cloud Platform CloudFoundry的測試環境:


進入Service MarketPlace:

找到ABAP Trial服務,這就是所謂ABAP-as-a-Service的概念:

如果Service Marketplace裡看不到這個ABAP Trial服務也不要緊,點選Entitlements選單的Subaccount Assignments:

把這個服務分配給Subaccounts即可:

ABAP環境測試版本採用的Plan為Shared,這意味著您將會和其他使用者一樣,共享一個物理的ABAP系統:

新建一個ABAP Trial服務例項:

隨便取個名字,比如jerry-abap:

例項生成後,點選名稱進入明細頁面:

此處需要建立一個Service Key,有了這個Service Key,我們才能用它來在ABAP Development Tool裡登入這個位於SAP雲平臺上的ABAP測試系統:

給Service Key取個名字:

把生成的Service Key儲存到某個地方,比如記事本里:

然後開啟ABAP Development Tool,選擇通過Service Key的方式登入:

把之前在SAP雲平臺操作檯裡建立的Service Key貼上到此處:

點選Finish, 完成登入配置。

一切就緒,現在可以開始擼程式碼了。

在SAP雲平臺控制檯裡,點選ABAP Trial系統例項的Open Dashboard按鈕,

就能開啟這個雲上的ABAP系統的Fiori介面:

總結

本文首先介紹瞭如何在 SAP 雲平臺 ABAP 程式設計環境裡消費第三方服務的詳細步驟,這是一種 ABAP 技術棧同第三方系統整合的有力手段。接著介紹了 SAP 雲平臺 ABAP 程式設計環境賬號的申請和環境的搭建,希望開發顧問們自己動手,在實踐中加深對雲端開發理念的理解和掌握。