【问题标题】:Sharepoint CSOM - how to filter out system/default document libraries?Sharepoint CSOM - 如何过滤掉系统/默认文档库?
【发布时间】:2016-06-08 14:04:49
【问题描述】:

我需要从 Sharepoint 站点获取所有文档。我从获取所有文档库开始:

private IEnumerable<List> GetAllDocumentLibraries(ClientContext context)
{
    var lists = context.LoadQuery(context.Web.Lists.Where(list => list.BaseType == BaseType.DocumentLibrary));
    context.ExecuteQuery();
    return lists;
}

然后从每个中获取所有项目..

var items = list.GetItems(CamlQuery.CreateAllItemsQuery());

_context.Load(items, i => i.Include(it => it.DisplayName, it => it.File));

_context.ExecuteQuery();

问题是有很多系统库返回文件,例如“controls”、“edit-mode-21”等。我不想按特定名称过滤掉它们,因为其他 SP 站点上可能还有其他名称。

我如何从List 及其属性中知道它是用户创建的列表(意味着我需要的文档)还是只是一个 sys.图书馆?

谢谢

【问题讨论】:

    标签: c# sharepoint csom


    【解决方案1】:

    您可以尝试几个条件。您需要检查并选择适合您情况的组合:

    • Hidden == false - 应排除大多数 SharePoint 内部(Master Page GallerySolution Gallery 和其他)。
    • IsSiteAssetsLibrary == false - 这将排除 Site AssetsSite Collection Images。但也可以排除用户创建的其他图片库。
    • IsCatalog == false - 大多数目录也被隐藏了,Style Library 除外。
    • BaseTemplate == 101 - 这是 DocumentLibrary 的模板。这将排除目录、图片库、页面库以及可能的其他一些内容。

    【讨论】:

    • 谢谢,这 3 个属性有助于消除几乎所有“额外”文件,我现在只需要处理一些 .aspx 文件。关于 BaseTemplate,这不排除用户创建的文档。使用默认模板的库?
    • 如果您使用的是 OneDrive/个人网站,BaseTemplate 也可以是 700。
    【解决方案2】:

    您还可以使用 IsSystemList == false 和 AllowDeletion == true 排除基于系统的列表和文档库过滤。

    【讨论】:

    • 似乎“list.IsSystemList == false”和“list.BaseTemplate == ListTemplateType.DocumentLibrary || list.BaseTemplate == ListTemplateType.MySiteDocumentLibrary”的组合非常适合隔离真实库。
    猜你喜欢
    • 2015-03-28
    • 2017-01-30
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    相关资源
    最近更新 更多