SAP WEBAPI接口 发送方

前言

在与外部系统的交互中,API是常用的一种接口通讯手段,下面以发送方为例,将数据发送到外部系统系统,并接收外部系统的返回值。

发送的逻辑代码

*&---------------------------------------------------------------------*
*&      Form  frm_call_webapi
*&---------------------------------------------------------------------*
*       调用webapi
*----------------------------------------------------------------------*
*  -->  iv_json_input        输入json字符串
*  -->  iv_service_ur        服务地址(http://****)
*  <--  ev_json_output       输出json字符串
*----------------------------------------------------------------------*
FORM frm_call_webapi USING iv_json_input iv_service_url CHANGING ev_json_output.

  DATA: lt_log TYPE TABLE OF ztsdiflog, "日志表
        ls_log TYPE ztsdiflog.
  DATA: l_date TYPE sy-datum.

  DATA: lv_guid TYPE guid_32.

  DATA: lo_http_client TYPE REF TO if_http_client,

        gv_json_out    TYPE string,

        lv_url         TYPE string,

        lv_len         TYPE i.


  lv_url = iv_service_url.

  CONSTANTS: c_funname TYPE rs38l_fnam VALUE 'YOUR_FUNCTION_NAME'.

  "创建客户端请求

  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 <> 0.

    "lv_subrc = sy-subrc.

    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH

               sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

    EXIT.

  ENDIF.


  "设定传输请求内容格式以及编码格式

  lo_http_client->request->set_content_type( content_type = 'application/json; charset=utf-8' ).


  "设定调用服务

  lo_http_client->request->set_method( if_http_request=>co_request_method_post ).


  "设置待传输内容长度

  lv_len = strlen( iv_json_input ).


  "设置调用方法

  CALL METHOD lo_http_client->request->set_header_field
    EXPORTING
      name  = '~request_method'
      value = 'POST'.

  "设置传入字符串

  CALL METHOD lo_http_client->request->set_cdata
    EXPORTING
      data   = iv_json_input
      offset = 0
      length = lv_len.

  "发送数据

  lo_http_client->send(

    EXCEPTIONS

      http_communication_failure = 1

      http_invalid_state         = 2 ).
*  "日志记录
  IF iv_json_input IS NOT INITIAL.
    "UUID
    TRY.
        CALL METHOD cl_system_uuid=>if_system_uuid_static~create_uuid_x16
          RECEIVING
            uuid = ls_log-ehfnd_db_key.
      CATCH cx_uuid_error.

    ENDTRY.
    ls_log-funcname = c_funname.
    ls_log-create_date_s = sy-datum.
    ls_log-create_time_s = sy-uzeit.
    ls_log-parameter1 = iv_json_input.

    INSERT INTO ztsdiflog VALUES ls_log.

  ENDIF.


  "接收返回

  lo_http_client->receive(

    EXCEPTIONS

      http_communication_failure = 1

      http_invalid_state         = 2

      http_processing_failed     = 3 ).

  "提取返回字符串

  ev_json_output = lo_http_client->response->get_cdata( ).

  "关闭http服务
  CALL METHOD lo_http_client->close.

  "将字符串中的回车符替换,否则abap将会识别为#

  REPLACE ALL OCCURRENCES OF REGEX '\n' IN ev_json_output WITH space.

*  "日志记录
  IF ev_json_output IS NOT INITIAL.
    ls_log-create_date_e = sy-datum.
    ls_log-create_time_e = sy-uzeit.
    UPDATE ztsdiflog SET
    parameter2 = ev_json_output
    create_date_e = ls_log-create_date_e
    create_time_e = ls_log-create_time_e
    WHERE ehfnd_db_key = ls_log-ehfnd_db_key.
  ENDIF.
  "删除3个月以上的日志数据
  l_date = sy-datum - 90.
  DELETE FROM ztsdiflog WHERE create_date_e < @l_date.
ENDFORM.

测试API接口

直接在浏览器打开如下网址即可进行测试,也可直接安装postman进行测试。
https://web.postman.co/workspace/My-Workspace~8bc7708f-5284-46ad-87f9-ca0cf6a86b35/request/create?requestId=edc042a2-434b-4082-aa02-139f5999048f

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值