SharePoint:筛选具有文件夹的列表

时间:2009-04-29 08:50:59

标签: sharepoint list filter view directory

我有一个SharePoint文档库,其文件夹结构用于组织文档(但也用于控制访问权限,通过文件夹的权限)。

库中的文档每月更新一次,我们将每个月的文档版本存储在同一个文件夹中;有一个用于过滤的“月”列将包含像Jan 09,Feb 09等的值。它看起来像这样:

    Title                  Month
    -----                  -----
    SubFolder 1
    SubFolder 2
[]  Interesting Facts      Jan 09
[]  Interesting Facts      Feb 09
[]  Interesting Facts      Mar 09
[]  Fascinating Numbers    Jan 09
[]  Fascinating Numbers    Feb 09
    ...

现在,因为用户通常对“当前”月份最感兴趣,所以我希望他们能够应用过滤器,并选择(比如说)09年3月。但是,如果他们使用内置的在过滤中,它还会过滤掉文件夹,并且无法再浏览文件夹层次结构。这不是好事 - 我希望他们能够在文件夹之间移动,过滤器完好无损,这样他们就不需要继续关闭它了。

我想我可以使用自定义视图(选择type = folder或month = [month]),并且可以使用自定义视图。但是,我只能让它用于修复月,而我需要用户能够选择月份 - 也许是通过页面上的下拉控件(我不是想要创建60个视图5年的月份,我也不想每个月创建一个新视图。

我认为可以在代码中创建视图(而不是通过UI),但我无法弄清楚如何在CAML查询中获取动态值(用户特定的设置)

任何指针都非常感激!顺便说一下,我 意识到文件夹不好的教条,而且一切都应该只是一个列表。但是,考虑到替代方案,我仍然赞成使用文件夹 - 如果我能解决这个问题。

提前致谢。

6 个答案:

答案 0 :(得分:1)

您是否可以创建一个继承自包含Month列的Folder的内容类型?然后,将此正常文件夹内容类型替换为此列表中的新文件夹内容类型。适当地设置月份,现在您的过滤器也将包含该文件夹。

答案 1 :(得分:0)

您可能想尝试使用DataViewWebpart filtered by a form webpart来执行此操作。 管理文件夹的显示然后单击文件夹项目将是一个问题。这是我猜不使用文件夹的原因之一。

答案 2 :(得分:0)

我目前遇到完全相同的问题,而不是简单的日期,我需要根据文件夹名称进行过滤,然后在页面上显示这些文件夹。一旦他们点击文件夹,他们就可以查看该文件夹的内容。

我还没有找到一个好的解决方案,但是对于你的,你应该能够使用contentQueryWebpart简单地创建一个自定义的CAML查询。

这样的事情: Further Customize CQWP

但你可以在文件夹的日期/时间进行,而不是别的。

您的查询类似于:

 <![CDATA[
    <Where>
     <Gt>
       <FieldRef Name="Created" Nullable="True" Type="DateTime"/>
       <Value Type="DateTime"><Today /></Value>
     </Gt>
   </Where>
   <OrderBy>
       <FieldRef Name="Created" Nullable="True" Type="DateTime"Ascending="FALSE"/>
   </OrderBy>]]>

我还会添加您要查找的文件夹的名称,以确保不会返回任何其他内容。

希望这会有所帮助。如果你找到另一个解决方案,请回发。

答案 3 :(得分:0)

我想我找到了你的解决方案 - DataWebPart实际上是帮助我的......

使用它也是一个巨大的大开眼界: ASP.NET Controls Filter Data View

总结一下,您只需使用月份组合填充下拉列表,通过设计器视图在页面上添加共享文档库,使用“过滤器”连接到ASP.NET下拉列表并使用过滤器在一个月。 您也可以使用XSL将其默认为某个日期,现在它都在代码视图中:)

答案 4 :(得分:0)

@Gary DATA视图的控件过滤器(我的第二个答案)确实保留了文件夹层次结构。

如果需要,您可以将其放入子文件夹,但在您的情况下,您只对显示一个特定文件夹感兴趣吗?

你正在做的是使用SP设计师来做这件事,我找不到通过常规网站部分做到这一点的方法。

  1. 将您的共享文档库拖放到页面的“设计”视图中
  2. 点击常规任务箭头(&gt;)并自定义要显示的列
  3. 仍然在常见任务中,应用选择的过滤器。你想在这里做的是在Month栏上应用一个过滤器,以便Month列等于当前月/年,对吗? 过滤器只允许您输入内容,键入当前月份,例如5月09日。然后切换到“代码”视图
  4. 查找共享文档库,更具体地说,查找以下内容: &amp; lt; Where&amp; gt; ....这是我之前提到过的CAML查询。你可以对整个事情进行HTML解码,这样它就更具可读性了。 但实质上,过滤器是一个简单的CAML查询。 您想要修改该查询,以便您的月/年组合是当前月/年的组合。 CAML有一个名为&lt; MONTH /&gt;的功能。以下列格式返回月份:mm / yyyy(您可能需要更改列上的格式或创建一个新的格式以使自己更容易) - 您的CAML查询应该是这样的:
  5. 
    <Where>
     <Eq>
       <FieldRef Name='Month'/>
       <Value Type='Number'><Month/></Value>
     </Eq>
    </Where>
    
    

    或 html编码:

    &lt ;Where&gt ;&lt ;Eq&gt ;&lt ;FieldRef Name='Month'/&gt ;&lt ;Value Type='Number'&gt ;&lt ;Month/&gt ;&lt ;/Value&gt ;&lt ;/Eq&gt ;&lt ;/Where&gt ;

    关键是,您只在数据视图的根级别创建过滤器。一旦他们点击文件夹,他们就会被扔进文档库并可以查看文件夹中的所有内容。

    希望这有帮助!

    ps:在html编码时我必须在';'之前添加空格所以你可以看到代码。

答案 5 :(得分:0)

我在过滤和SPGridView方面做了大量工作。也许你可以在我的博客上看到这个post。 正如我所说,不知道它是否会对你有所帮助,但看看。