SAP雲平臺上的ABAP編程環境裏如何消費第三方服務

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

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

clipboard1,1

從百度返回的響應,經過方法GET_CDATA得到,存儲於變量rv_data內:函數

clipboard2,2

固然若是咱們是作正式的產品開發的話,通常不會把第三方服務的URL硬編碼在應用程序裏,而是經過事務碼SM59建立的Destination管理第三方服務的endpoint,而後把Destination名稱存儲於配置表裏,這樣使得第三方服務的URL同應用代碼解除耦合關係。工具

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

clipboard3,3

而後在ABAP代碼裏使用cl_http_client=>create_by_destination建立HTTP工具類的實例。後續操做同使用cl_http_client=>create_by_url構造實例的代碼一致,這裏再也不重複。url

clipboard4,4

若是咱們直接把On-Premises環境下的這些ABAP代碼搬到SAP Cloud Platform的ABAP環境裏,會遇到不少語法錯誤:spa

clipboard5,5

緣由在Jerry的第一篇介紹SAP雲平臺ABAP編程環境的文章 在SAP雲平臺ABAP編程環境上編寫第一段ABAP程序 裏就已經提到,雲端的ABAP編程模型支持的只是ABAP編程語言的一個子集,咱們只能使用SAP開放的白名單裏的資源,這個白名單即上圖左邊Released Objects裏面包含的內容。3d

由於Jerry在On-Premises環境裏使用過的CL_HTTP_CLIENT, CL_REST_HTTP_CLIENT, IF_HTTP_CLIENT等ABAP類和接口均不在白名單內,故沒法在ABAP雲端環境使用。orm

既然在雲端了,咱們就得使用雲端的編程範式。blog

Jerry去年的文章使用Java+SAP雲平臺+SAP Cloud Connector調用ABAP On-Premise系統裏的函數 裏曾經介紹過運行在雲端的Java應用如何經過SAP雲平臺上建立的Destination來調用ABAP On-Premises系統裏的RFC函數。現在咱們在雲上運行的應用的編程語言從Java換成了ABAP,然而藉助Destination進行第三方服務調用的思路仍然不變。

Jerry先把正確答案公佈出來,在SAP Cloud Platform ABAP編程環境訪問第三方服務的代碼以下:

clipboard6,6

能夠看到其思路就是經過CL_HTTP_DESTINATION_PROVIDER這個雲端的Destination工廠類,拿到Destination實例,而後基於該實例建立雲端上的ABAP HTTP客戶端實例。工廠類生產Destination實例須要兩個參數:

  • i_name
  • i_service_instance_name

根據這個方法的接口註釋,這兩個參數分別爲Destination的名稱和Service instance的名稱。下面Jerry介紹如何得到這兩個參數的值。

clipboard7,7

在SAP Cloud Platform Service Marketplace裏建立一個新的Destination實例:

clipboard8,8
clipboard9,9
clipboard10,10

咱們把新建的實例取名爲DestService,而後再基於該實例建立一個Destination配置,這個配置就比如咱們在ABAP On-Premises的SM59事務碼裏建立的Destination:

clipboard11,11

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

clipboard12,12

點擊Check Connection,確保該Destination指向的URL能夠訪問:

clipboard13,13

而後點擊Open Dashboard,打開這個SAP Cloud Platform ABAP實例的Fiori界面:

clipboard14,14

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

clipboard15,15
clipboard16,16

須要爲新建的Communication Arrangement選擇一個Communication Scenario,這裏我選擇SAP標準發佈的專門用於CloudFoundry環境同第三方服務進行集成的場景,ID爲SAP_COM_0276:

clipboard17,17

建立Communication Arrangement時還要維護Service Key信息:

clipboard18,18

這個Service Key的信息能夠從Destination實例列表的Service Key維護界面得到:

clipboard19,19

在建立好的Communication Arrangement裏,維護Service Instance Name的值爲jerry-service-instance, 這也就是ABAP代碼裏傳給工廠方法的第二個參數。

clipboard20,20

執行這個ABAP類:

clipboard21,21

得到指望的輸出:

clipboard22,22

感謝閱讀。

要獲取更多Jerry的原創文章,請關注公衆號"汪子熙":
公衆號截圖

相關文章
相關標籤/搜索