SAP调用外部 Web Service step by step
2013-05-06 16:22
316 查看
SAP调用外部 Web Service step by step
刚刚完成一个web service(以下简称WS)的工作,一点小的收获,分享一下。
我们SAP与其他管理系统进行数据交互,当然,idoc的效率是最高的,但是毕竟idoc是SAP的标准,我们做起来当然轻松,而且能提高客户满意度,但是做人嘛,不能太自私,毕竟跟我们奋斗在一线的还有我们的兄弟伙伴,强行要求idoc,必然导致工作量大大增加,那我们就应该在多种数据传输方法中寻求较优的解决方案。
第一步:创建代理
前序工作准备完毕进入SE80:
Create -> Enterprise Service
![](http://d.hiphotos.baidu.com/space/pic/item/9e3df8dcd100baa196cf1b384710b912c9fc2e55.jpg)
选择‘Service Consumer’客户代理:
![](http://s9.sinaimg.cn/middle/70bde68bgbea5a3fad0e8&690)
选择URL路径,填入伙伴提供的WS连接地址,Next->保存,代理创建完成(简单的WS代理创建到此结束):
![](http://s9.sinaimg.cn/middle/70bde68bgbea5a8d9c7f8&690)
![](http://s14.sinaimg.cn/middle/70bde68bgbea5ac2602cd&690)
※PS:
WS所使用的是Internet上统一、开放的标准,如HTTP、XML、SOAP(简单对象访问协议)、WSDL等,所以WS几乎可以在任何可以建立internet连接的系统之间进行数据的交互(当然了,因为他适用的广度也就决定了其效率,不过我们的一般用法足够了)。
这边提到了SOAP协议,它是基于XML的网络信息交换的通讯协议。这边需要重点提一下,在我们SAP作为调用服务器的时候,会出现标签不能识别的错误(显示为‘框架错误:Exception occurred in library handler’),这时是因为我们SAP里面支持的 SOAP协议与我们的WSDL版本不同。要识别这种问题可以先将WSDL保存成本地文件,然后删除以下两段:
1.
<wsdl:binding ……>
……
</wsdl:binding>
2.
<wsdl:port …….>
…….
</wsdl:port>
另外值得注意的是有时候我们的WSDL中的<Message>信息是不完整的,这种情况尽管去将Message标签删掉,因为我们最终一般都不会通过本地文件去创建代理。
然后创建代理时选择Local File,选取修改好的WSDL文件,如果通过,则打以下note:
notes: note 1403271
可以完全解决WSDL解析的问题(Note是不能乱打滴,做好验证很重要)。
※扩展
![](http://s10.sinaimg.cn/middle/70bde68bgbea5baa12cc9&690)
这边我简要阐述一下上图红框标记的部分,该部分填入参数SM59创建的RFC连接,注意是HTTP方式:
以WS地址 http://192.168.10.172:1000/Service1.asmx为例
一、当我们的连接目标仅有一个WS(Service1)的时候,则我们SM59直接创建连接,到目标(即Service1):
![](http://s9.sinaimg.cn/bmiddle/70bde68bgbea5baa60a58&690)
这种情况下,前图只需填入Destination参数(即RFC目标:ZYWS_TEST),Next即可。
![](http://s9.sinaimg.cn/middle/70bde68bgbea5baac4478&690)
二、如果我们的连接目标上存在多个WS,Service1仅仅是其中之一,那我们是不是就需要在SM59中创建多个连接呢?不需要:
![](http://s10.sinaimg.cn/bmiddle/70bde68bgbea5bab8bf79&690)
我们的连接只到端口就OK,路径前缀(Path Prefix)留空。
创建代理的时候路径后缀(Path Suffix)填入我们的目标WS,Next即可:
![](http://s4.sinaimg.cn/middle/70bde68bg7976f91268b3&690)
这边我为什么要说这两种情形,因为WS和我们的SAP不在同一台服务器,我们创建完代理后,SAP端生成的WS代理信息只是当时的,它并不能即时获取WS端的最新信息,当WS端发生变动的时候,SAP却保留着变动前的版本,所以就要求我们的每个WS不要放入太多的方法。
其实一般通过URL的方式就足够了。那这边为什么要提一下这个HTTP的方式?我们知道,我们的WS所在的服务器很多情况下都是存在于internet上的某台服务器上的,不一定是我们的局域网,我们的客户大多数对于公司内部网络管理都是比较严格的,需要一定的权限才允许连接和访问外网,这种情况下我们可以通过开通某个代理端口,限定某个特定用户来实现与internet的信息交互,这样我们就需要在SM59中设置代理参数来实现:
![](http://s11.sinaimg.cn/bmiddle/70bde68bgbea5c743f09a&690)
第二步:创建逻辑端口
Tcode: LPCONFIG中的信息填写内容说明与上面 ※扩展中相似,不再赘述。
这边要注意的是:
![](http://s5.sinaimg.cn/middle/70bde68bgbeb4b8a70654&690)
这个勾必须勾上。
SOAP Action的填写:打开WSDL文件,搜索‘SOAPAction:’标签,后面的http即完整的action名,最后’/’后面就是可调用方法,在左边‘操作’标签中选中方法名,在右边填入对应的http,如下图:
![](http://s16.sinaimg.cn/bmiddle/70bde68bgbeb4bf07bfff&690)
其实LPCONFIG 是已经过期的事务,因此SAP给我们提供另外一个功能---Tcode: SOAMANAGER.该功能主要使用于SAP WD的开发,这边简单介绍下WS中使用该功能的设置.输入Tcode: SOAMANAGER,如果不能成功web登录,请basis的同事帮忙激活Web gui 相关组件,并且通过RZ10添加主机映射文件。进入如下界面,选择:
![](http://s2.sinaimg.cn/bmiddle/70bde68bgbeb4c4088d51&690)
搜索项填入如下内容
![](http://s4.sinaimg.cn/bmiddle/70bde68bg79787a997ea3&690)
选中我们在se80中创建的代理名,点Apply Selection按钮:
![](http://s9.sinaimg.cn/bmiddle/70bde68bgbeb4dbdc2d58&690)
出现如下界面,选择创建逻辑端口:
![](http://s7.sinaimg.cn/bmiddle/70bde68bgbeb4de10e306&690)
![](http://s3.sinaimg.cn/bmiddle/70bde68bgbeb4e130fe82&690)
上图粗框中的勾记得钩上,因为这边的SOAP Action是自动带出来的(当然,也可以手动维护,但养成习惯总是好事),其他介绍 类似于 ※扩展 不再赘述,完成后会出现:
![](http://s3.sinaimg.cn/bmiddle/70bde68bgbeb4e40d6642&690)
![](http://s3.sinaimg.cn/bmiddle/70bde68bgbeb4e720bde2&690)
![](http://s9.sinaimg.cn/bmiddle/70bde68bg79787e1c8788&690)
注:当WS中新增了可调用方法时候,该逻辑端口需要删除重新创建,SAP目前好象还不能自动更新端口方法。(这样创建完后若调用出现问题,请参照 notes1361688). 剩下的工作就是去call method了,就不再献丑了。另外值得一提的就是调用中的数据类型经常出错问题,SOAMANAGER提供实时log查询功能(时间范围比较短),可以准确掌握出错位置信息。另外当系统出现特别奇怪现象且暂时无法解决的时候,我们同样可以通过直接编辑SOAP脚本,来实现数据交互,有空再探讨。
刚刚完成一个web service(以下简称WS)的工作,一点小的收获,分享一下。
我们SAP与其他管理系统进行数据交互,当然,idoc的效率是最高的,但是毕竟idoc是SAP的标准,我们做起来当然轻松,而且能提高客户满意度,但是做人嘛,不能太自私,毕竟跟我们奋斗在一线的还有我们的兄弟伙伴,强行要求idoc,必然导致工作量大大增加,那我们就应该在多种数据传输方法中寻求较优的解决方案。
第一步:创建代理
前序工作准备完毕进入SE80:
Create -> Enterprise Service
![](http://d.hiphotos.baidu.com/space/pic/item/9e3df8dcd100baa196cf1b384710b912c9fc2e55.jpg)
选择‘Service Consumer’客户代理:
选择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.
<wsdl:binding ……>
……
</wsdl:binding>
2.
<wsdl:port …….>
…….
</wsdl:port>
另外值得注意的是有时候我们的WSDL中的<Message>信息是不完整的,这种情况尽管去将Message标签删掉,因为我们最终一般都不会通过本地文件去创建代理。
然后创建代理时选择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,如下图:
其实LPCONFIG 是已经过期的事务,因此SAP给我们提供另外一个功能---Tcode: SOAMANAGER.该功能主要使用于SAP WD的开发,这边简单介绍下WS中使用该功能的设置.输入Tcode: SOAMANAGER,如果不能成功web登录,请basis的同事帮忙激活Web gui 相关组件,并且通过RZ10添加主机映射文件。进入如下界面,选择:
搜索项填入如下内容
选中我们在se80中创建的代理名,点Apply Selection按钮:
出现如下界面,选择创建逻辑端口:
上图粗框中的勾记得钩上,因为这边的SOAP Action是自动带出来的(当然,也可以手动维护,但养成习惯总是好事),其他介绍 类似于 ※扩展 不再赘述,完成后会出现:
注:当WS中新增了可调用方法时候,该逻辑端口需要删除重新创建,SAP目前好象还不能自动更新端口方法。(这样创建完后若调用出现问题,请参照 notes1361688). 剩下的工作就是去call method了,就不再献丑了。另外值得一提的就是调用中的数据类型经常出错问题,SOAMANAGER提供实时log查询功能(时间范围比较短),可以准确掌握出错位置信息。另外当系统出现特别奇怪现象且暂时无法解决的时候,我们同样可以通过直接编辑SOAP脚本,来实现数据交互,有空再探讨。
相关文章推荐
- SAP调用外部web service
- SAP调用外部web service
- SAP调用外部web service
- SAP调用外部web service
- SAP调用外部web service
- SAP调用外部web service
- step by step 教你用SAP NCO3.0调用RFC
- 外部系统调用SAP接口如何调试
- SAP 调用外部程序
- BW--Create Data Warehousing: Step by Step(摘自SAP Library)
- 如何调用windows phone 7.1的后台闹钟功能 step by step
- [Step By Step]SAP Visual Intelligence新增公式数据列(SAP HANA中提取数据)
- cxf动态调用外部web service 报告异常java.lang.NoSuchFieldError: QUALIFIED
- Java 基于web service 暴露接口 供外部调用
- SAP Ehancement Package 7 for ERP 6.0 Install Step By Step -04
- SAP登陆组设置Step by step.
- [Step By Step]在SAP Business Objects Data Services中使用SQL Transform将数据导入到SAP HANA中(SQL Transform)
- abap 调用外部web service 使用小结
- Step By Step(Lua调用C函数)
- [Step By Step]在SAP Business Objects Data Services中使用Reverse Pivot Transform列转行功能并导入到SAP HANA中(Reverse Pivot Transform)