*&---------------------------------------------------------------------*
*& Report ZHF_TEST4
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zhf_test4.
DATA ls_res TYPE zsfi0007b.
PERFORM frm_get_kdmat USING ls_res.
BREAK-POINT.
*&---------------------------------------------------------------------*
*& Form FRM_GET_KDMAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM frm_get_kdmat USING p_ls_res TYPE zsfi0007b.
DATA:lv_out_json TYPE string,
lv_resp_json TYPE string.
DATA:lv_error TYPE c, "推送处理状态
lv_message TYPE string.
*OUT_JSON
TYPES: BEGIN OF ty_out_json,
odn TYPE likp-vbeln, ""ODN单号
reserver0 TYPE lips-posnr, ""ODN项次
END OF ty_out_json.
DATA:lt_out_json TYPE TABLE OF ty_out_json,
ls_out_json TYPE ty_out_json.
lt_out_json = VALUE #(
( odn = '8100083168' reserver0 = '10' )
).
READ TABLE lt_out_json INTO ls_out_json INDEX 1.
"转换成json格式
"http://blog.chinaunix.net/uid-571885-id-5055553.html
"compress = abap_true:Skip empty elements
lv_out_json = /ui2/cl_json=>serialize( data = ls_out_json
compress = abap_false
pretty_name = /ui2/cl_json=>pretty_mode-none "全大写
).
*调用接口推送 设置HTTP接口地址
DATA lv_oms_url TYPE string.
SELECT SINGLE url
INTO lv_oms_url
FROM ztcm001
WHERE zinfname = 'ZSDI0201_EDI'.
lv_oms_url = 'https://luxcase-ica.casetekcorp.com:8082/api/iscm/iscmSapOdnApi'.
IF lv_oms_url IS INITIAL.
p_ls_res-mtype = 'E'.
MESSAGE s053(fdt_hrf) INTO lv_message."URL 为空
p_ls_res-msg = lv_message.
RETURN.
ENDIF.
* Call Http Porxy object
DATA: lo_http_client TYPE REF TO if_http_client,
lv_service TYPE string. "调用地址
lv_service = lv_oms_url.
"创建客户端请求
CALL METHOD cl_http_client=>create_by_url
EXPORTING
url = lv_service
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
INTO lv_message.
p_ls_res-mtype = 'E'.
p_ls_res-msg = lv_message.
RETURN.
ENDIF.
"跳过登录提示,匿名访问
lo_http_client->propertytype_logon_popup = lo_http_client->co_disabled.
"设定传输请求内容格式以及编码格式
CALL METHOD lo_http_client->request->set_header_field
EXPORTING
name = 'Content-Type'
value = 'application/JSON'.
"设定调用服务 post
lo_http_client->request->set_method( if_http_request=>co_request_method_post ).
"设置待传输内容
DATA lv_len TYPE i.
lv_len = strlen( lv_out_json ).
CALL METHOD lo_http_client->request->set_cdata
EXPORTING
data = lv_out_json
offset = 0
length = lv_len.
*-Respon 返回 数据结构
TYPES: BEGIN OF ty_data,
sales_no TYPE likp-vbeln, ""ODN单号
reserver0 TYPE lips-posnr, ""ODN项次
item_code TYPE lips-matnr, ""交货料号
customer_part_number TYPE vbap-kdmat, ""客户料号
END OF ty_data.
TYPES:ty_t_data TYPE STANDARD TABLE OF ty_data WITH DEFAULT KEY.
TYPES: BEGIN OF typ_respon_json,
code(3) TYPE c,
msg(255) TYPE c,
data TYPE ty_t_data,
END OF typ_respon_json.
DATA: ls_json_respon TYPE typ_respon_json.
"发送请求
lo_http_client->send(
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2 ).
IF sy-subrc NE 0.
"操作失败,获取失败原因
lo_http_client->get_last_error(
IMPORTING
message = lv_message ).
p_ls_res-mtype = 'E'.
p_ls_res-msg = lv_message.
RETURN.
ENDIF.
"读取远程服务返回的处理过结果。
DATA lv_respon_json TYPE string. "结果返回报文
lo_http_client->receive(
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3 ).
IF sy-subrc NE 0 .
lo_http_client->get_last_error(
IMPORTING
message = lv_message ).
p_ls_res-mtype = 'E'.
p_ls_res-msg = lv_message.
RETURN.
ELSE.
"读取返回内容
lv_respon_json = lo_http_client->response->get_cdata( ).
ENDIF.
IF lv_error IS INITIAL.
IF lv_respon_json IS NOT INITIAL."解析 Json字符串
/ui2/cl_json=>deserialize(
EXPORTING
json = lv_respon_json
CHANGING
data = ls_json_respon ).
ENDIF.
ENDIF.
ENDFORM.
提示错误
failed: NIECONN_REFUSED(-10)

OS01



申请网络放行,需要提供SAP的网络掩码XX.XX.XX.0/24,目标IP,目标端口号
