我有一些简单的代码,使用CSOM读取SharePoint Online中托管的SharePoint列表中的项目 .
List list = ClientContext.Web.Lists.GetById(id);
ClientContext.Load(list,
a => a.ItemCount,
a => a.Title);
ListItemCollection items = list.GetItems( CamlQuery.CreateAllItemsQuery());
ClientContext.Load(items);
ClientContext.ExecuteQuery();
foreach (ListItem li in items)
{
.... // Do some Stuff ...
}
在ExecuteQuery调用结束时,我可以访问列表 Headers ("MyList")和记录计数(总共7项),但 ListItemsCollection items 的计数总是为零 .
没有错误被抛出 .
实际获取列表项需要做什么?我是否错过了对CSOM的另一个调用,或者他们是否是一个权限问题(如果出现这种情况,SharePoint Online是否会告诉我?)
帮助感激地收到了!
2 回答
尝试使用'include'来获取客户端上下文中的数据 .
ClientContext.Load(list,a.Include(p => p.ItemCount,p => p.Title); ClientContext.ExecuteQuery();然后检查项目计数和 Headers 是否存在 .
请告诉我们这个列表是否在应用程序中 . 如果它在主机Web上,则必须在appmanifest.xml-> permission选项卡下提供读取权限
使用Sharepoint 2013 On-Premises和STS作为truster broker时我遇到了同样的问题 .
相同的行为,没有错误,我使用CamlQuery.CreateAllItemsQuery()得到零项/文件来获得“SELECT ALL”CamlQuery
我解决了这个问题,通过页面创建了一个新的app主体:
然后使用该页面分配足够的权限:
到包含列表的HostWeb(不是AppWeb) . 就我而言:
还有一个bug(Sharepoint bug),因为在这种情况下,它不会抛出“拒绝访问”错误