0
点赞
收藏
分享

微信扫一扫

sap中用url读取解析数据

FUNCTION zfi_epib_mt_cmb_reques.
  *"----------------------------------------------------------------------
  *"*"本地接口:
  *" IMPORTING
  *" VALUE(INPUT) TYPE ZFICO_EPIC004 OPTIONAL
  *" VALUE(BUKRS) TYPE BUKRS OPTIONAL
  *" EXPORTING
  *" VALUE(O_ERROR) TYPE CHAR100
  *" REFERENCE(OUTPUT) TYPE ZFICO_EPIC004C
  *" TABLES
  *" TABLE TYPE ZFICO_EPIC004E OPTIONAL
  *"----------------------------------------------------------------------
  DATA msg TYPE string.
  DATA: lo_oref TYPE REF TO cx_st_error.
  DATA: lv_url TYPE string.
  DATA: lo_http_client TYPE REF TO if_http_client.
  DATA: binary_msg TYPE string.
  DATA: lv_len TYPE i,
  lv_msgtx TYPE string.
  DATA: lv_respon TYPE string.
  TRY.
  CALL TRANSFORMATION zfico0004a
  SOURCE output=input
  RESULT XML msg.
  REPLACE ALL OCCURRENCES OF REGEX '' IN msg WITH '$1>'.
  REPLACE 'utf-16' IN msg WITH 'GBK'.
  CATCH cx_st_error INTO lo_oref .
  ENDTRY.
  binary_msg=cl_abap_codepage=>convert_to( source=msg codepage='GBK' ).
  SELECT SINGLE url FROM zfit0001a
  INTO lv_url
  WHERE zyhsx='CMB'
  AND bukrs=bukrs.
  "创建客户端请求
  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/xml; charset=GBK' ).
  "设定调用服务
  lo_http_client->request->set_method( if_http_request=>co_request_method_post ).
  "设置待传输内容
  lv_len=strlen( binary_msg ).
  CALL METHOD lo_http_client->request->set_cdata
  EXPORTING
  data=binary_msg
  offset=0
  length=lv_len.
  "发送请求
  lo_http_client->send( EXCEPTIONS http_communication_failure=1
  http_invalid_state=2 ).
  IF sy-subrc <> 0.
  "操作失败,获取失败原因
  "lv_subrc=sy-subrc.
  lo_http_client->get_last_error( IMPORTING message=lv_msgtx ).
  * lv_msgty='E'.
  o_error=lv_msgtx.
  EXIT.
  ENDIF.
  "读取远程服务返回的处理过结果。
  lo_http_client->receive( EXCEPTIONS http_communication_failure=1
  http_invalid_state=2
  http_processing_failed=3 ).
  IF sy-subrc <> 0 .
  lo_http_client->get_last_error( IMPORTING message=lv_msgtx ).
  * lv_msgty='E'.
  o_error=lv_msgtx.
  EXIT.
  ELSE.
  "读取返回返回内容
  CLEAR lv_respon.
  lv_respon=lo_http_client->response->get_cdata( ).
  TRY .
  CALL TRANSFORMATION zfico0004b
  SOURCE XML lv_respon
  RESULT output=output
  root=table[].
  CATCH cx_st_error INTO lo_oref .
  ENDTRY.
  ENDIF.
  ENDFUNCTION.

举报

相关推荐

0 条评论