使用CSOM在Provider Hosted SharePoint App中获取列表项

时间:2015-01-15 13:48:42

标签: sharepoint office365 csom sharepoint-online

我有一些简单的代码,它使用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不会告诉我吗?)

帮助感激地收到了!

2 个答案:

答案 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;错误