SAP调用 Web Services 接口 示例代码

  1. SE80 导入WSDL文件生成ABAP代理类。
  2. SOAMANAGER 创建逻辑端口,指定SoapAction。
  3. SPROXY_START 测试Web Services 接口。

SAP调用 Web Services 接口 SoapUI 接口测试

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://WebXml.com.cn/">
   <soapenv:Body>
      <web:getMobileCodeInfo>
         <web:mobileCode>1880262</web:mobileCode>
         <web:userID></web:userID>
      </web:getMobileCodeInfo>
   </soapenv:Body>
</soapenv:Envelope>

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
      <getMobileCodeInfoResponse xmlns="http://WebXml.com.cn/">
         <getMobileCodeInfoResult>1880262:广东 惠州 广东移动全球通卡</getMobileCodeInfoResult>
      </getMobileCodeInfoResponse>
   </soap:Body>
</soap:Envelope>

HTTP/1.1 200 OK
Cache-Control: private, max-age=0
Content-Type: text/xml; charset=utf-8
Vary: Accept-Encoding
Server: Microsoft-IIS/7.5
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
Date: Tue, 18 Jan 2022 09:50:14 GMT

SAP调用 Web Services 接口 创建逻辑端口

SAP调用 Web Services 接口 创建逻辑端口

SAP调用 Web Services 接口 SPROXY_START 接口测试

SAP调用 Web Services 接口 ABAP示例代码

REPORT zdz003 NO STANDARD PAGE HEADING.

DATA: lo_soap TYPE REF TO zco_mobile_code_wssoap.

DATA: lw_input  TYPE zget_mobile_code_info_soap_in,
      lw_output	TYPE zget_mobile_code_info_soap_out.

DATA: lo_sys_exception TYPE REF TO cx_ai_system_fault,
      lo_app_exception TYPE REF TO cx_ai_application_fault.

SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-t01.
  PARAMETERS: p_clas TYPE swf_clsjob-clasnam,
              p_lpt  TYPE srt_lp_key_fields-lp_name,
              p_mob  TYPE string OBLIGATORY,
              p_usr  TYPE string.
SELECTION-SCREEN END OF BLOCK blk1.

INITIALIZATION.

START-OF-SELECTION.

  TRY.

      CREATE OBJECT lo_soap
        EXPORTING
          logical_port_name = p_lpt.

      lw_input-mobile_code = p_mob.
      lw_input-user_id     = p_usr.

      CALL METHOD lo_soap->get_mobile_code_info
        EXPORTING
          input  = lw_input
        IMPORTING
          output = lw_output.

    CATCH cx_ai_system_fault INTO lo_sys_exception.
      WRITE:/ lo_sys_exception->errortext.

    CATCH cx_ai_application_fault INTO lo_app_exception.
      WRITE:/ lo_app_exception->textid.

  ENDTRY.

  WRITE:/ lw_output-get_mobile_code_info_result.

事务代码短文本
SRT_ELOG报表错误日志
SRT_LOGSRT 错误日志
SRT_TESTWeb 服务测试主控室
SRT_UTILWeb 服务实用程序
SRTERROR_E2EWS 相关运行时错误 -E2E
SRTLOG_E2ESRT 错误日志 E2E
SRTUTILWeb 服务的跟踪实用程序
SRTUTIL_E2ESRT 跟踪分析 E2E

ABAP 代理编程模型

本文所述代理编程模型定义如何使用通过代理生成方法生成的代理。

消费者代理与提供者代理之间的区别

消费者代理与提供者代理之间存在本质区别。

消费者代理由 ABAP 对象类表示,而提供者代理则由 ABAP 对象接口和对应实施类表示。实施类创建于生成期间,之后需要添加相关应用程序代码。

实例化/调用

出站

通过实例化代理类访问消费者代理。

示例:

  DATA:
    my_interface TYPE REF TO zmy_co_synchronous_outbound_inter,
    my_request TYPE zmy_request_message_type,
    my_response TYPE zmy_response_message_type.

* 创建实例
  CREATE OBJECT my_interface.

* 填写请求数据
  my_request-request_message_type-simple = 'A simple String'.

* 调用代理
  TRY.
      CALL METHOD my_interface->execute_synchronous
         EXPORTING
          output = my_request
         IMPORTING
          input  = my_response.

    CATCH cx_ai_system_fault .
    CATCH cx_ai_application_fault .
  ENDTRY. 
重要注释: 更新任务中的消费者代理

如果更新任务中留有应用程序数据,则在更新时还需要进行 XI 出站调用。 否则如果取消更新,未经计划的更新任务可能阻止队列远程函数调用队列。 由于队列之间存在链接,这可对整套出站处理产生重大影响。

入站

通过实施相关 ABAP 对象类访问服务器或入站代理。代理生成期间通过空实施创建对象类。

示例:

method ZMY_II_SYNCHRON_INBOUND_INTERF~EXECUTE_SYNCHRONOUS.
*** **** 在此插入实施 **** ***
  output-response_message_type-simple =  input-request_message_type-simple.
 endmethod. 

协议

使用 协议控制代理。

协议绑定在语义上属于同类的参数和方法。

协议示例:
•IF_WSPROTOCOL_ASYNC_MESSAGING
控制序列化上下文(队列标识),确定是否需要确认。
•IF_WSPROTOCOL_ROUTING
定义发送方/接收方。
•IF_WSPROTOCOL_SECURITY
用户/密码


协议访问取决于是消费者代理还是提供者代理。

出站

使用所生成代理类的 GET_PROTOCOL 类方法直接访问协议。

示例:

  DATA:
    my_interface TYPE REF TO zmy_co_asynchronous_outbound_inte,
    my_request TYPE zmy_request_message_type,
    async_messaging TYPE REF TO if_wsprotocol_async_messaging.

* 创建实例
  CREATE OBJECT my_interface.
* 填写请求数据
  my_request-request_message_type-simple = 'A simple String'.

  TRY.
*     获取异步消息协议
      async_messaging ?= my_interface->get_protocol(  if_wsprotocol=>async_messaging ).
      async_messaging->set_serialization_context( 'MY_QUEUE_ID' ).
*   出站调用
      my_interface->execute_asynchronous(  output = my_request ).

    CATCH cx_ai_system_fault .
    CATCH cx_ai_application_fault .
  ENDTRY. 
注意:

方法 GET_PROTOCOL 获取类型为 Type Ref To IF_WSPROTOCOL 的对象。

IF_WSPROTOCOL_ASYNC_MESSAGING 实施 IF_WSPROTOCOL,所以必须执行转型:
async_messaging ?= my_interface->get_protocol(  if_wsprotocol=>async_messaging ).

接口类 IF_WSPROTOCOL 包含所有可用协议(常量形式)。

入站

在入站协议中,通过服务器上下文间接访问协议。 如果您有服务器上下文,则以访问出站代理的方式访问协议。

示例:

METHOD zmy_ii_asynchron_inbound_inter~execute_asynchronous.
*** **** 在此插入实施 **** ***
  DATA:
    message_guid TYPE sxmsguid,
    message_id_protocol TYPE REF TO if_wsprotocol_message_id,
    server_context TYPE REF TO if_ws_server_context.

  TRY.
      server_context = cl_proxy_access=>get_server_context( ).
      message_id_protocol ?= server_context->get_protocol(  if_wsprotocol=>message_id ).
      message_guid = message_id_protocol->get_message_id( ).
    CATCH cx_ai_system_fault .
  ENDTRY.
ENDMETHOD. 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SAP爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值