SAP调用api
之前是把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.