SharePoint CSOM - 如何过滤掉系统/默认文档库?

3

我需要从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及其属性中知道它是用户创建的列表(即包含我需要的文档)还是仅为系统库?

谢谢

2个回答

12

有一些条件可以尝试。您需要检查并选择适合您的组合:

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

谢谢,这三个属性帮助消除了几乎所有的“额外”文件,现在我只需要处理一些.aspx文件。关于BaseTemplate,这是否也会排除使用默认模板的用户创建的文档库? - Filip
如果您正在使用OneDrive/个人网站,则BaseTemplate也可以为700。 - Chuck Norris

2

您还可以通过 IsSystemList == false 和 AllowDeletion == true 来排除基于系统的列表和文档库,从而进行过滤。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接