有些第三方系統創建的鏈接,參數我們無法通過PO連接,就直接采用直連的方式:IF_HTTP_CLIENT實現類
比如這種方式傳參:

此時就需要采用最簡單直接的方式了:直連
1.首先查看外部系統API,輸入傳出參數結構。
(1)若輸入結構不為JSON格式,可通過:request->set_form_field方法直接傳參;
(2)若輸入參數為JSON格式,可通過REQUEST->SET_CDATA設置入參,只不過這里的JSON是需要我們按照API自己去拼接的;
(3)若傳入參數為URL后的,直接在URL后拼接就好了;
(4)傳出參數也需要根據結構去定義,結構對應第三方系統的集合{ },表對應那邊的數組[ ],字段類型為STRING;
參考實例:
DATA lv_url TYPE string.
DATA lv_http_client TYPE REF TO if_http_client.
DATA lv_jsonstr TYPE string.
DATA lv_token TYPE string.
DATA l_sysubrc LIKE sy-subrc.
DATA l_error_text TYPE string.
DATA lv_json TYPE string.
“字段名與外部系統保持一致
TYPES: BEGIN OF ty_dep,
originalids TYPE string,
leadertype TYPE string,
END OF ty_dep.
DATA:lt_dep TYPE TABLE OF ty_dep.
TYPES:BEGIN OF ty_org,
name TYPE string,
code TYPE string,
departmentleaders LIKE lt_dep,
END OF ty_org.
DATA:lt_org TYPE TABLE OF ty_org.
DATA:BEGIN OF gt_bsorg,
total TYPE string,
code TYPE string,
message TYPE string,
items LIKE lt_org, ”內表
END OF gt_bsorg.
“根據項目中的地址來賦值:若參數需賦值在URL中,可直接拼接
CONCATENATE 'https:*************** ”INTO lv_url.
*創建客戶端請求
CALL METHOD cl_http_client=>create_by_url
EXPORTING
url = lv_url
* proxy_host =
* proxy_service =
* ssl_id =
* sap_username =
* sap_client =
IMPORTING
client = lv_http_client
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4.
IF sy-subrc <> 0.
* RAISE createservicefailed.
ENDIF.
" 設置編碼格式
* CALL METHOD lv_http_client->request->set_header_field
* EXPORTING
* name = 'Content-Type'
*VALUE = 'text/html;charset=utf-8'. "發送字符串時只能用utf-8編碼/XML
** value = 'application/x-www-form-urlencoded'. "x-www-form
value = 'application/json;charset=utf-8'. "JSON 默認格式
" 若需要傳TOKEN
CONCATENATE 'Bearer' ls_token INTO lv_token SEPARATED BY ' '.
* 設置token
CALL METHOD lv_http_client->request->set_header_field
EXPORTING
name = 'Authorization'
value = lv_token. "傳Token
* 設置方法
CALL METHOD lv_http_client->request->set_header_field
EXPORTING
name = '~request_method'
value = 'GET'. “POST GET.....
* 設置入參JSON
* CALL METHOD L_HTTP_CLIENT->REQUEST->SET_CDATA
* EXPORTING
* DATA = LV_JSON.
* 設置入參,一般傳參
* CALL METHOD lv_http_client->request->set_form_field
* EXPORTING
* name = 'app_id' ”入參字段名-外部系統
* value = lv_appid.
* 發送請求
CALL METHOD lv_http_client->send
* EXPORTING
* timeout = CO_TIMEOUT_DEFAULT
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3
http_invalid_timeout = 4
OTHERS = 5.
IF sy-subrc <> 0.
c_msg = '發送HTTP失敗,檢查連接'.
ENDIF.
IF c_msg IS INITIAL.
* 讀取遠程服務返回的處理過結果。
CALL METHOD lv_http_client->receive
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3
OTHERS = 4.
IF sy-subrc <> 0.
c_msg = '讀取HTTP失敗,檢查連接'.
l_sysubrc = sy-subrc.
* 返回錯誤連接文本
CALL METHOD lv_http_client->get_last_error
IMPORTING
code = l_sysubrc
message = l_error_text.
ENDIF.
* 獲取數據 JSON格式
CALL METHOD lv_http_client->response->if_http_entity~get_cdata
* EXPORTING
* offset = 0
* length = -1
* virus_scan_profile = '/SIHTTP/HTTP_UPLOAD'
* vscan_scan_always = SPACE
RECEIVING
data = lv_jsonstr. ”返回JSON
*JSON -> ABAP
CALL METHOD /ui2/cl_json=>deserialize
EXPORTING
json = lv_jsonstr
pretty_name = 'X'
CHANGING
data = gt_bsorg. "gt_bsorg為接收結構內表
ENDIF.
* 關閉
CALL METHOD lv_http_client->close( ).
“此時數據已經全部傳輸到gt_bsorg表中
注意:
若對方是HTTPS,需要將對方證書導入SAP中,否則我們無法訪問,可讓BASIS處理,對於HTTP的不需要關注
————————————————
版權聲明:本文為CSDN博主「SAP.單刀赴會」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_43734184/article/details/118993452
