20170326 ABAP調用外部webservice實例


調用外部webservice 使用Tcode;

SICF

SPROXSET      設置創建proxy 的權限

SE80

SOAMANAGER

 

 

 

一、目的:調用外部SRM系統的 webservice:
http://10.4.64.19:8090/srm/service/IMatnrResourceService?wsdl

:這個是我們這邊測試系統的地址
8090是端口號
10.4.64.19是服務器地址 

 

二、實施

**前提:外部提供可用的web service,通常為鏈接

步驟: 1. SE80,創建web service proxy 1)SE80,選擇package,右擊->create->Enterprise service 2) Object Type, 選擇Service Consumer,繼續 3)Select source,選擇URL/HTTP Destination(有時只有URL),繼續 4)URL中輸入網址,繼續 5)分配package和前綴(隨意),完成 6)保存,激活

 

生產PROXY: ZTST_SRM_001CO_IMATNR_RESOURCE

 注意:保存,激活!

+1,

激活后可以F8 運行

重點提前說:soamanage web服務配置時注意!!!

這四項不要填錯:

 
 
 



 

2. LPCONFIG,創建邏輯端口(這個tcode 已棄用了->soamanager)

 

1)輸入proxy class(第1步中生成的proxy name)和logical port(隨意,通常同 
proxy class),選中Default port
2)輸入描述,選中message id 和 state management
3)調用參數:URL輸入去掉?WSDL的地址
4)操作:右側SOAP操作,輸入xml文件中soapAction等號后的內容,包括引號

 

 代理類:ZTST_SRM_001CO_IMATNR_RESOURCE

保存!激活!

 

N二、SOAMANAGER 做web服務配置;

一、 Soamanager 配置服務消費者

輸入事務代碼跳轉至網頁:

http://upd.changhong.com:8000/sap/bc/webdynpro/sap/appl_soap_management?sap-language=ZH

 

Web服務配置

 

搜索依據:消費者代理;搜索模式:ZCO_REQUEST_HANDLE_MLPURCHASE;執行

 

選中消費者代理,點Apply Selection

 

創建邏輯端口,注意配置類型:手動配置

 

Transport Settings

URL Access Path:

/default/WP_SOA/APP_SRM_SERVICES/Proxy_Services/TA_SAP/handleMLPurchaseOrderService_PS?wsdl

Computer Name of Access URL: 10.3.15.224(測試)  10.3.15.214(生產)

User Name for Proxy Acess: sap

Password of Proxy User: password1

保存

SAP調用PROXY

 

ERP調用Proxy
創建函數ZMLSCP1_FR0013 用於發送采購訂單,傳入參數訂單抬頭和訂單行項。
代碼注意的幾個點:
1.	request_data 請求xml格式字符串的拼接(字符串拼接宏及轉義字符的處理)
2.	代理proxy的調用(異常的處理)
3.	return_data  返回xml格式字符串消息的解析(strans轉換的使用)

 

  

 


3.abap調用web service

例子:

DATA:lo_clientproxy TYPE REF TO z_proxy. "proxy class
DATA:lo_input TYPE z_input, "輸入參數
lo_output TYPE z_output. "輸出參數
 lo_request = request. CREATE OBJECT lo_clientproxy. TRY. CALL METHOD lo_clientproxy->z_method "web service函數
EXPORTING to_input = lo_input IMPORTING to_output = lo_output. * ***Write Out the Basic Information CATCH cx_ai_system_fault INTO g_sys_exception."捕獲錯誤
IF g_sys_exception IS NOT INITIAL. WRITE: 'Error:Communication Error'. ENDIF. CATCH cx_ai_application_fault INTO g_app_exception. IF g_app_exception IS NOT INITIAL. WRITE 'Error:Application Error'. ENDIF. ENDTRY.

 

 

測試問題一:
第一步時,遇到問題HTTP 404問題,但是鏈接直接可以瀏覽器打開

解決方案:
1. 將網址鏈接(JAVA發布的web service通常以?wsdl結尾),另存到本地,保存為
xml文件
2. 修改xml文件,刪除下面內容,刪除后保存
<wsdl:binding ……> …… </wsdl:binding>
<wsdl:port …….> …….</wsdl:port>
3. SE80創建web service proxy時,就Select source,選擇Local file,其他都一

剛看一個鏈接里有介紹:http://hi.baidu.com/tktik/item/fcaf0e53e26cbe3a32e0a951

測試問題二:
連接總是不同,一直有cx_ai_system_fault異常
解決方案:
將邏輯端口中的域名改為ip地址

**值得注意的是,實現該功能,不需要創建RFC連接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM