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接口,所以暂时我这里不考虑发布,做个记录,待以后回来可以看看,只是最初级的,所以有何不好.不对的地方,欢迎看到的同僚给予 ...
随机推荐
- 【转】 CATransform3D 矩阵变换之立方体旋转实现细节
原文网址:http://blog.csdn.net/ch_soft/article/details/7351896 第一部分.前几天做动画,使用到了CATransform3D ,由于没有学过计算机图形 ...
- 【转】VI/VIM常用命令
原文网址:http://www.blogjava.net/woxingwosu/archive/2007/09/06/125193.html Vi是“Visual interface”的简称,它在Li ...
- delphi 编译的时候 把Warning去除的方法
delphi 编译的时候 把Warning去除的方法 在 添加 {$WARNINGS OFF}
- POJ 1573 Robot Motion
Robot Motion Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 12978 Accepted: 6290 Des ...
- HDU 5832 A water problem
A water problem Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...
- Android 翻页效果 电子书
转载请注明来自: 5进制空间-android区 相信做电子书的同学,都遇到过翻页动画的需求吧,如果你不满足与点击滑动翻页的话,这边文章应该能够帮助到你. 先上个效果图: 效果还是很不错的,不过与ibo ...
- 从表中随机返回n条记录
创建测试用表: CREATE OR REPLACE VIEW V AS SELECT 'a' AS c FROM dual UNION ALL SELECT 'b' AS c FROM dual UN ...
- 【原】Storm实战
3.Storm实战 如何新建一个Storm 项目 本文简要概括如何新建一个Storm项目,步骤如下: 1.添加Storm 相关jar添加到类路径上. 2.如果使用多语言特性,将多语言实现的目录加到cl ...
- Ubuntu中、英文环境设置
改变ubuntu的中英文显示需要修改文件/etc/default/locale,具体设置过程为: 1.打开/etc/default/locale文件 #sudo vim /etc/default/lo ...
- 重新执笔,已是大三!Jekyll自定义主题开发
前言 “一转眼忘了时间 丢了感觉 黑了世界 再逞强 再疯狂 也会伤 不知 不觉 后知 后觉 然后 发现 失去 知觉 ”——<一吻不天荒> 感言 时间是把双刃剑,什么解决不了,忧烦的,慢慢变 ...