我有以下代码,它成功获取列表,但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延迟加载值。
答案 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。