之前是把SAP程序封裝成api,然后又接到了需求是sap調用其他api,直接上代碼吧
?
FUNCTION ZRFC_PP_016.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(CHARG) TYPE CHARG_D
*" EXPORTING
*" VALUE(STATUS) TYPE STRING
*" VALUE(CODE) TYPE STRING
*" VALUE(MESSAGE) TYPE STRING
*" VALUE(DATA) TYPE STRING
*" VALUE(LOCATION) TYPE STRING
*"----------------------------------------------------------------------DATA:lo_http_client TYPE REF TO if_http_client,lv_json_out TYPE string,lv_json_in TYPE string,lv_url TYPE string,lv_len TYPE i,lv_json TYPE string,lv_json1 TYPE string,lv_json_list TYPE string.TYPES:tt_string_list TYPE TABLE OF string WITH DEFAULT KEY,BEGIN OF ty_charg,systemlot TYPE tt_string_list,END OF ty_charg.DATA:ls_charg TYPE ty_charg." 1. 定義 list 的行結構TYPES: BEGIN OF ty_list,systemLot TYPE string, " 批次號location TYPE string, " 位置END OF ty_list." 2. 定義 list 內表類型(兼容舊版本)TYPES: tt_list TYPE STANDARD TABLE OF ty_list WITH DEFAULT KEY." 3. 定義 data 子結構TYPES: BEGIN OF ty_data,count TYPE i, " 數量list TYPE tt_list, " 列表數據END OF ty_data." 4. 定義主結構TYPES: BEGIN OF ty_json,status TYPE abap_bool, " 狀態 (true/false)code TYPE string, " 狀態碼message TYPE string, " 消息文本data TYPE ty_data, " 數據內容END OF ty_json." 5. 聲明數據結構DATA: ls_json TYPE ty_json.DATA: ls_item TYPE ty_list. " 使用之前定義的 list 行類型*填入URL:lv_url = '這里填寫api'.*1)創建客戶端請求CALL METHOD cl_http_client=>create_by_urlEXPORTINGurl = lv_urlIMPORTINGclient = lo_http_clientEXCEPTIONSargument_not_found = 1plugin_not_active = 2internal_error = 3OTHERS = 4.IF sy-subrc NE 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITHsy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.*2)轉換成JSON格式APPEND charg TO ls_charg-systemlot.CALL METHOD zcl_json=>serializeEXPORTINGdata = ls_chargRECEIVINGr_json = lv_json.*3)設定傳輸請求內容格式以及編碼格式CALL METHOD lo_http_client->request->set_header_fieldEXPORTINGname = 'content-Type'value = 'application/json; charset=utf-8'.*4)設定調用方式CALL METHOD lo_http_client->request->set_method( 'POST' ).*5)設置傳入字符串lv_json_out = lv_json.lv_len = STRLEN( lv_json_out ).CALL METHOD lo_http_client->request->set_cdataEXPORTINGdata = lv_json_outoffset = 0length = lv_len.*6)發送數據lo_http_client->send(EXCEPTIONShttp_communication_failure = 1http_invalid_state = 2 ).*7)接收數據CALL METHOD lo_http_client->receiveEXCEPTIONShttp_communication_failure = 1http_invalid_state = 2http_processing_failed = 3.*8)讀取數據lv_json = lo_http_client->response->get_cdata( ).*9)解析數據CALL METHOD zcl_json=>deserializeEXPORTINGjson = lv_jsonCHANGINGdata = ls_json.IF ls_json-status IS NOT INITIAL.status = ls_json-status.ENDIF.IF ls_json-code IS NOT INITIAL.code = ls_json-code.ENDIF.IF ls_json-message IS NOT INITIAL.message = ls_json-message.ENDIF.IF ls_json-data IS NOT INITIAL.
* data = ls_json-data.
*取值
* location = ls_json-data-list-location.LOOP AT ls_json-data-list INTO ls_item.location = ls_item-location.ENDLOOP.ENDIF.ENDFUNCTION.