刚刚完成一个web service(以下简称WS)的工作,一点小的收获,分享一下。
我们SAP与其他管理系统进行数据交互,当然,idoc的效率是最高的,但是毕竟idoc是SAP的标准,我们做起来当然轻松,而且能提高客户满意度,但是做人嘛,不能太自私,毕竟跟我们奋斗在一线的还有我们的兄弟伙伴,强行要求idoc,必然导致工作量大大增加,那我们就应该在多种数据传输方法中寻求较优的解决方案。
第一步:创建代理
前序工作准备完毕进入SE80:
Create -> Enterprise Service
选择URL路径,填入伙伴提供的WS连接地址,Next->保存,代理创建完成(简单的WS代理创建到此结束):
※PS:
WS所使用的是Internet上统一、开放的标准,如HTTP、XML、SOAP(简单对象访问协议)、WSDL等,所以WS几乎可以在任何可以建立internet连接的系统之间进行数据的交互(当然了,因为他适用的广度也就决定了其效率,不过我们的一般用法足够了)。
这边提到了SOAP协议,它是基于XML的网络信息交换的通讯协议。这边需要重点提一下,在我们SAP作为调用服务器的时候,会出现标签不能识别的错误(显示为‘框架错误:Exception occurred in library handler’),这时是因为我们SAP里面支持的 SOAP协议与我们的WSDL版本不同。要识别这种问题可以先将WSDL保存成本地文件,然后删除以下两段:
1.
……
2.
…….
另外值得注意的是有时候我们的WSDL中的
然后创建代理时选择Local File,选取修改好的WSDL文件,如果通过,则打以下note:
notes: note 1403271
可以完全解决WSDL解析的问题(Note是不能乱打滴,做好验证很重要)。
这边我简要阐述一下上图红框标记的部分,该部分填入参数SM59创建的RFC连接,注意是HTTP方式:
以WS地址 http://192.168.10.172:1000/Service1.asmx为例
一、当我们的连接目标仅有一个WS(Service1)的时候,则我们SM59直接创建连接,到目标(即Service1):
这种情况下,前图只需填入Destination参数(即RFC目标:ZYWS_TEST),Next即可。
二、如果我们的连接目标上存在多个WS,Service1仅仅是其中之一,那我们是不是就需要在SM59中创建多个连接呢?不需要:
我们的连接只到端口就OK,路径前缀(Path Prefix)留空。
创建代理的时候路径后缀(Path Suffix)填入我们的目标WS,Next即可:
这边我为什么要说这两种情形,因为WS和我们的SAP不在同一台服务器,我们创建完代理后,SAP端生成的WS代理信息只是当时的,它并不能即时获取WS端的最新信息,当WS端发生变动的时候,SAP却保留着变动前的版本,所以就要求我们的每个WS不要放入太多的方法。
其实一般通过URL的方式就足够了。那这边为什么要提一下这个HTTP的方式?我们知道,我们的WS所在的服务器很多情况下都是存在于internet上的某台服务器上的,不一定是我们的局域网,我们的客户大多数对于公司内部网络管理都是比较严格的,需要一定的权限才允许连接和访问外网,这种情况下我们可以通过开通某个代理端口,限定某个特定用户来实现与internet的信息交互,这样我们就需要在SM59中设置代理参数来实现:
第二步:创建逻辑端口
Tcode: LPCONFIG中的信息填写内容说明与上面 ※扩展中相似,不再赘述。
这边要注意的是:
SOAP Action的填写:打开WSDL文件,搜索‘SOAPAction:’标签,后面的http即完整的action名,最后’/’后面就是可调用方法,在左边‘操作’标签中选中方法名,在右边填入对应的http,如下图: