在企业应用集成中,SAP 系统经常需要与外部系统通过 Web Service 进行数据交互。本文将基于一份实际操作文档,详细讲解如何在 SAP 中调用外部 Web Service,涵盖从代理类创建、逻辑端口配置到代码调用的完整流程。
一、概述
SAP 调用外部 Web Service 通常分为三个核心步骤:
- 创建代理类 – 通过 SE80 事务码,基于 WSDL 生成 SAP 端的代理类
- 配置逻辑端口 – 使用 LPCONFIG 为代理类配置连接信息
- 编写调用代码 – 在 ABAP 程序中实例化代理类并调用方法
下面我们逐步展开说明。
二、SE80 创建代理类
代理类(Proxy Class)是 SAP 内部对外部 Web Service 的本地映射,它封装了 SOAP 通信细节,使 ABAP 程序可以像调用本地类一样调用远程服务。
操作步骤:
- 进入 SE80,选择'企业服务' → '服务创建' → '服务生成'
- 输入 WSDL 地址,系统将解析服务定义
- 选择需要生成的服务和操作
- 指定包和传输请求,生成代理类及相关结构
生成后的代理类包含:
- 一个主代理类(如
ZPSI_QLTCO_UPLOADER_SAP) - 对应的输入/输出结构(如
ZPSI_QLTUPLOAD_DATA_REQUEST) - 异常类
三、LPCONFIG 配置逻辑端口
逻辑端口(Logical Port)用于存储 Web Service 的终端地址、认证信息等连接配置,实现代理类与物理地址的解耦。
配置过程:
- 运行 LPCONFIG 事务码
- 选择'创建逻辑端口'
- 输入端口名称(如
ZPSI_QLT_DEV),选择代理类 - 配置目标地址(URL)、认证方式等
- 保存激活
关键说明:
- 逻辑端口可按环境(开发、测试、生产)分别配置
- 若生产地址变更,只需修改或新建逻辑端口,无需重新生成代理类
四、ABAP 调用示例
以下是一个典型的调用代码框架,包含异常处理和 XML 数据传输:
DATA: g_obj TYPE REF TO zpsi_qltco_uploader_sap,
err_obj TYPE REF TO cx_ai_system_fault,
err_meth TYPE REF TO cx_ai_system_fault,
err_meth2 TYPE REF TO cx_ai_application_fault,
err_tran TYPE REF TO cx_transformation_error.
" 根据客户端选择逻辑端口
TRY.
IF sy-mandt = '800'. " 生产机
ELSE. " 测试机
CREATE OBJECT g_obj EXPORTING logical_port_name = 'ZPSI_QLT_DEV'.
ENDIF.
CATCH cx_ai_system_fault INTO err_obj. " 处理创建异常
ENDTRY.
" 使用 ST(Simple Transformation)生成 XML
DATA: p_xml TYPE string.
TRY.
CALL TRANSFORMATION zpsif_qtl SOURCE root = pt_trans[] RESULT XML p_xml OPTIONS xml_header = 'no'.
CATCH cx_transformation_error INTO err_tran. " 处理转换异常
ENDTRY.
" 添加 XML 头部
CONCATENATE '<?xml version="1.0" encoding="UTF-8"?>' p_xml INTO p_xml.
" 准备输入参数并调用 Web Service
DATA: lv_input TYPE zpsi_qltupload_data_request,
lv_res TYPE zpsi_qltupload_data_response.
lv_input-xml_data = p_xml.
TRY.
CALL METHOD g_obj->upload_data EXPORTING upload_data_request = lv_input IMPORTING upload_data_response = lv_res.
CATCH cx_ai_system_fault INTO err_meth. " 处理系统异常
CATCH cx_ai_application_fault INTO err_meth2. " 处理应用异常
ENDTRY.
五、关键注意事项
- 环境隔离:开发、测试、生产环境应使用不同的逻辑端口,避免配置冲突
- 异常处理:必须捕获并处理
CX_AI_SYSTEM_FAULT和CX_AI_APPLICATION_FAULT等异常 - XML 处理:
- 使用 ST 或 XSLT 生成 XML 数据
- 注意编码和特殊字符转义
- 部分场景下需手动调整 XML 字符串(如文档中提到的'去掉乱码字符')
- 代理类查看:可通过 SE24 查看代理类的方法签名和数据结构
六、总结
通过 SE80 创建代理类、LPCONFIG 配置逻辑端口、ABAP 调用三步,SAP 系统即可安全、灵活地调用外部 Web Service。这种方式将外部服务封装为本地对象,提高了代码的可维护性和环境适配性,是企业系统集成中的常用实践。

