2012-02-07 30 views
0

我正在動態構建CAML字符串,然後通過JavaScript向SharePoint Web服務發送請求以從列表中檢索一些(或多個)行。SharePoint dspsts.asmx上的CAML限制vs lists.asmx

當查詢lists.asmx我可以建立龐大的CAML查詢(1000+ OR巢),它工作正常,但查詢dspsts.asmx的時候,我只能累積到25再說了,我得到一個錯誤:

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
    <soap:Fault> 
     <faultcode>soap:Client.Dsp.Syntax</faultcode> 
     <faultstring>Query syntax error near 'Where'.</faultstring> 
     <detail> 
     <queryResponse xmlns="http://schemas.microsoft.com/sharepoint/dsp"> 
      <dsQueryResponse status="failure" /> 
     </queryResponse> 
     </detail> 
    </soap:Fault> 
    </soap:Body> 
</soap:Envelope> 

回答

1

不知道問題是什麼,但是對於與dspsts.asmx有關的任何事情的明顯答案是它是obsolete。這個Web服務在10年前就已經在Sharepoint 2.0中引入,並且在SP 2007中使用lists.asmx解決了很多限制。無論問題或問題是什麼,它都不會得到解決。

在SharePoint 2010中,最好是儘可能使用REST interface或各種client libraries(對於.NET,Silverlight,Javascript)。這些查詢和更新比使用Web服務要容易得多。您甚至可以在.NET客戶端中使用LINQ查詢,或者在Javascript中使用類似的函數,以使編碼更容易。

另外,使用1000個巢還遠遠不夠。我懷疑你正試圖執行類似於SQL運算符IN(a,b,c ,,,)的東西。在SharePoint 2010中,您可以使用運算符來完成此操作。

+0

謝謝。 lists.asmx上的1000多個嵌套只是一個測試,以查看它是否是SharePoint整體存在限制/問題,或者問題是否與dspsts.asmx有關。雖然dspsts.asmx會返回更乾淨的數據,但我只會使用lists.asmx作爲此實例。 現在我們仍然使用SP2007,但很快轉移到SP2010,所以有趣的是看到新的JavaScript函數和REST接口 – Fergal 2012-02-07 13:35:33