之前是把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_url
EXPORTING
url = lv_url
IMPORTING
client = lo_http_client
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4.
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH
sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
*2)转换成JSON格式
APPEND charg TO ls_charg-systemlot.
CALL METHOD zcl_json=>serialize
EXPORTING
data = ls_charg
RECEIVING
r_json = lv_json.
*3)设定传输请求内容格式以及编码格式
CALL METHOD lo_http_client->request->set_header_field
EXPORTING
name = '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_cdata
EXPORTING
data = lv_json_out
offset = 0
length = lv_len.
*6)发送数据
lo_http_client->send(
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2 ).
*7)接收数据
CALL METHOD lo_http_client->receive
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3.
*8)读取数据
lv_json = lo_http_client->response->get_cdata( ).
*9)解析数据
CALL METHOD zcl_json=>deserialize
EXPORTING
json = lv_json
CHANGING
data = 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.