PI-webservice05-SAP调用外部webservice
2014-03-02 17:28
323 查看
在用webservice进行数据传输的过程中,SAP系统与.net开发的信息系统之间的数据调用。如何用SAP调用外部的.net系统发布的webservice程序来获取外部的数据,详情请见下文:
1,创建代理
事务码:SE80
![](http://www.dekevin.com/wp-content/uploads/2013/10/20131031055051_52458.jpg)
【右键】-【create】-【enterprise service】
![](http://www.dekevin.com/wp-content/uploads/2013/10/20131031055502_42404.png)
选择【service consumer】点击【继续】
![](http://www.dekevin.com/wp-content/uploads/2013/10/20131031055429_55604.png)
选择【URL/HTTP Destination】,点击【继续】
![](http://www.dekevin.com/wp-content/uploads/2013/10/20131031055607_30638.png)
填写URL地址,地址是wsdl结尾的地址,然后点击【继续】
![](http://www.dekevin.com/wp-content/uploads/2013/10/20131031055654_62277.png)
package处输入程序包,prefix处输入名称,request/task中输入请求号名称,点击【继续】
![](http://www.dekevin.com/wp-content/uploads/2013/10/20131031060452_80306.png)
点击【complete】
![](http://www.dekevin.com/wp-content/uploads/2013/10/20131031061230_76016.jpg)
然后点击【保存】,然后进行【激活】,则代理就创建好了
2,调用逻辑代理端口
事务码:LPCONFIG
![](http://www.dekevin.com/wp-content/uploads/2013/10/20131031062255_52848.jpg)
填写【代理类】名称,【逻辑端口】名称(代理名称就是上创建的代理名称,逻辑端口名称与代理类名称相同即可),勾选【缺省端口】,点击创建
![](http://www.dekevin.com/wp-content/uploads/2013/10/20131031062454_52050.jpg)
填写【描述】,勾选【全局设置】中的【状态管理】,保存
![](http://www.dekevin.com/wp-content/uploads/2013/10/20131031063915_39534.jpg)
填写【调用参数】中的URL地址(以?wsdl结束的地址),然后保存
![](http://www.dekevin.com/wp-content/uploads/2013/10/20131031064328_84169.jpg)
输入对应的URL地址中的对应方法的soapAction找到如下部分代码:
![](http://www.dekevin.com/wp-content/uploads/2013/11/20131106023957_69161.jpg)
将其中的soapaction部分放入到SOAP操作,点击【保存】,然后点击【激活】
3,创建调用程序
事务码:SE38
![](http://www.dekevin.com/wp-content/uploads/2013/11/20131106024211_44294.jpg)
填写程序名称,点击【创建】
![](http://www.dekevin.com/wp-content/uploads/2013/11/20131106024302_97590.jpg)
填写【title】,选择【type】,然后点击【保存】
![](http://www.dekevin.com/wp-content/uploads/2013/11/20131106024353_92508.jpg)
选择【开发类】,点击【保存】,输入请求号,程序就创建好了
SAP程序中撰写调用.net中的webservice的中的helloworld方法程序,直接第1步中创建好的代理拖拉到创建好的程序中,则会自动生成代码,将代码修改如下所示:
通过调试上述代码,则可以看到调用到的数据
如果对方给定的webservice的URL地址中包含有消息头文件,则在程序中需要添加消息头文件的说明,其代码如下:
1,创建代理
事务码:SE80
![](http://www.dekevin.com/wp-content/uploads/2013/10/20131031055051_52458.jpg)
【右键】-【create】-【enterprise service】
![](http://www.dekevin.com/wp-content/uploads/2013/10/20131031055502_42404.png)
选择【service consumer】点击【继续】
![](http://www.dekevin.com/wp-content/uploads/2013/10/20131031055429_55604.png)
选择【URL/HTTP Destination】,点击【继续】
![](http://www.dekevin.com/wp-content/uploads/2013/10/20131031055607_30638.png)
填写URL地址,地址是wsdl结尾的地址,然后点击【继续】
![](http://www.dekevin.com/wp-content/uploads/2013/10/20131031055654_62277.png)
package处输入程序包,prefix处输入名称,request/task中输入请求号名称,点击【继续】
![](http://www.dekevin.com/wp-content/uploads/2013/10/20131031060452_80306.png)
点击【complete】
![](http://www.dekevin.com/wp-content/uploads/2013/10/20131031061230_76016.jpg)
然后点击【保存】,然后进行【激活】,则代理就创建好了
2,调用逻辑代理端口
事务码:LPCONFIG
![](http://www.dekevin.com/wp-content/uploads/2013/10/20131031062255_52848.jpg)
填写【代理类】名称,【逻辑端口】名称(代理名称就是上创建的代理名称,逻辑端口名称与代理类名称相同即可),勾选【缺省端口】,点击创建
![](http://www.dekevin.com/wp-content/uploads/2013/10/20131031062454_52050.jpg)
填写【描述】,勾选【全局设置】中的【状态管理】,保存
![](http://www.dekevin.com/wp-content/uploads/2013/10/20131031063915_39534.jpg)
填写【调用参数】中的URL地址(以?wsdl结束的地址),然后保存
![](http://www.dekevin.com/wp-content/uploads/2013/10/20131031064328_84169.jpg)
输入对应的URL地址中的对应方法的soapAction找到如下部分代码:
![](http://www.dekevin.com/wp-content/uploads/2013/11/20131106023957_69161.jpg)
将其中的soapaction部分放入到SOAP操作,点击【保存】,然后点击【激活】
3,创建调用程序
事务码:SE38
![](http://www.dekevin.com/wp-content/uploads/2013/11/20131106024211_44294.jpg)
填写程序名称,点击【创建】
![](http://www.dekevin.com/wp-content/uploads/2013/11/20131106024302_97590.jpg)
填写【title】,选择【type】,然后点击【保存】
![](http://www.dekevin.com/wp-content/uploads/2013/11/20131106024353_92508.jpg)
选择【开发类】,点击【保存】,输入请求号,程序就创建好了
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.
相关文章推荐
- SAP用Function发布供外部调用的webservice
- PI-webservice06-调用外部webservice过程中注意问题
- java调用外部webservice接口的方法
- vs2008开发的webservice让外部程序调用问题。
- MyEclipse6.0 安装axis2插件, 调用加密的SAP webservice
- ABAP调用外部WebService
- 20170326 ABAP调用外部webservice 问题
- SAP与外部WebService接口的链接
- SAP 调用外部程序
- SAP&Java WebService(三) ----JAVA调用SAP生成的WebService
- SAP调用外部web service
- VS Net 调用SAP Webservice
- SAP调用外部数据库
- SAP调用外部web service
- java调用sap的webservice(需要登录验证)
- SAP中调用外部程序(RFC)
- 20170326 ABAP调用外部webservice实例
- SAP调用外部数据库
- Java通过Axis2调用SAP的Webservice
- SAP 调用外部系统