SAP調用RestfulApi接口POST數據到外部系統


作者:明光爍亮
出處:http://www.cnblogs.com/hezhongxun/
微信號:MMGGSSLL330 歡迎加好友一起交流SAP! 視頻資料共享。
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

 

之前只寫了get外部接口的數據,今天剛好做了個post的接口就隨便記錄下。

詳細的業務就不多講了,直接上方法和代碼吧。

外部已經提供了一個post地址,而且要求參數也添加到地址后面,地址如下:

'http://192.168.0.XX:XXX/XXX/fileAction.do?funid=erp_ws&eventcode=syncData&nousercheck=1&user_id=SAP&type=2&data='

數據是以json的方式寫入地址的。

使用RESTFUL接口post數據的方法順序是:

1.創建http服務

2.設置http request的參數

3.把數據轉換成json

4.發送http請求

5.接收返回的數據。

代碼如下:

FUNCTION z_wms_delete_dn.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  EXPORTING
*"     VALUE(RETURN) TYPE  ZSTRU_WMS_RETURN
*"  TABLES
*"      VLDATA STRUCTURE  ZTSD002 OPTIONAL
*"----------------------------------------------------------------------

  DATA: lc_http_client  TYPE REF TO if_http_client,
        l_url           TYPE string,
        l_json_data     TYPE string,
        l_result_string TYPE string,
        l_result        TYPE zstru_wms_return.

  DATA: BEGIN OF ls_vldata.
          INCLUDE STRUCTURE ztsd002.
          DATA: loekz TYPE char1,
        END OF ls_vldata.

  DATA: lt_vldata LIKE TABLE OF ls_vldata.

  DATA lc_json TYPE REF TO cl_fdt_json_serializer. "json格式轉換

  DATA: lt_zwms_dn_delete TYPE TABLE OF zwms_dn_delete."記錄數據

  INCLUDE fbgenmac.
  fbgenmac 'Z_WMS_DELETE_DN'.

  LOOP AT vldata.
    ls_vldata-vbeln = vldata-vbeln.
    ls_vldata-posnr = vldata-posnr.
    ls_vldata-loekz = 'L'.
    APPEND ls_vldata TO lt_vldata.
    CLEAR: ls_vldata.

    APPEND INITIAL LINE TO lt_zwms_dn_delete ASSIGNING FIELD-SYMBOL(<fs_wms>).
    <fs_wms>-vbeln = vldata-vbeln.
    <fs_wms>-posnr = vldata-posnr.
    <fs_wms>-erdat = sy-datum.
    <fs_wms>-erzet = sy-uzeit.
  ENDLOOP.

  CASE sy-mandt.
    WHEN '100'.
      l_url = 'http://xxx.xxx.xxx.xxx/xx/fileAction.do?funid=erp_ws' &&
              '&eventcode=syncData&nousercheck=1&user_id=SAP&type=2&data='.
    WHEN '800'.
      l_url = 'http://xxx.xxx.xxx.xxx/xx/fileAction.do?funid=erp_ws' &&
              '&eventcode=syncData&nousercheck=1&user_id=SAP&type=2&data='.
  ENDCASE.

*****轉換json格式
  CREATE OBJECT lc_json.

  CALL METHOD lc_json->serialize_int
    EXPORTING
      data   = lt_vldata
    RECEIVING
      r_json = l_json_data.

  TRANSLATE l_json_data TO LOWER CASE.
CONCATENATE l_url l_json_data INTO l_url. *****創建http服務 CALL METHOD cl_http_client=>create_by_url EXPORTING url = l_url IMPORTING client = lc_http_client EXCEPTIONS argument_not_found = 1 plugin_not_active = 2 internal_error = 3 OTHERS = 4. IF sy-subrc <> 0. EXIT. ENDIF. CALL METHOD lc_http_client->request->set_header_field EXPORTING name = 'Content-Type' value = 'application/JSON; charset=utf-8'. CALL METHOD lc_http_client->request->set_method( 'POST' ). *****發送http服務 CALL METHOD lc_http_client->send EXCEPTIONS http_communication_failure = 1 http_invalid_state = 2 http_processing_failed = 3 http_invalid_timeout = 4 OTHERS = 5. IF sy-subrc <> 0. EXIT. ENDIF. *****接收返回數據 CALL METHOD lc_http_client->receive EXCEPTIONS http_communication_failure = 1 http_invalid_state = 2 http_processing_failed = 3 OTHERS = 4. l_result_string = lc_http_client->response->get_cdata( ).
*****解析JSON數據
CALL METHOD lc_json->deserialize_int EXPORTING json = l_result_string CHANGING data = l_result. return = l_result.
****最后我只是記錄到自建表
LOOP AT lt_zwms_dn_delete ASSIGNING FIELD-SYMBOL(<fs_dn>). <fs_dn>-success = l_result-success. <fs_dn>-message = l_result-message. ENDLOOP. MODIFY zwms_dn_delete FROM TABLE lt_zwms_dn_delete. IF sy-subrc = 0. COMMIT WORK. ELSE. ROLLBACK WORK. ENDIF. ENDFUNCTION.

 其實HTTP還是挺復雜的,只是sap都封裝了很多方法,以后有時間可以研究下http方面的知識。

作者:明光爍亮
出處:http://www.cnblogs.com/hezhongxun/
微信號:MMGGSSLL330 歡迎加好友一起交流SAP! 視頻資料共享。
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM