我有一些简单的代码,它使用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 调用结束时,我可以访问列表标题(" MyList")和记录计数(总共7项)但 ListItemsCollection项目的计数始终为零。
不会抛出任何错误。
实际获取列表项需要做什么?我是否错过了对CSOM的另一个调用,或者他们是否是一个权限问题(如果出现这种情况,SharePoint Online不会告诉我吗?)
帮助感激地收到了!
答案 0 :(得分:0)
尝试使用'include'在客户端上下文中获取数据。
ClientContext.Load(list,a.Include(p => p.ItemCount,p => p.Title); ClientContext.ExecuteQuery();然后检查项目计数和标题是否存在。
请告知我们这个列表是否在app中。 如果它在主机网络上,那么您必须在appmanifest.xml->权限选项卡下提供读取权限
答案 1 :(得分:-1)
使用Sharepoint 2013 On-Premises和STS作为托管代理商时遇到了同样的问题。
相同的行为,没有错误,我使用CamlQuery.CreateAllItemsQuery()获得零项目/文档以获得" SELECT ALL" CamlQuery
我解决了这个问题,通过页面创建了一个新的app主体:
/layouts/15/appregnew.aspx
然后使用页面分配足够的权限:
/layouts/15/appinv.aspx
包含列表的HostWeb(不是AppWeb)。就我而言:
<AppPermissionRequests AllowAppOnlyPolicy="true">
<AppPermissionRequest Scope="http://sharepoint/content/sitecollection" Right="Manage"/>
</AppPermissionRequests>
还有一个bug(Sharepoint bug),因为在这种情况下,它并没有抛出拒绝访问权限#34;错误