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 程式設計環境賬號的申請和環境的搭建,希望開發顧問們自己動手,在實踐中加深對雲端開發理念的理解和掌握。