FileLeafRef查询时,sharepoint caml查询无法正常工作

时间:2014-02-19 12:35:05

标签: vb.net sharepoint sharepoint-2010 caml

我想从特定sharepoint网站中名为“Pages”的列表中检索特定项目。我希望查询只返回与我查询的FileLeafRef关联的特定项。我已经构建了一个CAML查询,我已经通过SP CAML查询辅助工具测试了,所以我认为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)。任何人都可以通过识别此代码的错误来帮助我吗?

由于

编辑:我发现如果我用cam标签包装camlQuery xml,它会返回我想要的列表项。我不知道为什么。任何人都可以解释这些标签在这种情况下的作用,以及为什么查询最初返回15个结果而不仅仅是1?

1 个答案:

答案 0 :(得分:2)

这是因为客户端上下文CamlQuery对象不仅接受查询而且接受整个视图。这就是您需要提供View xml的原因。您可以找到视图元素结构here

可能它最初返回了15个项目因为您查看xml不正确。我猜它返回了列表中的所有项目。在使用服务器对象模型之前,我已经看到过这种行为 - 如果你的caml查询结构不正确或有任何错误,那么返回所有列表项。