2012-10-22 166 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