一、SAP Web Service简介
SAP的web service是在Netweaver组件通过UDDI工具,采用SOAP和WSDL这两种web服务技术,将SAP已有功能封装成webservice对象,供其他系统调用或者调用其他系统的webservice,从而实现SAP与非SAP系统(如OA、PLM等)系统的集成。SAP Netweaver提供了可以发布、查找并调用 Web 服务的工具(UDDI),可支持 NetWeaver 作为 Web 服务的服务器(Service Provider)或者客户端(Service Consumer),主要功能包括:
①提供webservice。它可以直接封装SAP的RFC、Function Group、BAPI、XI Message Interface等系统功能,以WEB标准协议在Internet上被其他系统进行调用;
②消费webservice。Netweaver通过创建代理能够通过Internet直接调用采用标准协议封装的其他系统提供的webservice;
③提供AS ABAP和AS JAVA环境,允许开发者使用ABAP或者JAVA开发web服务。
本文相关专业术语解释如下:
UDDI(Universal Description, Discovery, and Integration):在用户能够调用Web服务之前,必须确定这个服务内包含哪些属性与方法,找到被调用的接口定义,而这些都需要服务提供者(Service Provider)通过标准的web服务协议来进行编制。 UDDI正是这样一个工具,用户通过web在UDDI中查找并定位那些他们需要的服务。UDDI利用SOAP消息机制(标准的XML/HTTP)来发布、编辑、浏览以及查找注册信息。它采用XML格式来封装各种不同类型的数据,并且发送到服务请求者或者由服务提供者返回需要的数据。
WSDL (Web Services Description Language):对于服务消费者(Service Consumer)来说,要找到一个自己需要使用的服务,他必须知道如何以及从哪调用。 WSDL 规范是一个描述接口、语义以及Web服务的XML文档。给这个XML文档配置上网络地址后,就可以简单而又快捷地被查找和定位。
SOAP(Simple Object Access Protocol):当商业用户通过UDDI找到你的WSDL描述文档后,它通过SOAP协议调用你建立的Web服务中的一个或多个对象。从技术角度来看,SOAP详细指明了如何响应不同的请求以及如何对参数编码。一个SOAP封装了可选的头信息和正文,并且通常使用HTTP POST方法来传送到一个HTTP 服务器。SOAP同时支持消息传送和远程过程调用。
本文将主要介绍在SAP中配置webservice作为服务提供方(Service Provider),即将SAP方的RFC函数配置成webservice供其他系统调用。本文所用示例测试环境为S4HANA 1610,Netweaver 7.5.1,具体信息如下图所示:
二、SAP Web Service配置准备工作
Webservice最终是以WSDL形式发布,即一个带有URL的XML文件。既然是URL,就必然涉及到发布服务器的域名、端口、目录等信息,因此SAP提供的webservice在能够被正常调用之前,需要对服务器的域名进行DNS解析,并且WS要发布必须要通过SAP的SOA Manager进行服务的绑定,所以还需要对SOA Manager进行的一定的设置,让其正常工作,才能进行下一步的服务绑定。具体步骤见下面章节。
1. 通过RZ10配置服务器名称和其他参数
服务器的参数一般是由basis来配置完成的。这里主要用来查看服务器的Hostname,以帮助下一步的DNS解析操作。
在SAP客户端首页运行T-code:RZ10,即可进入服务器参数文件管理界面,如下图:
点击“参数文件”旁边的搜索帮助按钮,即可弹出服务器上已有的实例和默认的参数设置,这里我们只需选择默认参数文件查看即可。选择下面的“基本维护”选项,就可以快速查看服务器默认的Hostname以及默认集团号,如下图所示:
如果想查看更多服务器信息,可以选择参数维护概览界面的“扩展维护”选项,就可以看到服务器的详细信息,如下图所示:
如果想修改系统的参数,建议找Basis修改,这里与webservice相关的几个重要参数为:
v login/system_client 登录时默认的Client号
v login/fails_to_user_lock 密码输错多少次后锁定
v rdisp/mshost 状态栏中显示的系统名称
v Sapglobalhost SAP全局主机名,这个参数就是后面需要设置的被解析的对象
读者如果对其他参数有兴趣,可自行到互联网上查找相关信息,这里不再赘述。
2. 配置服务器被DNS解析
如果SAP服务器本身没有加入到所在工作环境的域控中,那么服务器的hostname默认是无法被解析到的,则需要进行服务器的host解析。常见的host解析办法有两种:集中解析和单机解析。各自的优缺点和办法如下:
(1)集中解析
集中解析就是将host解析条目添加到服务器所在网络的DNS服务中,一般需要联系网络管理员来添加这个解析条目。集中解析的优点就是处于该网络环境中的所有客户端主机,只要使用的默认DNS服务器,就可以直接访问发布后的webservice,而不需要在本机上做出任何操作。
(2)单机解析
单机解析就是在客户端电脑上,直接修改本地的host文件,具体操作如下:
依次浏览到这个目录下:<系统盘盘符>:WindowsSystem32driversetc,找到下面的一个名为“hosts”不带文件类型后缀的文件,右击这个文件,选择以记事本方式打开该文件,然后在下面的空白区域添加这样一条解析:
<SAP服务器的IP地址><SAP的hostname>
例如: 192.168.1.10 erpdev01。这里的hostname就是我们上一步通过RZ10查看到的SAPGlobalhost中名称,添加完成后保存该文件即可正常解析了。要检验配置是否成功,只需要在命令提示符中使用PING命令即可以检测。
3.启用SOAMANAGER服务
前面已经介绍过SAP是通过SOAMANAGER来对外发布指定服务器的,SOAMANAGER本身其实也是一个基于Netweaver的Web Dynpro程序,当你在SAP GUI客户端执行T-Code:SOAMANAGER的时候,就会默认调用IE来打开这个WDA程序,从而实现对webservice的发布的管理。但是根据SAP官方Note1124553的说法,出于安全方面的考虑,SAP Netweaver组件安装后,默认是不激活WDA程序显示服务以及SOAMANAGER服务的,因此,需要手工通过T-Code:SICF来先激活WAD程序显示相关服务以及SOAMANAGER服务,具体需要激活的服务如下:
①与显示WDA程序相关的服务
/default_host/sap/bc/webdynpro
(注意:这里只需要激活webdynpro这个服务,不需要激活其下面的子服务。当你右键激活这个服务的时候,其子节点的服务并不会被激活,这点与我们常见的激活逻辑有区别)
/default_host/sap/public/myssocntl
/default_host/sap/public/bc
(注意:如果你激活bc下面的子服务,这里的bc服务就会自动激活,不需要再手动激活了,因此这里可以跳过这个服务,直接激活其下面的子节点服务即可)
- /default_host/sap/public/bc/ur
- /default_host/sap/public/bc/icons
- /default_host/sap/public/bc/icons_rtl
- /default_host/sap/public/bc/webicons
- /default_host/sap/public/bc/pictograms
- /default_host/sap/public/bc/webdynpro/* (ssr, mimes等所有子节点服务)
②与SOAMANAGER相关的服务
- /default_host/sap/bc/soap
- /default_host/sap/bc/srt
- /default_host/sap/bc/srt/rfc/sap
- /default_host/sap/bc/webdynpro/sap
- /default_host/sap/bc/webdynpro/sap/appl_soap_management.
具体操作步骤如下:
在SAP首页执行T-code:SICF,打开服务定义选择界面,在“层次结构类型”中输入“Service”或者通过F4选择出这个值,然后执行,就可以进入服务管理界面,如下图所示:
在服务管理界面,可以看到上半部分为一个服务查询的界面,可以供用户快速定位到需要的管理的服务上;下半部分为一个树形结构的服务目录,可以通过逐级展开Default hostsapc等等,进行服务的查找,如下图所示:
上半部分通过查找可以快速定位到所需服务,在服务名称里面输入服务的名称,点击“应用”按钮,即可快速定位相应的服务,也可以在下半部分逐级展开目录来定位到相应的服务,如下图所示:
在这里可以看到被激活过的服务或者目录颜色比较深,而处于待激活状态的服务或者目录呈现灰色。被激活过的对象无法被再激活,只能取消激活。这里我们选择相应的待激活的服务或者子目录(呈现灰色状态),右击-》激活服务-》选择“是”,即可以激活相应的服务或者目录。如下图所示:
按照上面的步骤依次激活本节开始所列举的那些服务,应该就能顺利打开SOAMANAGER了,如果还不能打开,可以根据弹出的浏览器中提示的错误来找到相应的服务进行激活即可。配置成功后可以在SAP GUI中运行T-code: SOAMANAGER来进行测试。
在SAP首页运行T-code: SOAMANAGER,回车,会弹出IE浏览器窗口,如果成功的话,会先弹出认证框(与某些电脑的安全设置相关,也有可能先弹出IE安全站点提示信息,这时候只需要展开“详细信息”-》转到网页(不推荐)继续访问即可),输入登录信息后,就可以进入到SOA管理界面了。如下3图所示:
如果配置失败,一般会在浏览器提示相应的错误信息。如果显示为:“无法访问此页面”或者类似的完全打不开的提示信息,请回头检查自己的网络链接是否正常,或者是前面步骤中DNS的解析是否添加成功。
如果提示403错误,则表示某些服务没有启动,则可以通过显示该页面的URL,从URL中找到相应的服务,然后再按照上面激活服务的办法去激活相应的服务即可。服务没启动时,会报出403错误,如下图所示:
在该页面空白处右击-》属性,即可以打开该页面的属性,在属性的地址中,找到URL中问号“?”前的最后一个子节点,即相应的服务。
三、SAP Web Service配置步骤和方法
1. 外部访问SAP Webservice服务配置(Service Provider)
要让外部应用能够访问SAP的Web Service(以下简称为WS),那么必须配置SAP的webservice作为服务提供者(Service Provider),则需要先后按照以下步骤进行操作:
①创建RFC函数
②给RFC函数配置WS(webservice)
③使用SOAMANAGER生成WSDL(可供外部访问的XML链接)
(1) 创建RFC函数
使用T-code:SE37或者SE80,创建函数,函数组设置与编程过程这里不作详细描述。将函数属性页签中的处理类型设置为“远程启用的模块”,然后激活程序即可。
(2)给RFC函数配置WS(webservice)
RFC函数编写和设置完成后,可以在SE37或者SE80下通过不同的方式进入创建WS向导界面,这里将介绍三种方法(任选一种即可),具体方法如下:
①通过SE37菜单中的实用程序创建
在SE37界面下,依次展开菜单栏上的以下菜单:实用程序-》更多实用程序-》创建WEB服务-》来自函数模块。如果WS基于函数组的话,则最后一步选择“来自函数组”即可。之后系统会进入创建WS向导。
②使用SE80的函数组下的函数模块直接创建
在SE80界面下,依次展开左侧的资源浏览器,函数组-》函数组名-》功能模块,选择需要用来创建WS的远程函数名,右击-》创建-》企业服务,即可进入WS创建向导。
②使用SE80的包进行创建
在SE80界面下,依次展开左侧的资源浏览器,包-》输入包名-》回车,如果包存在,则会打开,不存在则会弹出创建提示,点是进行创建,过程中可能会要求请求号,根据需要选择。在包名上右击-》创建-》企业服务,一样可以进入创建WS向导。
通过以上三种方法中的任意一种,均可进入WS向导创建界面,这里以方法3触发向导为例,因为这样可以看到更多的配置界面。按照以下图示进行配置即可。
这里的配置文件(Profile)是用来设置服务的安全策略的,这里建议选择第四个,第四个就是简单地使用SAP提供的接口用户名和密码进行访问。
向导完成后,我们在左侧的服务目录中并不能看到我们刚刚创建的WS,这时候需要点击菜单栏上的保存按钮,才会显示出来。显示出来的WS对象名称为蓝色的,有ABAP编程经验的应该知道,这个蓝色的表示没有激活,所以,选中新建的WS,然后点击工具栏中的激活按钮进行激活,即完成WS的创建。
(3) 用SOAMANAGER生成WSDL(可供外部访问的XML链接)
WS创建完成后,并不代表webservice配置完成,还需要使用SOAMANAGER来进行绑定WSDL才能被其他系统通过web方式进行访问和调用。具体操作步骤如下:
在SAP首页输入T-Code:SOAMANAGER,回车执行,可调用IE浏览器弹出SOA的WEB管理界面,前面可能弹出IE安全提示以及SAP Webservice登录认证信息,前面已经讲过,这里不再赘述。其后步骤请按照以下图示进行配置。
这里进行WS的安全设置,与前面创建WS时的Profile的选择有关系,将窗口下拉到“传输通道验证”板块,选择“用户标识和密码”,然后回到顶部点击“下一步”。
在SOAP协议设置界面,保持默认,直接下一步,然后完成WSDL的生成。
点击执行按钮后,可能会弹出用户认证信息,输入用户信息后,即可以打开XML文件了。
至此,SAP作为webservice的提供者(Service Provider)已经配置完成。外部系统可以通过上面生成WSDL的链接与SAP系统进行交互了。
2.SAP访问外部 Webservice配置(Service Consumer)
SAP要实现与其他系统的交互或者集成,除了作为webservice的提供者,被动被调用外,也可以作为webservice的使用者,主动调用第三方系统的WS,从而实现交互。这里的配置由于本人并没有业务应用场景,就不做详细描述。关键点在于给函数创建企业服务的向导中,在对象类型里面选择“Service Consumer”,即WS使用者,相当于早期版本中的代理对象(Proxy Object),然后根据向导逐步完成创建过程,并在SOAMANAGER中做相应的配置,之后就可以通过web来调用第三方系统的WSDL,根据一定的语法原则,转换为abap编程对象,进行SAP的相关编程从而实现与地方系统的集成。