欢迎来到萧静默的博客

书山有路勤为径,学海无涯苦作舟。

SAP直发数据到外围系统

** gv_json
  DATA ztrexjson TYPE REF TO cl_trex_json_serializer.
  DATA ztrexjsonret TYPE REF TO zcl_trex_json_deserializer.
  DATA: http_client TYPE REF TO if_http_client .
  DATA: z_len TYPE i,
        z_sysid TYPE sysysid.

* URL地址
  DATA: z_url TYPE string .
  DATA: z_url1 TYPE string .

* 返回的MEAASGE
  DATA: z_return TYPE string,
        lv_msg   TYPE string.
  DATA: lv_str TYPE char4 .

  CLEAR:gv_json,gv_msg,gt_send[].
  LOOP AT it_data INTO iw_data.
    ref_exit_zero:iw_data-MATNR.
    gs_send-material_Code  = iw_data-matnr.
    gs_send-cCount   = iw_data-menge.
    gs_send-material_Name  = iw_data-maktx.
    CONCATENATE iw_data-budat+0(4) '-' iw_data-budat+4(2) '-' iw_data-budat+6(2) INTO gs_send-cDate.
    APPEND gs_send TO gt_send.
    CLEAR: gs_send,gv_msg.
  ENDLOOP.

  CHECK gt_send[] IS NOT INITIAL.

  gv_json = zcl_json=>serialize( data = gt_send[] compress = abap_true pretty_name = zcl_json=>pretty_mode-camel_case ).
  CHECK gv_json IS NOT INITIAL.

  CHECK gv_json IS NOT INITIAL.
  z_sysid = sy-sysid.
  z_len = STRLEN( gv_json ) .

  SELECT SINGLE zurl zurl1 INTO (z_url,z_url1) FROM ztpm002
     WHERE progname = 'ZPP_SAP2MES_FH' AND zsysid = z_sysid
     AND sys_detail = 'MES'.

  CONCATENATE z_url z_url1 INTO z_url.

  CHECK z_url IS NOT INITIAL.

  "创建客户端请求
  CALL METHOD cl_http_client=>create_by_url
    EXPORTING
      url    = z_url
    IMPORTING
      client = http_client.

  http_client->propertytype_logon_popup = http_client->co_enabled .

  CALL METHOD http_client->request->set_header_field
    EXPORTING
      name  = 'CONTENT-TYPE'
      value = 'APPLICATION/JSON'.

  CALL METHOD http_client->request->set_method( 'POST' )."PUT

  "设置待传输内容
  CALL METHOD http_client->request->set_cdata
    EXPORTING
      data   = gv_json
      offset = 0
      length = z_len.

  "发送请求
  CALL METHOD http_client->send
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2
      http_invalid_timeout       = 4
      http_processing_failed     = 3
      OTHERS                     = 5.
  IF sy-subrc <> 0 .
    http_client->get_last_error( IMPORTING message =  lv_msg ).
  ENDIF.

  "读取远程服务返回的处理过结果。
  CALL METHOD http_client->receive
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2
      http_processing_failed     = 3.
  IF sy-subrc <> 0 .
    http_client->get_last_error( IMPORTING message = lv_msg ).
  ENDIF.

* 获取返回的数据
  z_return = http_client->response->get_cdata( ).

  CALL METHOD http_client->close.

  IF z_return IS NOT INITIAL AND z_return+0(1) = '{' .
    REPLACE ALL OCCURRENCES OF REGEX '"(\w+)"(\s*:\s*)'
               IN z_return  WITH '$1$2'.
    CREATE OBJECT ztrexjsonret.
   CALL METHOD ztrexjsonret->deserialize(
          EXPORTING json = z_return
          IMPORTING abap = gs_return ).
*    CLEAR:lw_return.
*    CALL METHOD ztrexjsonret->deserialize
*      EXPORTING
*        json = lo_output-rtn_msg
*      IMPORTING
*        abap = lw_return.
  ENDIF.

  "写日志
  IF gs_return-success = '1'.
    LOOP AT it_data INTO iw_data.
      iw_data-status = 'S'.
      iw_data-RESULTDATA = '操作成功'.
      iw_data-zcdte = sy-datum.
      iw_data-zcime = sy-uzeit.
      iw_data-zcnme = sy-uname.
      MOVE-CORRESPONDING iw_data TO gs_ztpp072.
      APPEND gs_ztpp072 TO gt_ztpp072.
      MODIFY it_data FROM iw_data.
    ENDLOOP.
  ELSEIF gs_return-success = '0'.
    LOOP AT it_data INTO iw_data.
      iw_data-status = 'E'.
      iw_data-RESULTDATA = gs_return-msg.
      iw_data-zcdte = sy-datum.
      iw_data-zcime = sy-uzeit.
      iw_data-zcnme = sy-uname.
      MOVE-CORRESPONDING iw_data TO gs_ztpp072.
      APPEND gs_ztpp072 TO gt_ztpp072.
      MODIFY it_data FROM iw_data.
    ENDLOOP.
  ENDIF.
  IF gt_ztpp072[] IS NOT INITIAL.
    MODIFY ztpp072 FROM TABLE gt_ztpp072[].
    COMMIT WORK.
  ENDIF.

 摘自:https://blog.csdn.net/beyond911/article/details/120613497

posted @ 2025-08-29 13:57  萧静默  阅读(29)  评论(0)    收藏  举报