关于 WebService 概念,这篇文章讲解的非常全面,可以移步阅读《SAP Web service》。
本想通过 RFC 来发布 ODATA 服务,奈何当前 SAP ECC 版本过低不支持,只好采用其他方式来发布服务,于是就尝试了下面这两种方法。
SE37,创建以下测试用 RFC
FUNCTION ZFM_DEMO_ODATA. *"---------------------------------------------------------------------- *"*"Local interface: *" TABLES *" T_DATA STRUCTURE SPFLI *"---------------------------------------------------------------------- select * into table T_DATA from spfli. ENDFUNCTION.
测试执行 RFC,得到的数据结果如下图:
需要发布服务的 FM 必须设置允许远程访问,即 RFC 函数
菜单:Utilities → More Utilities → Create Web Service → From the Function Module
根据向导,填写 WebService 定义信息:
至此,Webservice 服务定义完成,可以在 SE80 中查看服务定义,激活服务定义。
首选需要确定SAP版本,不同版本的事务码不同。
NW740版本之前版本:使用事务码:WSCONFIG,WSADMIN
NW740版本之后版本:使用事务码:SOAMANAGER
查看具体SAP版本,可参考这篇文章《如何更详细查看SAP 系统版本信息》。
SAP ECC6.0,执行事务码:WSADMIN。
展开左边树形第一个节点,找到刚才定义的 Webservice 服务 ZWS_DEMO
输入SAP用户名和密码,即可获得 WSDL 地址
SAP S4HANA,执行事务码:SOAMANAGER,跳转浏览器:
点击服务名称,
或者从se80->本地对象->服务定义->启动SOAMANAGER配置,可直接跳到此处
备注:上面能否勾选,基于定义Webservice时的以下设置。
复制,获得 WSDL 地址。
Webservice服务测试,推荐使用SoapUI工具。
(1)新建项目,Add WSDL,贴入上面获取到的 WSDL地址
(2)输入SAP用户名及密码
(3)修改入参,调用服务
至此,SAP Webservice 服务发布完成。
SE80,Enterprise Services → Service Definitions 中,找到对应的服务名称 ZWS_DEMO,右键 → Delete → Delete All Objects
现在系统集成,都推荐采用 RESTful 服务,于是继续研究在 SAP 中发布 RESTful 服务的方法,具体实现步骤如下。
(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.
保存,激活,待用。
SAP端,执行事务码:SICF,进行 RESTful 服务发布。
default_host,右键 → 新的子元素
保存,返回
右键,激活服务
右键,测试服务
弹出浏览器,获取到 Url,以及Json 结果
拷贝 Url 到 Postman 工具中,测试条件查询
至此,SAP RESTful 服务发布完成。
具体操作步骤可以参考这篇文章《三种方法进行SAP ODATA数据服务发布(DDIC、RFC、CDS)》。
(1)PO发布Webservice,可以参考这篇文章《SAP PO 接口配置完整教程之一RFC服务发布》。
(2)PO发布RESTful,后续提供。
原创文章,转载请注明来源-X档案