ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ABAP-调用HTTP请求模板

2022-07-29 16:02:46  阅读:163  来源: 互联网

标签:xml HTTP string lv ABAP client http TYPE 模板


背景:第三方提供的webservice WSDL创建消费者服务的时候报错,SAP解析不了对方的wsdl,此时就可以使用HTTP调用的方式进行系统对接

 

 

 

以上,反正就是各种报错,但是对方提供的WSDL在SOAPUI中可以正常使用,此时就需要使用另外一种方法

 

 

首先在postman中测试对方提供的wsdl 文件

 

 

 

 

 测试成功!

 

以下就需要在ABAP 中实现:代码及注释如下

*&---------------------------------------------------------------------*
*& Report Z_HTTPTEST02_CPF
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT z_httptest02_cpf.


DATA: lo_http_client TYPE REF TO if_http_client,  "定义一个HTTP Client
      lv_uri         TYPE string,                 "URL
      lv_results     TYPE string.                 "Response
DATA: itab TYPE TABLE OF string.                  "response inter table
DATA: p_code   TYPE i,                            "status code
      p_reason TYPE string.                       "status title

DATA gt_res TYPE STANDARD TABLE OF string.

data lv_result TYPE string.

* Create an instance of the HTTP client:
CALL METHOD cl_http_client=>create_by_url
  EXPORTING
    url                = 'http://IP地址/web/ws/r/aws_ttsrv2'
  IMPORTING
    client             = lo_http_client
  EXCEPTIONS
    argument_not_found = 1
    plugin_not_active  = 2
    internal_error     = 3
    OTHERS             = 4.


"设置HTTP header
CALL METHOD lo_http_client->request->set_header_field
  EXPORTING
    name  = 'Content-Type'
    value = 'text/xml'.

CALL METHOD lo_http_client->request->set_header_field
  EXPORTING
    name  = 'SOAPAction'
    value = '""'.

CALL METHOD lo_http_client->request->set_header_field
  EXPORTING
    name  = 'Accept-Encoding'
    value = 'gzip,deflate'.


"设置HTTP 执行的方法
CALL METHOD lo_http_client->request->set_method( 'POST' ).

INCLUDE Z_HTTPTEST02_CPF_XML.      "根据实际业务拼接XML

"cl_demo_output=>display( lv_xml ).

DATA: len TYPE i .
len = strlen( lv_xml ) .

"设置HTTP参数
CALL METHOD lo_http_client->request->set_cdata
  EXPORTING
    data   = lv_xml
    offset = 0
    length = len.

"调用HTTP
lo_http_client->send(
  EXCEPTIONS
    http_communication_failure = 1
    http_invalid_state         = 2 ).

"接受HTTP response
lo_http_client->receive(
  EXCEPTIONS
    http_communication_failure = 1
    http_invalid_state         = 2
    http_processing_failed     = 3 ).
IF sy-subrc EQ 0.
  lv_result =
    lo_http_client->response->get_cdata( ).
  cl_demo_output=>display( lv_result ).                             "输出webservice返回结果

  CALL METHOD lo_http_client->response->get_status
    IMPORTING
      code   = p_code
      reason = p_reason.
ELSE.
*      RAISE EXCEPTION TYPE lcx_icf_exception.
ENDIF.

SPLIT lv_result AT cl_abap_char_utilities=>cr_lf INTO TABLE gt_res.  "把html内容放到内表

WRITE: / 'Status:',p_code, p_reason.
ULINE.
CLEAR lv_result.
LOOP AT gt_res INTO lv_result.
  WRITE: / lv_result.
ENDLOOP.

"关闭连接
CALL METHOD lo_http_client->close.

 

 

INCLUDE 程序如下

*&---------------------------------------------------------------------*
*& 包含               Z_HTTPTEST02_CPF_XML
*&---------------------------------------------------------------------*

"设置POST body的报文
DATA: lv_xml   TYPE string,
      lv_xml01 TYPE string,
      lv_xml02 TYPE string,
      lv_xml03 TYPE string,
      lv_xml04 TYPE string,
      lv_xml05 TYPE string,
      lv_xml06 TYPE string,
      lv_xml07 TYPE string,
      lv_xml08 TYPE string,
      lv_xml09 TYPE string,
      lv_xml10 TYPE string,
      lv_xml11 TYPE string,
      lv_xml12 TYPE string,
      lv_xml13 TYPE string,
      lv_xml14 TYPE string,
      lv_xml15 TYPE string,
      lv_xml16 TYPE string,
      lv_xml17 TYPE string,
      lv_xml18 TYPE string,
      lv_xml19 TYPE string,
      lv_xml20 TYPE string,
      lv_xml201 TYPE string,
      lv_xml21 TYPE string,
      lv_xml22 TYPE string,
      lv_xml23 TYPE string,
      lv_xml24 TYPE string,
      lv_xml25 TYPE string,
      lv_xml26 TYPE string,
      lv_xml27 TYPE string,
      lv_xml28 TYPE string,
      lv_xml29 TYPE string,
      lv_xml30 TYPE string,
      lv_xml31 TYPE string,
      lv_xml32 TYPE string,
      lv_xml33 TYPE string,
      lv_xml34 TYPE string,
      lv_xml35 TYPE string,
      lv_xml36 TYPE string,
      lv_xml37 TYPE string,
      lv_xml38 TYPE string,
      lv_xml39 TYPE string,
      lv_xml40 TYPE string,
      lv_xml41 TYPE string,
      lv_xml42 TYPE string,
      lv_xml43 TYPE string,
      lv_xml44 TYPE string,
      lv_xml45 TYPE string,
      lv_xml46 TYPE string.

data: lv_xml_head type string,
      lv_xml_body type string,
      lv_xml_foot type string.

lv_xml01 = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tip="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay">'.
lv_xml02 = '   <soapenv:Header/>'.
lv_xml03 = '   <soapenv:Body>'.
lv_xml04 = '      <tip:OaMroItemRequest>'.
lv_xml05 = '         <tip:request><![CDATA[<Request>'.
lv_xml06 = '  <Access>'.
lv_xml07 = '    <Authentication user="xxxx" password="xxxx"/>'.
lv_xml08 = '    <Organization name="WCTZ"/>'.
lv_xml09 = '  </Access>'.
lv_xml10 = '  <Parameter>'.
lv_xml11 = '    <Record>'.
lv_xml12 = '      <Field name="pgplant" value="WCTZ"/>'.
lv_xml13 = '    </Record>'.
lv_xml14 = '  </Parameter>'.
lv_xml15 = '  <RequestContent>'.
lv_xml16 = '    <Document>'.

CONCATENATE lv_xml01 lv_xml02 lv_xml03 lv_xml04 lv_xml05 lv_xml06 lv_xml07 lv_xml08 lv_xml09 lv_xml10 lv_xml11 lv_xml12 lv_xml13 lv_xml14 lv_xml15 lv_xml16 INTO lv_xml_head.

DO 1 TIMES.
    lv_xml17 = |<RecordSet id="{ sy-index }">|.
    lv_xml18 = '        <Master name="ima_file">'.
    lv_xml19 = '          <Record>'.
    lv_xml20 = '            <Field name="ima02" value="PO152选择焊治具"/>'.
    lv_xml201 = '           <Field name="ima021" value="不含钛合金"/>'.
    lv_xml21 = '            <Field name="ima24" value="N"/>'.
    lv_xml22 = '            <Field name="ima44" value="套"/>'.
    lv_xml23 = '            <Field name="ima25" value="套"/>'.
    lv_xml24 = '            <Field name="hsl" value="1"/>'.
    lv_xml25 = '            <Field name="ima08" value="P"/>'.
    lv_xml26 = '            <Field name="ima71" value="1080"/>'.
    lv_xml27 = '            <Field name="ima06" value="7001"/>'.
    lv_xml28 = '            <Field name="ima35" value="D016"/>'.
    lv_xml29 = '            <Field name="pinpai" value=""/>'.
    lv_xml30 = '            <Field name="ima09" value="MRO_04"/>'.
    lv_xml31 = '            <Field name="ima45" value="1"/>'.
    lv_xml32 = '            <Field name="ima46" value="1"/>'.
    lv_xml33 = '            <Field name="erjie" value="DZ_A03"/>'.
    lv_xml34 = '            <Field name="sanjie" value="0401"/>'.
    lv_xml35 = '            <Field name="gdfqun" value="400101"/>'.
    lv_xml36 = '            <Field name="plant" value="WCTZ"/>'.
    lv_xml37 = '            <Field name="ima43" value=""/>'.
    lv_xml38 = '          </Record>'.
    lv_xml39 = '        </Master>'.
    lv_xml40 = '      </RecordSet>'.
    CONCATENATE lv_xml_body lv_xml17 lv_xml18 lv_xml19 lv_xml20 lv_xml201 lv_xml21 lv_xml22 lv_xml23 lv_xml24 lv_xml25 lv_xml26 lv_xml27 lv_xml28 lv_xml29 lv_xml30
                lv_xml31 lv_xml32 lv_xml33 lv_xml34 lv_xml35 lv_xml36 lv_xml37 lv_xml38 lv_xml39 lv_xml40 into lv_xml_body.
ENDDO.

lv_xml41 = '    </Document>'.
lv_xml42 = '  </RequestContent>'.
lv_xml43 = '</Request>]]></tip:request>'.
lv_xml44 = '      </tip:OaMroItemRequest>'.
lv_xml45 = '   </soapenv:Body>'.
lv_xml46 = '</soapenv:Envelope>'.

CONCATENATE lv_xml41 lv_xml42 lv_xml43 lv_xml44 lv_xml45 lv_xml46 INTO lv_xml_foot.

CONCATENATE lv_xml_head lv_xml_body lv_xml_foot INTO lv_xml.

 

标签:xml,HTTP,string,lv,ABAP,client,http,TYPE,模板
来源: https://www.cnblogs.com/smarttony/p/16532532.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有