SAP Webservice & RESTful 接口服务发布教程

1、SAP Webservice 类型2、SAP Webservice 服务发布2.1、准备 RFC2.2、通过 RFC 创建服务2.3、查看 WSDL2.3.1、WSADMIN2.3.2、SOAMANAGER

2.4、访问服务2.5、删除服务

3、SAP RESTful 服务发布3.1、创建数据服务类3.2、维护服务3.3、访问服务3.4、删除服务

4、SAP ODATA 服务发布5、SAP PO 服务发布

1、SAP Webservice 类型

关于 WebService 概念,这篇文章讲解的非常全面,可以移步阅读《SAP Web service》。

本想通过 RFC 来发布 ODATA 服务,奈何当前 SAP ECC 版本过低不支持,只好采用其他方式来发布服务,于是就尝试了下面这两种方法。

2、SAP Webservice 服务发布

2.1、准备 RFC

SE37,创建以下测试用 RFC

FUNCTION ZFM_DEMO_ODATA.

*"----------------------------------------------------------------------

*"*"Local interface:

*" TABLES

*" T_DATA STRUCTURE SPFLI

*"----------------------------------------------------------------------

select *

into table T_DATA

from spfli.

ENDFUNCTION.

测试执行 RFC,得到的数据结果如下图: 需要发布服务的 FM 必须设置允许远程访问,即 RFC 函数

2.2、通过 RFC 创建服务

菜单:Utilities → More Utilities → Create Web Service → From the Function Module 根据向导,填写 WebService 定义信息: 至此,Webservice 服务定义完成,可以在 SE80 中查看服务定义,激活服务定义。

2.3、查看 WSDL

首选需要确定SAP版本,不同版本的事务码不同。 NW740版本之前版本:使用事务码:WSCONFIG,WSADMIN NW740版本之后版本:使用事务码:SOAMANAGER 查看具体SAP版本,可参考这篇文章《如何更详细查看SAP 系统版本信息》。

2.3.1、WSADMIN

SAP ECC6.0,执行事务码:WSADMIN。 展开左边树形第一个节点,找到刚才定义的 Webservice 服务 ZWS_DEMO

输入SAP用户名和密码,即可获得 WSDL 地址

2.3.2、SOAMANAGER

SAP S4HANA,执行事务码:SOAMANAGER,跳转浏览器: 点击服务名称, 或者从se80->本地对象->服务定义->启动SOAMANAGER配置,可直接跳到此处 备注:上面能否勾选,基于定义Webservice时的以下设置。 复制,获得 WSDL 地址。

2.4、访问服务

Webservice服务测试,推荐使用SoapUI工具。 (1)新建项目,Add WSDL,贴入上面获取到的 WSDL地址 (2)输入SAP用户名及密码 (3)修改入参,调用服务 至此,SAP Webservice 服务发布完成。

2.5、删除服务

SE80,Enterprise Services → Service Definitions 中,找到对应的服务名称 ZWS_DEMO,右键 → Delete → Delete All Objects

3、SAP RESTful 服务发布

现在系统集成,都推荐采用 RESTful 服务,于是继续研究在 SAP 中发布 RESTful 服务的方法,具体实现步骤如下。

3.1、创建数据服务类

(1)SE24,创建数据服务类:YCL_REST_TEST (2)继承系统接口:IF_HTTP_EXTENSION (3)实现接口中的方法:IF_HTTP_EXTENSION~HANDLE_REQUEST 该方法为服务的主入口,主要就是分发处理各种 HTTP 方法,因为是发布数据查询服务,所以这里只演示了 GET方法。 (4)添加 GET 方法,并将 server 作为入参 (5)实现 GET 方法,查询数据,并返回Json串

METHOD get.

DATA: lt_fields TYPE tihttpnvp,

s_carrid TYPE rseloption,

s_connid TYPE rseloption,

lv_content_type TYPE string.

DATA: ls_selopt TYPE rsdsselopt.

* 获取请求参数

server->request->get_form_fields( CHANGING fields = lt_fields ).

IF lt_fields IS INITIAL.

" Sets current HTTP status code

server->response->set_status( code = 404 reason = '未查询到传入参数,请检查' ).

RETURN.

ENDIF.

FIELD-SYMBOLS: LIKE LINE OF lt_fields.

LOOP AT lt_fields ASSIGNING . "FIELD-SYMBOL().

TRANSLATE -name TO UPPER CASE.

CASE -name.

WHEN 'CARRID'.

CLEAR ls_selopt.

ls_selopt-sign = 'I'.

ls_selopt-option = 'EQ'.

ls_selopt-low = -value.

APPEND ls_selopt TO s_CARRID.

WHEN 'CONNID'.

CLEAR ls_selopt.

ls_selopt-sign = 'I'.

ls_selopt-option = 'EQ'.

ls_selopt-low = -value.

APPEND ls_selopt TO s_CONNID.

ENDCASE.

ENDLOOP.

* 查询数据

DATA: lt_data TYPE TABLE OF SPFLI.

SELECT *

FROM SPFLI

INTO CORRESPONDING FIELDS OF TABLE lt_data

WHERE CARRID in s_CARRID

and CONNID IN s_CONNID.

* 返回 Json 结果

" Sets the HTTP body of this entity to the given char. data

data: lv_str type string.

* 说明:SAP ECC 不具备Json处理类,需要找网上第三方工具类,此处定义为:Z_UI2_CL_JSON2。

* SAP S4 可以直接使用系统自带的Json处理类:/ui2/cl_json,两者功能相似

lv_str = Z_UI2_CL_JSON2=>serialize( data = lt_data "lt_sflight"将内表转换为json传出

compress = abap_true

pretty_name = Z_UI2_CL_JSON2=>pretty_mode-camel_case ).

server->response->set_cdata( lv_str ).

" Sets current HTTP status code

server->response->set_status( code = 200 reason = 'OK' ).

lv_content_type = 'application/json'.

" Set the Body Type (Text/HTML, for example)

server->response->set_content_type( lv_content_type ).

ENDMETHOD.

保存,激活,待用。

3.2、维护服务

SAP端,执行事务码:SICF,进行 RESTful 服务发布。 default_host,右键 → 新的子元素 保存,返回 右键,激活服务

3.3、访问服务

右键,测试服务 弹出浏览器,获取到 Url,以及Json 结果 拷贝 Url 到 Postman 工具中,测试条件查询 至此,SAP RESTful 服务发布完成。

3.4、删除服务

4、SAP ODATA 服务发布

具体操作步骤可以参考这篇文章《三种方法进行SAP ODATA数据服务发布(DDIC、RFC、CDS)》。

5、SAP PO 服务发布

(1)PO发布Webservice,可以参考这篇文章《SAP PO 接口配置完整教程之一RFC服务发布》。

(2)PO发布RESTful,后续提供。

原创文章,转载请注明来源-X档案

精彩链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: