前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >matinal:SAP ABAP http集成的几种不同场景举例

matinal:SAP ABAP http集成的几种不同场景举例

作者头像
matinal
修改2023-11-20 15:58:57
1660
修改2023-11-20 15:58:57
举报
文章被收录于专栏:SAP TechnicalSAP Technical

看我文章发给我看。跟我玩绕口令呢。

(某xx系统别总看我文章发给我们),我用得着你网上找文章吗。

1. http post方式发送数据给对方系统

代码语言:javascript
复制
DATA: lo_http_client   TYPE REF TO if_http_client,
      lv_service       TYPE string,
      lv_result        TYPE string,
      lo_ixml          TYPE REF TO if_ixml,
      lo_streamfactory TYPE REF TO if_ixml_stream_factory,
      lo_istream       TYPE REF TO if_ixml_istream,
      lo_document      TYPE REF TO if_ixml_document,
      lo_parser        TYPE REF TO if_ixml_parser.

lv_service = 'http://...'.

cl_http_client=>create_by_url(
  EXPORTING
    url                = lv_service
  IMPORTING
    client             = lo_http_client
  EXCEPTIONS
    argument_not_found = 1
    plugin_not_active  = 2
    internal_error     = 3
    OTHERS             = 4 ).

lo_http_client->propertytype_logon_popup = lo_http_client->co_disabled.
CALL METHOD lo_http_client->authenticate(
  EXPORTING
*   client   = ''
*   proxy_authentication = 'X'
    username = ''
    password = ''
*   LANGUAGE = 'E'
               ).
CALL METHOD lo_http_client->request->set_header_field
  EXPORTING
    name  = 'Content-Type'
    value = 'application/JSON; charset=utf-8'.
CALL METHOD lo_http_client->request->set_method( 'POST' ).

DATA lv_json TYPE string.
DATA: len TYPE i .
lv_json =  '{"key": "name", "value": "name"}, {"key": "phone", "value": "911"}'.
len = strlen( lv_json ) .

CALL METHOD lo_http_client->request->set_cdata
  EXPORTING
    data   = lv_json
    offset = 0
    length = len.

lo_http_client->send(
  EXCEPTIONS
    http_communication_failure = 1
    http_invalid_state         = 2 ).

lo_http_client->receive(
  EXCEPTIONS
    http_communication_failure = 1
    http_invalid_state         = 2
    http_processing_failed     = 3 ).

CLEAR lv_result .
lv_result = lo_http_client->response->get_cdata( ).
lo_ixml = cl_ixml=>create( ).

lo_streamfactory = lo_ixml->create_stream_factory( ).
lo_istream = lo_streamfactory->create_istream_string(
                                 lv_result ).
lo_document = lo_ixml->create_document( ).
lo_parser = lo_ixml->create_parser(
                       stream_factory = lo_streamfactory
                       istream        = lo_istream
                       document       = lo_document ).
lo_parser->parse( ).
CALL METHOD lo_http_client->close.

 2. https 调用ODATA service,插入数据,事物码STRUST添加信任证书

代码语言:javascript
复制
CALL METHOD cl_http_client=>create
  EXPORTING
    host    = 'api15.sapsf.cn'
    service = '443'                       
    scheme  = '2'                        
    ssl_id  = 'ANONYM'             
*   proxy_host    = wf_proxy
*   proxy_service = wf_port
  IMPORTING
    client  = lo_http_client.

lo_http_client->propertytype_logon_popup = lo_http_client->co_disabled.
CALL METHOD lo_http_client->authenticate(
  EXPORTING
*   client               = '110'
*    proxy_authentication = 'X'
    username             = ''
    password             = ''
*   LANGUAGE             = 'E'
                           ).
CALL METHOD lo_http_client->request->set_header_field
  EXPORTING
    name  = '~request_protocol'
    value = 'HTTPS/1.0'.
CALL METHOD lo_http_client->request->set_header_field
  EXPORTING
    name  = '~request_uri'
    value = '/odata/v2/......'.
CALL METHOD lo_http_client->request->set_header_field
  EXPORTING
    name  = 'Content-Type'
    value = 'application/json; charset=utf-8'.
CALL METHOD lo_http_client->request->set_method( 'POST' ).

3. SAP 发送 HTTP POST(Web Service)

代码语言:javascript
复制
* 拼接XML的内表
DATA:
  BEGIN OF wareqtext,
    line TYPE c LENGTH 72,
  END OF wareqtext,
  itreqtext LIKE TABLE OF wareqtext.

* URL地址

DATA: l_url TYPE string .

* 拼接的XML
DATA: strreq  TYPE string.

* 返回的XML

DATA: return_str TYPE string .

 

* 生成提交字符串的xml部分
    CLEAR: strreq .
    LOOP AT itreqtext INTO wareqtext.
      IF strreq IS INITIAL .
        strreq = wareqtext.
      ELSE.

* 有些系统不会自动换行,特加上换行符
        CONCATENATE strreq cl_abap_char_utilities=>newline wareqtext-line INTO strreq.
      ENDIF.
    ENDLOOP.

 

  DATA: http_client TYPE REF TO if_http_client .
  DATA: len TYPE i .

  len = STRLEN( strreq ) .

  CALL METHOD cl_http_client=>create_by_url
    EXPORTING
      url    = l_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 = 'text/xml; charset=utf-8'.

  CALL METHOD http_client->request->set_cdata
    EXPORTING
      data   = strreq
      offset = 0
      length = len.
  CALL METHOD http_client->send
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2.
  CALL METHOD http_client->receive
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2
      http_processing_failed     = 3.

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

  CALL METHOD http_client->close.
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-11-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档