2012-10-22 165 views
1

我想用SAP的函數創建一個RFC。我從這個函數生成了一個SAP數據源。當我去這個地址:http://xxx.xxx.com:8000/sap/bc/soap/wsdl11?sap-client=200&services=ZTEST我有這個頁面:發送一個請求到SOAP WSDL

<?xml version="1.0" encoding="UTF-8"?> 
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:s0="urn:sap-com:document:sap:rfc:functions" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="urn:sap-com:document:sap:rfc:functions"> 

    <types> 

    <xsd:schema targetNamespace="urn:sap-com:document:sap:rfc:functions"> 
     <xsd:element name="ZTEST"> 
     <xsd:complexType> 
      <xsd:all> 
      <xsd:element name="RESULT"> 
       <xsd:complexType> 
       <xsd:sequence> 
        <xsd:element name="item" minOccurs="0" maxOccurs="unbounded" type="s0:PA0105"> 
        </xsd:element> 
       </xsd:sequence> 
       </xsd:complexType> 
      </xsd:element> 
      </xsd:all> 
     </xsd:complexType> 
     </xsd:element> 
     <xsd:element name="ZTEST.Response"> 
     <xsd:complexType> 
      <xsd:all> 
      <xsd:element name="RESULT"> 
       <xsd:complexType> 
       <xsd:sequence> 
        <xsd:element name="item" minOccurs="0" maxOccurs="unbounded" type="s0:PA0105"> 
        </xsd:element> 
       </xsd:sequence> 
       </xsd:complexType> 
      </xsd:element> 
      </xsd:all> 
     </xsd:complexType> 
     </xsd:element> 
     <xsd:complexType name="PA0105"> 
     <xsd:sequence> 
      <xsd:element name="MANDT" minOccurs="0"> 
      <xsd:simpleType> 
       <xsd:restriction base="xsd:string"> 
       <xsd:maxLength value="3"> 
       </xsd:maxLength> 
       </xsd:restriction> 
      </xsd:simpleType> 
      </xsd:element> 
      <xsd:element name="PERNR" minOccurs="0"> 
      <xsd:simpleType> 
       <xsd:restriction base="xsd:string"> 
       <xsd:maxLength value="8"> 
       </xsd:maxLength> 
       <xsd:pattern value="\d*"> 
       </xsd:pattern> 
       </xsd:restriction> 
      </xsd:simpleType> 
      </xsd:element> 
      <xsd:element name="SUBTY" minOccurs="0"> 
      <xsd:simpleType> 
       <xsd:restriction base="xsd:string"> 
       <xsd:maxLength value="4"> 
       </xsd:maxLength> 
       </xsd:restriction> 
      </xsd:simpleType> 
      </xsd:element> 
      <xsd:element name="OBJPS" minOccurs="0"> 
      <xsd:simpleType> 
       <xsd:restriction base="xsd:string"> 
       <xsd:maxLength value="2"> 
       </xsd:maxLength> 
       </xsd:restriction> 
      </xsd:simpleType> 
      </xsd:element> 
      <xsd:element name="SPRPS" minOccurs="0"> 
      <xsd:simpleType> 
       <xsd:restriction base="xsd:string"> 
       <xsd:maxLength value="1"> 
       </xsd:maxLength> 
       </xsd:restriction> 
      </xsd:simpleType> 
      </xsd:element> 
      <xsd:element name="ENDDA" minOccurs="0" type="s0:date"> 
      </xsd:element> 
      <xsd:element name="BEGDA" minOccurs="0" type="s0:date"> 
      </xsd:element> 
      <xsd:element name="SEQNR" minOccurs="0"> 
      <xsd:simpleType> 
       <xsd:restriction base="xsd:string"> 
       <xsd:maxLength value="3"> 
       </xsd:maxLength> 
       <xsd:pattern value="\d*"> 
       </xsd:pattern> 
       </xsd:restriction> 
      </xsd:simpleType> 
      </xsd:element> 
      <xsd:element name="AEDTM" minOccurs="0" type="s0:date"> 
      </xsd:element> 
      <xsd:element name="UNAME" minOccurs="0"> 
      <xsd:simpleType> 
       <xsd:restriction base="xsd:string"> 
       <xsd:maxLength value="12"> 
       </xsd:maxLength> 
       </xsd:restriction> 
      </xsd:simpleType> 
      </xsd:element> 
      <xsd:element name="HISTO" minOccurs="0"> 
      <xsd:simpleType> 
       <xsd:restriction base="xsd:string"> 
       <xsd:maxLength value="1"> 
       </xsd:maxLength> 
       </xsd:restriction> 
      </xsd:simpleType> 
      </xsd:element> 
      <xsd:element name="ITXEX" minOccurs="0"> 
      <xsd:simpleType> 
       <xsd:restriction base="xsd:string"> 
       <xsd:maxLength value="1"> 
       </xsd:maxLength> 
       </xsd:restriction> 
      </xsd:simpleType> 
      </xsd:element> 
      <xsd:element name="REFEX" minOccurs="0"> 
      <xsd:simpleType> 
       <xsd:restriction base="xsd:string"> 
       <xsd:maxLength value="1"> 
       </xsd:maxLength> 
       </xsd:restriction> 
      </xsd:simpleType> 
      </xsd:element> 
      <xsd:element name="ORDEX" minOccurs="0"> 
      <xsd:simpleType> 
       <xsd:restriction base="xsd:string"> 
       <xsd:maxLength value="1"> 
       </xsd:maxLength> 
       </xsd:restriction> 
      </xsd:simpleType> 
      </xsd:element> 
      <xsd:element name="ITBLD" minOccurs="0"> 
      <xsd:simpleType> 
       <xsd:restriction base="xsd:string"> 
       <xsd:maxLength value="2"> 
       </xsd:maxLength> 
       </xsd:restriction> 
      </xsd:simpleType> 
      </xsd:element> 
      <xsd:element name="PREAS" minOccurs="0"> 
      <xsd:simpleType> 
       <xsd:restriction base="xsd:string"> 
       <xsd:maxLength value="2"> 
       </xsd:maxLength> 
       </xsd:restriction> 
      </xsd:simpleType> 
      </xsd:element> 
      <xsd:element name="FLAG1" minOccurs="0"> 
      <xsd:simpleType> 
       <xsd:restriction base="xsd:string"> 
       <xsd:maxLength value="1"> 
       </xsd:maxLength> 
       </xsd:restriction> 
      </xsd:simpleType> 
      </xsd:element> 
      <xsd:element name="FLAG2" minOccurs="0"> 
      <xsd:simpleType> 
       <xsd:restriction base="xsd:string"> 
       <xsd:maxLength value="1"> 
       </xsd:maxLength> 
       </xsd:restriction> 
      </xsd:simpleType> 
      </xsd:element> 
      <xsd:element name="FLAG3" minOccurs="0"> 
      <xsd:simpleType> 
       <xsd:restriction base="xsd:string"> 
       <xsd:maxLength value="1"> 
       </xsd:maxLength> 
       </xsd:restriction> 
      </xsd:simpleType> 
      </xsd:element> 
      <xsd:element name="FLAG4" minOccurs="0"> 
      <xsd:simpleType> 
       <xsd:restriction base="xsd:string"> 
       <xsd:maxLength value="1"> 
       </xsd:maxLength> 
       </xsd:restriction> 
      </xsd:simpleType> 
      </xsd:element> 
      <xsd:element name="RESE1" minOccurs="0"> 
      <xsd:simpleType> 
       <xsd:restriction base="xsd:string"> 
       <xsd:maxLength value="2"> 
       </xsd:maxLength> 
       </xsd:restriction> 
      </xsd:simpleType> 
      </xsd:element> 
      <xsd:element name="RESE2" minOccurs="0"> 
      <xsd:simpleType> 
       <xsd:restriction base="xsd:string"> 
       <xsd:maxLength value="2"> 
       </xsd:maxLength> 
       </xsd:restriction> 
      </xsd:simpleType> 
      </xsd:element> 
      <xsd:element name="GRPVL" minOccurs="0"> 
      <xsd:simpleType> 
       <xsd:restriction base="xsd:string"> 
       <xsd:maxLength value="4"> 
       </xsd:maxLength> 
       </xsd:restriction> 
      </xsd:simpleType> 
      </xsd:element> 
      <xsd:element name="USRTY" minOccurs="0"> 
      <xsd:simpleType> 
       <xsd:restriction base="xsd:string"> 
       <xsd:maxLength value="4"> 
       </xsd:maxLength> 
       </xsd:restriction> 
      </xsd:simpleType> 
      </xsd:element> 
      <xsd:element name="USRID" minOccurs="0"> 
      <xsd:simpleType> 
       <xsd:restriction base="xsd:string"> 
       <xsd:maxLength value="30"> 
       </xsd:maxLength> 
       </xsd:restriction> 
      </xsd:simpleType> 
      </xsd:element> 
      <xsd:element name="USRID_LONG" minOccurs="0"> 
      <xsd:simpleType> 
       <xsd:restriction base="xsd:string"> 
       <xsd:maxLength value="241"> 
       </xsd:maxLength> 
       </xsd:restriction> 
      </xsd:simpleType> 
      </xsd:element> 
     </xsd:sequence> 
     </xsd:complexType> 
     <xsd:simpleType name="date"> 
     <xsd:restriction base="xsd:string"> 
      <xsd:maxLength value="10"> 
      </xsd:maxLength> 
      <xsd:pattern value="....-..-.."> 
      </xsd:pattern> 
     </xsd:restriction> 
     </xsd:simpleType> 
    </xsd:schema> 
    </types> 
    <message name="ZTESTInput"> 
    <part name="parameters" element="s0:ZTEST"> 
    </part> 
    </message> 
    <message name="ZTESTOutput"> 
    <part name="parameters" element="s0:ZTEST.Response"> 
    </part> 
    </message> 
    <portType name="ZTESTPortType"> 
    <operation name="ZTEST"> 
     <input message="s0:ZTESTInput"> 
     </input> 
     <output message="s0:ZTESTOutput"> 
     </output> 
    </operation> 
    </portType> 
    <binding name="ZTESTBinding" type="s0:ZTESTPortType"> 
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"> 
    </soap:binding> 
    <operation name="ZTEST"> 
     <soap:operation soapAction="http://www.sap.com/ZTEST"> 
     </soap:operation> 
     <input> 
     <soap:body use="literal"> 
     </soap:body> 
     </input> 
     <output> 
     <soap:body use="literal"> 
     </soap:body> 
     </output> 
    </operation> 
    </binding> 
    <service name="ZTESTService"> 
    <documentation> 
     SAP Service ZTEST via SOAP</documentation> 
    <port name="ZTESTPortType" binding="s0:ZTESTBinding"> 
     <soap:address location="http://***.***.com:8000/sap/bc/soap/rfc"> 
     </soap:address> 
    </port> 
    </service> 
</definitions> 

我創建了一個JavaScript函數發送POST請求是這樣的:

var webServiceURL = 'http://xxx.xxx.com:8000/sap/bc/soap/wsdl11?sap-client=200&services=ZTEST'; 
function createSoapEnvelope(contents) { 
    return '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" ' + 
     'SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">' + 
     '<SOAP-ENV:Body>' + contents + '</SOAP-ENV:Body></SOAP-ENV:Envelope>'; 
} 

function HelloWorld() { 
    var message = createSoapEnvelope("<ZTEST/>"); 
    $.ajax({ 
     url: webServiceURL, 
     type: "POST", 
     dataType: "xml", 
     data: message, 
     async: false, 
     contentType: "text/xml; charset=\"utf-8\"", 
     success: OnSuccess, 
     processData: false, 
     error: OnError 
    }); 

    return false; 
} 

function OnSuccess(data, status) { 
    alert(data.d); 
} 

function OnError(request, status, error) { 
    alert('error'); 
} 

HelloWorld(); 

當我運行代碼,我留在描述。我應該有一個用戶列表。

Doy你有解決方案嗎?

謝謝!

編輯1

當我去​​

我有這樣的:

<soap:Envelope> 
    <soap:Body> 
    <soap:Fault> 
     <faultcode> 
     soap:Server</faultcode> 
     <faultstring> 
     No service definition, interface name, or binding specified</faultstring> 
     <detail> 
     <slibfault:timestamp> 
      Tue, 23 Oct 2012 12:06:02 GMT</slibfault:timestamp> 
     <slibfault:exception> 
      <slibfault:text> 
      No service definition, interface name, or binding specified</slibfault:text> 
      <slibfault:position program="CL_SRT_WSP_WSDL_HANDLER_HTTP==CP" include="CL_SRT_WSP_WSDL_HANDLER_HTTP==CM002" line="353 "/> 
     </slibfault:exception> 
     </detail> 
    </soap:Fault> 
    </soap:Body> 
</soap:Envelope> 

當我去這裏:http://xxx.xxx.com:8000/sap/bc/srt/rfc/sap/ZTEST/200/ztest/binding我有空白頁。

在soamanager,當我選擇我的web服務,我在配置與行:

  • 服務:ZTEST
  • 終點:ZTEST
  • 狀態:活動
  • 創建類型:手動創建

回答

1

它看起來像你發佈到錯誤的URI,我認爲身體也不正確。
由於我無法確定正確的值應該是什麼,所以我創建了一個類似的測試服務。一旦您看到我在使用工作服務中使用的URI和消息,您可能會發現錯誤。
我創建了一個ZTEST RFC,它簡單地返回一個參數message,其中包含字符串Hello, World!,從中生成SOAP服務,並使用soamanager事務爲您創建綁定(可能您忘記了最後一步?)。結果如下:

WSDL URI:http://sapserver/sap/bc/srt/wsdl/srvc_[guid]/wsdl11/allinone/ws_policy/document?sap-client=200

WSDL指定下面的結合的URI:http://sapserver/sap/bc/srt/rfc/sap/ztest/200/ztest/binding
http://sapserver/sap/bc/srt/rfc/sap/ztest/200/ztest/binding

發送POST請求(內容類型text/xml)來完成這些綁定的URI的以下正文返回預期結果:

<?xml version="1.0" encoding="UTF-8" ?> 
<SOAP-ENV:Envelope 
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <SOAP-ENV:Header> 
     <sapsess:Session xmlns:sapsess="http://www.sap.com/webas/630/soap/features/session/"> 
      <enableSession>true</enableSession> 
     </sapsess:Session> 
    </SOAP-ENV:Header> 
    <SOAP-ENV:Body> 
     <ns1:Ztest xmlns:ns1='urn:sap-com:document:sap:soap:functions:mc-style'></ns1:Ztest> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 
+0

我編輯了我的帖子。從功能的創建到Web服務的創建和測試,您有完整的指南嗎? – Dougui

+0

您是否在soamanager,Web服務配置視圖,概覽選項卡中看到「爲所選綁定或服務打開WSDL文檔」鏈接?如果您單擊此鏈接,則應該爲您的服務和選定的綁定看到有效的WSDL文檔。 –

+0

此鏈接的內容是第一個XML。 – Dougui