SAP使用HTTP请求网络放行

复制代码
*&---------------------------------------------------------------------*
*& 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,目标端口号

相关推荐
钓鱼的肝2 小时前
梳理(1-5)
c++·经验分享·笔记·算法·青少年编程
江湖人称菠萝包4 小时前
【Qt】《Qt 5.9 C++开发指南》笔记-Chapter2-GUI应用程序设计基础
笔记·qt·qt5
职豚求职小程序4 小时前
中华财险27届校招笔试[特殊字符]考情速览攻略
笔记
钓鱼的肝5 小时前
csp-j-s总结(2)
c++·经验分享·笔记·算法·青少年编程
谢白羽6 小时前
在4×B300用SGLang部署DeepSeek-V4.1 Flash优化实录
笔记·python·llm·llama·sglang
江湖人称菠萝包6 小时前
【Qt】《Qt 5.9 C++开发指南》笔记-Chapter1-认识Qt
笔记·qt·qt5
梦回初遇勿扰佳人7 小时前
《半小时漫画世界史》 -- 读后笔记
笔记
1314lay_10078 小时前
SAP 接口调用 500 Native SSL Error ,导入证书
经验分享·笔记
百里香酚兰8 小时前
【Unity学习笔记】如何把粉色Prefab还原
笔记·学习·unity