SAP调用api

发布于:2025-06-22 ⋅ 阅读:(14) ⋅ 点赞:(0)

之前是把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.


网站公告

今日签到

点亮在社区的每一天
去签到