共計(jì) 2276 個字符,預(yù)計(jì)需要花費(fèi) 6 分鐘才能閱讀完成。
這篇文章主要介紹“ABAP 編程環(huán)境里怎么消費(fèi)第三方服務(wù)”,在日常操作中,相信很多人在 ABAP 編程環(huán)境里怎么消費(fèi)第三方服務(wù)問題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”ABAP 編程環(huán)境里怎么消費(fèi)第三方服務(wù)”的疑惑有所幫助!接下來,請跟著丸趣 TV 小編一起來學(xué)習(xí)吧!
在 ABAP On-Premises 環(huán)境下,使用 ABAP 編程消費(fèi)第三方服務(wù),相信很多 ABAP 顧問都已經(jīng)非常熟悉了,無非就是使用 CL_HTTP_CLIENT 或者 CL_REST_HTTP_CLIENT 來發(fā)送和接收 HTTP 請求。
下圖這短短的 38 行代碼,展示了如何使用 ABAP 工具類 CL_HTTP_CLIENT 去訪問百度首頁并拿到回復(fù)。
從百度返回的響應(yīng),通過方法 GET_CDATA 獲得,存儲于變量 rv_data 內(nèi):
當(dāng)然如果我們是做正式的產(chǎn)品開發(fā)的話,一般不會把第三方服務(wù)的 URL 硬編碼在應(yīng)用程序里,而是通過事務(wù)碼 SM59 創(chuàng)建的 Destination 管理第三方服務(wù)的 endpoint,然后把 Destination 名稱存儲于配置表里,這樣使得第三方服務(wù)的 URL 同應(yīng)用代碼解除耦合關(guān)系。
下圖是一個例子,我在 SM59 事務(wù)碼里維護(hù)了一個指向某 C4C 系統(tǒng)的 Destination,取名為 C4C:
然后在 ABAP 代碼里使用 cl_http_client= create_by_destination 創(chuàng)建 HTTP 工具類的實(shí)例。后續(xù)操作同使用 cl_http_client= create_by_url 構(gòu)造實(shí)例的代碼一致,這里不再重復(fù)。
如果我們直接把 On-Premises 環(huán)境下的這些 ABAP 代碼搬到 SAP Cloud Platform 的 ABAP 環(huán)境里,會遇到很多語法錯誤:
原因在 Jerry 的第一篇介紹 SAP 云平臺 ABAP 編程環(huán)境的文章 在 SAP 云平臺 ABAP 編程環(huán)境上編寫第一段 ABAP 程序 里就已經(jīng)提到,云端的 ABAP 編程模型支持的只是 ABAP 編程語言的一個子集,我們只能使用 SAP 開放的白名單里的資源,這個白名單即上圖左邊 Released Objects 里面包含的內(nèi)容。
因?yàn)?Jerry 在 On-Premises 環(huán)境里使用過的 CL_HTTP_CLIENT, CL_REST_HTTP_CLIENT, IF_HTTP_CLIENT 等 ABAP 類和接口均不在白名單內(nèi),故無法在 ABAP 云端環(huán)境使用。
既然在云端了,我們就得使用云端的編程范式。
Jerry 去年的文章使用 Java+SAP 云平臺 +SAP Cloud Connector 調(diào)用 ABAP On-Premise 系統(tǒng)里的函數(shù) 里曾經(jīng)介紹過運(yùn)行在云端的 Java 應(yīng)用如何通過 SAP 云平臺上創(chuàng)建的 Destination 來調(diào)用 ABAP On-Premises 系統(tǒng)里的 RFC 函數(shù)。如今我們在云上運(yùn)行的應(yīng)用的編程語言從 Java 換成了 ABAP,然而借助 Destination 進(jìn)行第三方服務(wù)調(diào)用的思路仍然不變。
Jerry 先把正確答案公布出來,在 SAP Cloud Platform ABAP 編程環(huán)境訪問第三方服務(wù)的代碼如下:
可以看到其思路就是通過 CL_HTTP_DESTINATION_PROVIDER 這個云端的 Destination 工廠類,拿到 Destination 實(shí)例,然后基于該實(shí)例創(chuàng)建云端上的 ABAP HTTP 客戶端實(shí)例。工廠類生產(chǎn) Destination 實(shí)例需要兩個參數(shù):
i_name
i_service_instance_name
根據(jù)這個方法的接口注釋,這兩個參數(shù)分別為 Destination 的名稱和 Service instance 的名稱。下面 Jerry 介紹如何獲得這兩個參數(shù)的值。
在 SAP Cloud Platform Service Marketplace 里創(chuàng)建一個新的 Destination 實(shí)例:
我們把新建的實(shí)例取名為 DestService,然后再基于該實(shí)例創(chuàng)建一個 Destination 配置,這個配置就好比我們在 ABAP On-Premises 的 SM59 事務(wù)碼里創(chuàng)建的 Destination:
Destination 我取名為 ZJERRY_API, 這就是前面提到的工廠方法里第一個參數(shù) i_name 值的由來。
點(diǎn)擊 Check Connection,確保該 Destination 指向的 URL 可以訪問:
然后點(diǎn)擊 Open Dashboard,打開這個 SAP Cloud Platform ABAP 實(shí)例的 Fiori 界面:
點(diǎn)擊 Launchpad tile,創(chuàng)建一個新的 Communication Arrangements:
需要為新建的 Communication Arrangement 選擇一個 Communication Scenario,這里我選擇 SAP 標(biāo)準(zhǔn)發(fā)布的專門用于 CloudFoundry 環(huán)境同第三方服務(wù)進(jìn)行集成的場景,ID 為 SAP_COM_0276:
創(chuàng)建 Communication Arrangement 時還要維護(hù) Service Key 信息:
這個 Service Key 的信息可以從 Destination 實(shí)例列表的 Service Key 維護(hù)界面獲得:
在創(chuàng)建好的 Communication Arrangement 里,維護(hù) Service Instance Name 的值為 jerry-service-instance, 這也就是 ABAP 代碼里傳給工廠方法的第二個參數(shù)。
執(zhí)行這個 ABAP 類:
獲得期望的輸出:
到此,關(guān)于“ABAP 編程環(huán)境里怎么消費(fèi)第三方服務(wù)”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注丸趣 TV 網(wǎng)站,丸趣 TV 小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!