C#和SharePoint 2013 - 了解上下文和列表

时间:2017-07-24 13:54:23

标签: c# sharepoint sharepoint-2013

我需要获取一个用户列表以及他们在SharePoint上可以访问的文件夹已经在复制文件但是无法理解网站的结构,因此我可以获得正确的列表名称该网站。

我的网址为https://mySPsite/sites/MySite

这是我用来在另一个将文件复制到站点的函数中设置上下文的URL。复制位置的格式略有不同,因为我使用SaveBinaryDirect和文件url,格式为/sites/MySite/Shared Documents/MyFolder/MySubFolder。文件复制例程工作正常。

我现在要做的是获取文件夹列表和有权访问它们的用户。这些文件夹是MySubFolder

中的所有MyFolder个文件夹

我遇到的问题是,无论文件夹名称的组合如何,我都会收到错误消息,说明在网站中找不到该列表。我使用下面发布的解决方案

using (var ctx = new ClientContext(webUri))
{

     var list = ctx.Web.Lists.GetByTitle(listTitle);
     var items = list.GetItems(CamlQuery.CreateAllFoldersQuery());
     ctx.Load(items, icol => icol.Include(i => i.RoleAssignments.Include( ra => ra.Member), i => i.DisplayName ));
     ctx.ExecuteQuery();
     foreach (var item in items)
     {
        Console.WriteLine("{0} folder permissions",item.DisplayName);
        foreach (var assignment in item.RoleAssignments)
        {
            Console.WriteLine(assignment.Member.Title);
        }
     }
}

由Vadim获取文件夹权限。我明显错过WebUrilistTitle之间的联系,并希望得到任何帮助。

1 个答案:

答案 0 :(得分:0)

这是正确的代码。成功的关键是设置适当的query.FolderServerRelativeUrl

private static void PrintFolderPermission(string webUri, string listTitle)
{
    using (var ctx = new ClientContext(webUri))
    {
        var list = ctx.Web.Lists.GetByTitle(listTitle);
        var query = CamlQuery.CreateAllFoldersQuery();
        query.FolderServerRelativeUrl = "/sites/custom-dev/Shared documents/MyFolder/MySubfolder";
        var items = list.GetItems(query);
        ctx.Load(items, icol => icol.Include(i => i.RoleAssignments.Include(ra => ra.Member), i => i.DisplayName));
        ctx.ExecuteQuery();
        foreach (var item in items)
        {
            Debug.WriteLine(item.DisplayName + " folder permissions");
            foreach (var assignment in item.RoleAssignments)
            {
                Debug.WriteLine(assignment.Member.Title);
            }
        }
    }
}