PI-webservice05-SAP调用外部webservice
在用webservice进行数据传输的过程中,SAP系统与.net开发的信息系统之间的数据调用。如何用SAP调用外部的.net系统发布的webservice程序来获取外部的数据,详情请见下文:
1,创建代理
事务码:SE80

【右键】-【create】-【enterprise service】

选择【service consumer】点击【继续】

选择【URL/HTTP Destination】,点击【继续】

填写URL地址,地址是wsdl结尾的地址,然后点击【继续】

package处输入程序包,prefix处输入名称,request/task中输入请求号名称,点击【继续】

点击【complete】

然后点击【保存】,然后进行【激活】,则代理就创建好了
2,调用逻辑代理端口
事务码:LPCONFIG

填写【代理类】名称,【逻辑端口】名称(代理名称就是上创建的代理名称,逻辑端口名称与代理类名称相同即可),勾选【缺省端口】,点击创建

填写【描述】,勾选【全局设置】中的【状态管理】,保存

填写【调用参数】中的URL地址(以?wsdl结束的地址),然后保存

输入对应的URL地址中的对应方法的soapAction找到如下部分代码:

将其中的soapaction部分放入到SOAP操作,点击【保存】,然后点击【激活】
3,创建调用程序
事务码:SE38

填写程序名称,点击【创建】

填写【title】,选择【type】,然后点击【保存】

选择【开发类】,点击【保存】,输入请求号,程序就创建好了
SAP程序中撰写调用.net中的webservice的中的helloworld方法程序,直接第1步中创建好的代理拖拉到创建好的程序中,则会自动生成代码,将代码修改如下所示:
"定义调用函数名称
DATA: ZHELLOWORLD TYPE REF TO ZCRM_DELIVERYCO_SERVICE_SOAP .
TRY.
CREATE OBJECT ZHELLOWORLD
* EXPORTING
"定义逻辑端口名称
LOGICAL_PORT_NAME = 'ZCRM_DELIVERYCO_SERVICE_SOAP'
.
CATCH CX_AI_SYSTEM_FAULT .
ENDTRY.
"定义输入输出参数类型
data: ZOUTPUT type ZCRM_DELIVERY_WSHELLO_WORLD_SO .
data: ZINPUT type ZCRM_DELIVERY_WSHELLO_WORLD_S1 .
TRY.
CALL METHOD XXXXXXXX->HELLO_WORLD
EXPORTING
INPUT = ZINPUT
IMPORTING
OUTPUT = ZOUTPUT
.
* CATCH CX_AI_SYSTEM_FAULT .
* CATCH CX_AI_APPLICATION_FAULT .
ENDTRY.
通过调试上述代码,则可以看到调用到的数据
如果对方给定的webservice的URL地址中包含有消息头文件,则在程序中需要添加消息头文件的说明,其代码如下:
REPORT ZHELLOWORLD.
"声明消息头header文件
data: ws_header TYPE REF TO if_wsprotocol_ws_header,
name TYPE string,
namespace TYPE string. DATA: ZHELLOWORLD TYPE REF TO ZCRM_DELIVERYCO_SERVICE_SOAP .
TRY.
CREATE OBJECT ZHELLOWORLD
* EXPORTING
* LOGICAL_PORT_NAME =
. ws_header ?= ZHELLOWORLD->get_protocol('IF_WSPROTOCOL_WS_HEADER').
DATA: ixml TYPE REF TO if_ixml, xml_document TYPE REF TO if_ixml_document, xml_root TYPE REF TO if_ixml_element, xml_element TYPE REF TO if_ixml_element, xml_node TYPE REF TO if_ixml_node. DATA l_xstring TYPE xstring. DATA l_string TYPE string. FIELD-SYMBOLS <fs_xstring> TYPE xstring. CONCATENATE "消息头文件header中的内容
'<soap:Header>' '<s1:MySoapHeader xmlns:s1="http://tempuri.org/">' "'<s1:RegisteredUser>' '<s1:Uname>admin</s1:Uname>' '<s1:Password>admin</s1:Password>' "'</s1:RegisteredUser>
'</s1:MySoapHeader>' '</soap:Header>' INTO l_string. l_xstring = cl_proxy_service=>cstring2xstring( l_string ). IF NOT l_string IS INITIAL.
CALL FUNCTION 'SDIXML_XML_TO_DOM' EXPORTING xml = l_xstring IMPORTING document = xml_document EXCEPTIONS invalid_input = 1 OTHERS = 2. IF sy-subrc = 0 AND NOT xml_document IS INITIAL. xml_root = xml_document->get_root_element( ). xml_element ?= xml_root->get_first_child( ). WHILE NOT xml_element IS INITIAL. name = xml_element->get_name( ). namespace = 'http://tempuri.org/' . "xml_element->get_namespace_uri( ). IF NOT xml_element IS INITIAL. ENDIF. ws_header->set_request_header( name = name namespace = namespace dom = xml_element ). xml_element ?= xml_element->get_next( ). ENDWHILE. ENDIF.
ENDIF.
CATCH CX_AI_SYSTEM_FAULT .
ENDTRY. data: OUTPUT type ZCRM_DELIVERY_WSHELLO_WORLD_SO .
data: INPUT type ZCRM_DELIVERY_WSHELLO_WORLD_S1 . TRY.
CALL METHOD ZSALES->HELLO_WORLD
EXPORTING
INPUT = ZINPUT
IMPORTING
OUTPUT = ZOUTPUT
.
* CATCH CX_AI_SYSTEM_FAULT .
* CATCH CX_AI_APPLICATION_FAULT .
ENDTRY.
PI-webservice05-SAP调用外部webservice的更多相关文章
- 20170326 ABAP调用外部webservice实例
调用外部webservice 使用Tcode: SICF SPROXSET 设置创建proxy 的权限 SE80 SOAMANAGER 一.目的:调用外部SRM系统的 webservice: ...
- 20170326 ABAP调用外部webservice 问题
1.SE80 创建企业服务: 代理生成:出现错误 库处理程序中出现例外 错误的值:未知类型参考ns1:ArrayOfMLMatnrResource 尝试: 一.测试本地文件:---无效 1. 将网址链 ...
- VS2010调用外部webservice
vs2010怎么调用web服务webservice方法,以vs2010为例.Vs的各个版本的此项功能操作基本一致. 工具/原料 vs2010 在“服务引用设置”对话框中,单击“添加 Web 引用”. ...
- ABAP调用外部WebService
TCode:se80 选择 Package,输入我们自己的开发包,后回车 右击 开发包名称,选择菜单 出现创建向导窗体 选择"Service Consumer",点击 继续 选择& ...
- Java 常调用的Webservice接口的方法
WebService是基于Web的服务,WebService使用SOAP协议实现跨编程语言和跨操作系统平台,接收和响应外部系统的某种请求,从而实现远程调用.WebService采用HTTP协议传输数据 ...
- 初学c# -- c#创建开机自启服调用外部交互式exe文件
在c#创建的开机自启动服务里,调用外部可执行文件有以下问题:1.带窗口的交互式的exe文件调用后,实际并没有被执行:2.服务是随windows启动的,服务启动后可能windows桌面还没出来,会报错误 ...
- C++调用外部应用程序
很多时候,我们的程序需要调用DOS命令,通过Dos命令调用其他程序从而完成所需要完成的功能.比如,调用Dos程序PKZIP完成ZIP包的解压缩,调用SVN完成文件的更新或者上传.但是在程序运行时又要求 ...
- 应用SAP PI实现SAP BW数据仓库对于第三方系统数据完美集成以及DELTA加载的分析
注明:本篇的技术性细节参考了SAP SCN上的一篇SAP PI 和BW集成的文章,本篇文章并不打算过多探讨实现的技术细节,因为在SCN上的这篇英文文章已经完全涵盖了技术细节和配置步骤 大家可以通过搜索 ...
- JAVA 项目 调用外部的WebSerivce接口,入门实例 (一)
前言: 第一次接触WebService,工作需要,调用外部的WebService接口,所以暂时我这里不考虑发布,做个记录,待以后回来可以看看,只是最初级的,所以有何不好.不对的地方,欢迎看到的同僚给予 ...
随机推荐
- C#的switch与二维数组.....
今天由于工作上的需要, 改了几行C# 的代码, 发现有一些细微的语法区别,与C++, 像switch语句那样, 我一般不会在default后面加上break,语句, 可是发现如果不加上的话,就会报下 ...
- Java 7爆最新漏洞,10年前的攻击手法仍有效
英文原文:New Reflection API affected by a known 10+ years old attack 据 SECLISTS 透露,他们发现新的 Reflection API ...
- mysql索引与优化
mysql 索引与优化 http://www.cnblogs.com/hustcat/archive/2009/10/28/1591648.html
- java web 学习七(HttpServletResponse对象1)
Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象.request和response对象即然代表请求和响应,那我们要 ...
- CodeForces 148D-Bag of mice(概率dp)
题意: 袋子里有w个白球b个黑球,现在两个人轮流每次取一个球(不放回),先取到白球的获胜,当后手取走一个球时,袋子里的球会随机的漏掉一个,问先手获胜的概率. 分析: dp[i][j]表示袋子中i个白球 ...
- XTUOJ 1246 Heartstone 贪心
题意:挺好懂得 分析:先计算出如果不能用(减2)操作,至少需要多少个(减3)操作,这个很好计算 然后就是尽量多的去减少(减3)操作,肯定先抹平 余2 和 余1 的,然后就可以了 #include &l ...
- Dubbo服务重载方法在JDK1.8上调用出错的问题(待解决)
据说是javassist版本太低不支持JDK1.8,但是测试升级了还是调用出错.预留,待解决.
- 在虚拟机中安装windows
前言: 本来在windows当中安装windows是一件很简单的事,但是在使用光盘进行安装的时候,发现无法进行安装. 思路: 将光盘进行提取成iso文件,一个光盘提取一个iso文件,从而存在两个iso ...
- 你是怎么理解“MVC”的
MVC就是三个字母的组合,M-模型, V-视图, C-控制器. 这些在百度上随便一索就可以索到,而且网上对这三个部分的解释又过于笼统,使人没法完全理解MVC的含义. 这里我简单的谈谈我对MVC这三 ...
- 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇06:计分》
6.计分 计分概述: 分值计量直接反应玩家在游戏中获得的成就感.因此,计分系统在游戏中显得尤为重要,有的反应在直接获取的分数上,有的反应在杀敌数量上等. 计分原理: 原理图,如图6-1所示. 图6-1 ...