当前位置:  开发笔记 > 编程语言 > 正文

CAML查询:如何从结果集中过滤文件夹?

如何解决《CAML查询:如何从结果集中过滤文件夹?》经验,为你挑选了4个好方法。

我正在使用caml查询来选择用户修改或添加的所有文档.查询以递归方式在指定网站集的所有子网站上运行.

现在问题是我无法摆脱也是结果集的一部分的文件夹.现在我正在从结果数据表中过滤它们.但我想知道:是否可以通过使用caml过滤掉结果集中的文件夹?



1> Johan Leino..:

这个CAML实际上可以解决这个问题:


    
        
        0
    

这不会给你任何文件夹.


这适用于CSOM 0

2> drax..:

所以,我想出来了:)你可以在你的caml查询中使用FieldRef ='ContentType',并指定你要从select中选择或排除的内容类型的typr.

所以在我的情况下,我已经将这个条件添加到我的caml表达式中:

Folder

注意:多语言设置存在问题.内容类型的名称可以不同,因此最好从资源中获取内容类型的名称

更新:

看起来我的假设太快了.我需要根据文件夹内容类型过滤掉所有的contett类型,因为在我们的项目中使用了这样的内容类型:(

我无法在caml中创建可行的查询,因此我将查看字段元素添加到我的查询中,该查询选择列表项的ContentTypeId,并过滤掉基于文件夹内容类型的行.

执行此操作的代码是微不足道的,但令我困扰的是,纯粹的caml无法完成这样简单的任务.


我赞成你的答案,因为Johan Leino的答案适用于SharePoint 2013.这应该是截至目前已接受的答案.

3> Peter Jacoby..:

如果您正在使用文件夹并且正在使用SPQuery对象,则可能还需要使用ViewAttributes字段来允许递归项检索。将值设置为Scope =“ Recursive”将从子文件夹中检索项目,而不会在结果集中检索文件夹对象。

myQuery.ViewAttributes = "Scope=\"Recursive\"";



4> JohnC..:

根据CAML Designer(由Karine Bosch和Andy Van Steenbergen创建并由Belux Information Worker用户组分发)的输出,正确的CAML语法是:


  
    
    0
  


  

我在PowerShell中对此进行了测试并得到了预期的结果:

$qry = new-object Microsoft.SharePoint.SPQuery
$qry.Query = "0"

$items = $lib.GetItems($qry)
$items.Count

如果您愿意,可以使用SPQuery对象属性ViewAttributes 替换CAML中的标记,即$qry.ViewAttributes = “Scope=’RecursiveAll’".

在测试时,请确保每次都重新实例化SPQuery对象,因为您无法简单地重新分配Query属性.执行查询后,将忽略分配给Query属性的任何新值.因此,执行整个PowerShell片段.

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有