递归枚举SharePoint列表中的所有文件夹

3

使用SPQuery是否可以获取SharePoint文档库中所有文件夹的列表?

如果您打开Windows命令提示符并运行,您可以在文件系统中获得类似的内容:

 dir /b /A:D /S

问题是,如果您创建了一个简单的SPQuery并将viewAttributes设置为 Scope='RecursiveAll',则结果集包含项,但不包括文件夹。
或者我完全错过了什么?
更新:这个问题的原因是(曾经),我必须创建一个解决方案,其中“文件包”有意义。当我的客户谈论“文档”时,他实际上指的是可能由多个文件和一组共同的元数据组成的实体。
例如,文档可以命名为“A letter to my grandma”(属性:grandma's address,letter title),但它由几个文件组成:MS Word文档中的实际信函和JPEG图片。
因此,想法是我可以创建一个从文件夹派生出来的内容类型,并向该内容类型添加一些字段(地址、标题)。放置在该文件夹中的所有文件自然都会成为“文档”的一部分。
由于我们预计会有大量此类文档,因此我们也创建了常规类型文件夹的文件夹层次结构。
现在,我们来到问题:如何向我的客户显示像“最近的文档”这样的视图?这必须递归地工作,以枚举所有的“文档”。通过SPFolder对象进行递归太慢了,因为必须进行大量请求。我们希望通过递归的SPQuery,但这似乎无法解决。

很遗憾,在那篇帖子中并不清楚问题是否已解决。 - Ryan
你为什么要查询所有文件夹而不是遍历SPList.Folders呢?我现在正在进行一些查询测试,但我很好奇这个问题。 - Grace Note
@ccornet,是的,我不想以迭代的方式完成它。我更新了我的帖子以展示细节。 - naivists
@naivists:为什么不创建一个新的列表/内容类型来跟踪最近的文档并显示它们呢? 这样会更快。 - Aryabhatta
@Moron 已经做过了,但希望有更好的东西。 - naivists
@naivists:更好的意义是什么?空间利用率?向用户显示最近文档所需的时间?使用CreationDate/添加自己的日期列到每个文档(不会浪费空间)以跟踪最近的文档如何? - Aryabhatta
1个回答

1

你应该能够通过筛选内容类型来获取所有文件夹。

<Eq><FieldRef Name='ContentType' /><Value Type='Text'>Folder</Value></Eq>

这适用于您当前所在文件夹中的项目。我有一个文件夹层次结构,我必须仅挑选出一些特定文件夹(具有不同的内容类型)。有关详细信息,请参见我的帖子更新。 - naivists

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