在用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步中创建好的代理拖拉到创建好的程序中,则会自动生成代码,将代码修改如下所示:

  1. "定义调用函数名称
  2. DATA: ZHELLOWORLD TYPE REF TO ZCRM_DELIVERYCO_SERVICE_SOAP .
  3. TRY.
  4. CREATE OBJECT ZHELLOWORLD
  5. * EXPORTING
  6. "定义逻辑端口名称
  7. LOGICAL_PORT_NAME = 'ZCRM_DELIVERYCO_SERVICE_SOAP'
  8. .
  9. CATCH CX_AI_SYSTEM_FAULT .
  10. ENDTRY.
  11. "定义输入输出参数类型
  12. data: ZOUTPUT type ZCRM_DELIVERY_WSHELLO_WORLD_SO .
  13. data: ZINPUT type ZCRM_DELIVERY_WSHELLO_WORLD_S1 .
  14. TRY.
  15. CALL METHOD XXXXXXXX->HELLO_WORLD
  16. EXPORTING
  17. INPUT = ZINPUT
  18. IMPORTING
  19. OUTPUT = ZOUTPUT
  20. .
  21. * CATCH CX_AI_SYSTEM_FAULT .
  22. * CATCH CX_AI_APPLICATION_FAULT .
  23. ENDTRY.

通过调试上述代码,则可以看到调用到的数据

如果对方给定的webservice的URL地址中包含有消息头文件,则在程序中需要添加消息头文件的说明,其代码如下:

  1. REPORT ZHELLOWORLD.
  2. "声明消息头header文件
  3. data: ws_header TYPE REF TO if_wsprotocol_ws_header,
  4. name TYPE string,
  5. namespace TYPE string.
  6.  
  7. DATA: ZHELLOWORLD TYPE REF TO ZCRM_DELIVERYCO_SERVICE_SOAP .
  8. TRY.
  9. CREATE OBJECT ZHELLOWORLD
  10. * EXPORTING
  11. * LOGICAL_PORT_NAME =
  12. .
  13.  
  14. ws_header ?= ZHELLOWORLD->get_protocol('IF_WSPROTOCOL_WS_HEADER').
  15. DATA: ixml TYPE REF TO if_ixml,
  16.  
  17. xml_document TYPE REF TO if_ixml_document,
  18.  
  19. xml_root TYPE REF TO if_ixml_element,
  20.  
  21. xml_element TYPE REF TO if_ixml_element,
  22.  
  23. xml_node TYPE REF TO if_ixml_node.
  24.  
  25. DATA l_xstring TYPE xstring.
  26.  
  27. DATA l_string TYPE string.
  28.  
  29. FIELD-SYMBOLS <fs_xstring> TYPE xstring.
  30.  
  31. CONCATENATE
  32.  
  33. "消息头文件header中的内容
  34. '<soap:Header>'
  35.  
  36. '<s1:MySoapHeader xmlns:s1="http://tempuri.org/">'
  37.  
  38. "'<s1:RegisteredUser>'
  39.  
  40. '<s1:Uname>admin</s1:Uname>'
  41.  
  42. '<s1:Password>admin</s1:Password>'
  43.  
  44. "'</s1:RegisteredUser>
  45. '</s1:MySoapHeader>'
  46.  
  47. '</soap:Header>' INTO l_string.
  48.  
  49. l_xstring = cl_proxy_service=>cstring2xstring( l_string ).
  50.  
  51. IF NOT l_string IS INITIAL.
  52. CALL FUNCTION 'SDIXML_XML_TO_DOM'
  53.  
  54. EXPORTING
  55.  
  56. xml = l_xstring
  57.  
  58. IMPORTING
  59.  
  60. document = xml_document
  61.  
  62. EXCEPTIONS
  63.  
  64. invalid_input = 1
  65.  
  66. OTHERS = 2.
  67.  
  68. IF sy-subrc = 0 AND NOT xml_document IS INITIAL.
  69.  
  70. xml_root = xml_document->get_root_element( ).
  71.  
  72. xml_element ?= xml_root->get_first_child( ).
  73.  
  74. WHILE NOT xml_element IS INITIAL.
  75.  
  76. name = xml_element->get_name( ).
  77.  
  78. namespace = 'http://tempuri.org/' . "xml_element->get_namespace_uri( ).
  79.  
  80. IF NOT xml_element IS INITIAL.
  81.  
  82. ENDIF.
  83.  
  84. ws_header->set_request_header(
  85.  
  86. name = name
  87.  
  88. namespace = namespace
  89.  
  90. dom = xml_element ).
  91.  
  92. xml_element ?= xml_element->get_next( ).
  93.  
  94. ENDWHILE.
  95.  
  96. ENDIF.
  97. ENDIF.
  98. CATCH CX_AI_SYSTEM_FAULT .
  99. ENDTRY.
  100.  
  101. data: OUTPUT type ZCRM_DELIVERY_WSHELLO_WORLD_SO .
  102. data: INPUT type ZCRM_DELIVERY_WSHELLO_WORLD_S1 .
  103.  
  104. TRY.
  105. CALL METHOD ZSALES->HELLO_WORLD
  106. EXPORTING
  107. INPUT = ZINPUT
  108. IMPORTING
  109. OUTPUT = ZOUTPUT
  110. .
  111. * CATCH CX_AI_SYSTEM_FAULT .
  112. * CATCH CX_AI_APPLICATION_FAULT .
  113. ENDTRY.

PI-webservice05-SAP调用外部webservice的更多相关文章

  1. 20170326 ABAP调用外部webservice实例

    调用外部webservice 使用Tcode: SICF SPROXSET      设置创建proxy 的权限 SE80 SOAMANAGER 一.目的:调用外部SRM系统的 webservice: ...

  2. 20170326 ABAP调用外部webservice 问题

    1.SE80 创建企业服务: 代理生成:出现错误 库处理程序中出现例外 错误的值:未知类型参考ns1:ArrayOfMLMatnrResource 尝试: 一.测试本地文件:---无效 1. 将网址链 ...

  3. VS2010调用外部webservice

    vs2010怎么调用web服务webservice方法,以vs2010为例.Vs的各个版本的此项功能操作基本一致. 工具/原料 vs2010 在“服务引用设置”对话框中,单击“添加 Web 引用”. ...

  4. ABAP调用外部WebService

    TCode:se80 选择 Package,输入我们自己的开发包,后回车 右击 开发包名称,选择菜单 出现创建向导窗体 选择"Service Consumer",点击 继续 选择& ...

  5. Java 常调用的Webservice接口的方法

    WebService是基于Web的服务,WebService使用SOAP协议实现跨编程语言和跨操作系统平台,接收和响应外部系统的某种请求,从而实现远程调用.WebService采用HTTP协议传输数据 ...

  6. 初学c# -- c#创建开机自启服调用外部交互式exe文件

    在c#创建的开机自启动服务里,调用外部可执行文件有以下问题:1.带窗口的交互式的exe文件调用后,实际并没有被执行:2.服务是随windows启动的,服务启动后可能windows桌面还没出来,会报错误 ...

  7. C++调用外部应用程序

    很多时候,我们的程序需要调用DOS命令,通过Dos命令调用其他程序从而完成所需要完成的功能.比如,调用Dos程序PKZIP完成ZIP包的解压缩,调用SVN完成文件的更新或者上传.但是在程序运行时又要求 ...

  8. 应用SAP PI实现SAP BW数据仓库对于第三方系统数据完美集成以及DELTA加载的分析

    注明:本篇的技术性细节参考了SAP SCN上的一篇SAP PI 和BW集成的文章,本篇文章并不打算过多探讨实现的技术细节,因为在SCN上的这篇英文文章已经完全涵盖了技术细节和配置步骤 大家可以通过搜索 ...

  9. JAVA 项目 调用外部的WebSerivce接口,入门实例 (一)

    前言: 第一次接触WebService,工作需要,调用外部的WebService接口,所以暂时我这里不考虑发布,做个记录,待以后回来可以看看,只是最初级的,所以有何不好.不对的地方,欢迎看到的同僚给予 ...

随机推荐

  1. 【转】 CATransform3D 矩阵变换之立方体旋转实现细节

    原文网址:http://blog.csdn.net/ch_soft/article/details/7351896 第一部分.前几天做动画,使用到了CATransform3D ,由于没有学过计算机图形 ...

  2. 【转】VI/VIM常用命令

    原文网址:http://www.blogjava.net/woxingwosu/archive/2007/09/06/125193.html Vi是“Visual interface”的简称,它在Li ...

  3. delphi 编译的时候 把Warning去除的方法

    delphi  编译的时候  把Warning去除的方法 在 添加 {$WARNINGS OFF}

  4. POJ 1573 Robot Motion

    Robot Motion Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12978   Accepted: 6290 Des ...

  5. HDU 5832 A water problem

    A water problem Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  6. Android 翻页效果 电子书

    转载请注明来自: 5进制空间-android区 相信做电子书的同学,都遇到过翻页动画的需求吧,如果你不满足与点击滑动翻页的话,这边文章应该能够帮助到你. 先上个效果图: 效果还是很不错的,不过与ibo ...

  7. 从表中随机返回n条记录

    创建测试用表: CREATE OR REPLACE VIEW V AS SELECT 'a' AS c FROM dual UNION ALL SELECT 'b' AS c FROM dual UN ...

  8. 【原】Storm实战

    3.Storm实战 如何新建一个Storm 项目 本文简要概括如何新建一个Storm项目,步骤如下: 1.添加Storm 相关jar添加到类路径上. 2.如果使用多语言特性,将多语言实现的目录加到cl ...

  9. Ubuntu中、英文环境设置

    改变ubuntu的中英文显示需要修改文件/etc/default/locale,具体设置过程为: 1.打开/etc/default/locale文件 #sudo vim /etc/default/lo ...

  10. 重新执笔,已是大三!Jekyll自定义主题开发

    前言 “一转眼忘了时间 丢了感觉 黑了世界 再逞强 再疯狂 也会伤 不知 不觉 后知 后觉 然后 发现 失去 知觉 ”——<一吻不天荒> 感言 时间是把双刃剑,什么解决不了,忧烦的,慢慢变 ...