Sharepoint CSOM - 如何筛选出 system/default 个文档库?

Sharepoint CSOM - how to filter out system/default document libraries?

我需要从 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();

问题是有很多 return 文件的系统库,例如 "controls"、"edit-mode-21" 和类似的。我不想通过特定名称过滤掉它们,因为在其他 SP 站点上可能还有其他名称。

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

谢谢

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

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

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