Sharepoint 2013:将ItemCollection获取到List.GetItems

时间:2013-09-17 15:53:14

标签: c# sharepoint-2013

我有以下代码,它成功获取列表,但spListItems变量似乎永远不会产生任何结果,即使spList报告有listitems。

任何想法???

        var spContext = SharePointContextProvider.Current.GetSharePointContext(HttpContext);
        ListItemCollection spListItems = null;
        List spList = null;

        using (var clientContext = spContext.CreateUserClientContextForSPHost())
        {
            if (clientContext != null)
            {
                CamlQuery caml = new CamlQuery();

                // initilize our collections and vars
                spList = clientContext.Web.Lists.GetByTitle("EclipseAppPages");
                clientContext.Load<List>(spList);
                clientContext.ExecuteQuery();

                // do it again 
                spListItems = spList.GetItems(caml);
                clientContext.Load<ListItemCollection>(spListItems);
                clientContext.ExecuteQuery();

                // loop items and populate model
                foreach (ListItem l in spListItems)
                {
                    model.Add(l);
                }
            }
        }

编辑18-09:更多信息,这段代码托管在一个'autohosted'mvc应用程序中,用于sharepoint。我从我的AppWeb访问HostWeb,我的第一个结论是权限,但事实上我得到了列表,有趣的是当我调试变量时,spListItems的项目计数为&gt; 0但由于某种原因,上下文ISNT延迟加载值。

2 个答案:

答案 0 :(得分:0)

原来是应用权限,我找到了解决方法,试图找到查询字符串过滤器问题的解决方案。

如果遇到同样的问题,请进入AppParts AppManifest.xml并添加以下节点:

<AppPermissionRequests AllowAppOnlyPolicy="true">
<AppPermissionRequest   Scope="http://sharepoint/content/sitecollection/web"
         Right="FullControl" />
</AppPermissionRequests>

或者您可以通过visual studio向导执行此操作,双击AppManifest文件,转到permisions选项卡,Scope是'Web',权限'选择相关权限'。

有关应用权限的更多信息,请转到http://msdn.microsoft.com/en-us/library/fp179892(office.15).aspx

答案 1 :(得分:-1)

查询结果为空的原因是CamlQuery对象没有ViewXml或Query属性值。 阅读以下有关如何查询SharePoint列表的文章。 http://msdn.microsoft.com/en-us/library/ff798388.aspx

另外,使用RowLimit&amp; ViewFields属性用于限制结果,用于性能考虑。

如果您对此感到满意,也可以使用Linq到SharePoint。