2014-02-19 103 views
0

我想從特定SharePoint站點中名爲「Pages」的列表中檢索特定項目。我希望查詢只返回與我正在查詢的FileLeafRef相關的特定項目。我已經構建了一個CAML查詢,我已經用SP CAML查詢幫助工具進行了測試,所以我認爲CAML查詢很好;我只是不知道如何使用客戶端上下文來查詢該項目。這裏是我現有的代碼:當通過FileLeafRef查詢時,sharepoint caml查詢不起作用

Dim FileLeafRef As String = "SomeArbitrarilyNamedThing.aspx" 

    Dim clientContext As New Microsoft.SharePoint.Client.ClientContext("http://myfqdn/newsandmedia/companynews") 
    Dim theList As Microsoft.SharePoint.Client.List = clientContext.Web.Lists.GetByTitle("Pages") 

    Dim camlQuery As New Microsoft.SharePoint.Client.CamlQuery() 

    camlQuery.ViewXml = String.Format("<Query><Where><Eq><FieldRef Name=""FileLeafRef"" /><Value Type=""Text"">{0}</Value></Eq></Where></Query>", FileLeafRef) 
    Console.WriteLine(camlQuery.ViewXml) 


    Dim listItems As Microsoft.SharePoint.Client.ListItemCollection = theList.GetItems(camlQuery) 

    clientContext.Load(theList) 
    clientContext.Load(listItems) 
    clientContext.ExecuteQuery() 

調用的executeQuery後,當我看看的ListItems集合,它具有比我查詢了一個項目的更多。 (具體來說它有15個,但應該只有一個具有所請求的FileLeafRef的項目)。任何人都可以通過確定這段代碼有什麼問題來幫助我嗎?

感謝

編輯:我既然發現,如果我查看標籤包裹camlQuery XML,它返回我想要的列表項。我不知道爲什麼。任何人都可以解釋這些標籤在這種情況下做了什麼,以及爲什麼查詢最初返回15個結果而不是1個?

回答

2

發生這種情況是因爲客戶端上下文CamlQuery對象不僅接受查詢,而且接受整個視圖。這就是爲什麼你需要提供View xml。你可以找到視圖元素結構here

可能它最初返回了15個項目,因爲您查看xml是不正確的。我想它返回列表中的所有項目。在使用服務器對象模型之前,我已經看到了這種行爲 - 如果您的caml查詢結構不正確或出錯,則返回所有列表項。