2

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

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

    标题月
    ----- -----
    子文件夹 1
    子文件夹 2
[] 有趣的事实 1 月 9 日
[] 有趣的事实 2 月 9 日
[] 有趣的事实 09 年 3 月
[] 迷人的数字 1 月 9 日
[] 迷人的数字 2 月 9 日
    ...

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

我想我也许可以使用自定义视图(选择 where type=folder 或 month=[month]),并且在一定程度上可行。但是,我只能让它在一个固定的月份工作,而我需要用户能够选择月份 - 也许通过页面上的下拉控件(我不想为 5 次创建 60 个视图)数月,我也不想每个月都创建一个新视图)。

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

任何指针不胜感激!顺便说一句,我知道文件夹不好的教条,一切都应该只是一个列表。但是,在考虑了替代方案后,我仍然喜欢使用文件夹——如果我能解决这个问题的话。

提前致谢。

4

6 回答 6

1

您能否创建一个从包含 Month 列的 Folder 继承的内容类型?然后,用此列表中的新文件夹内容类型替换普通文件夹内容类型。适当地设置月份,现在您的过滤器也将包含该文件夹。

于 2009-07-22T13:51:50.123 回答
0

我在过滤和 SPGridView 方面做了很多工作。也许你可以从我博客上的这篇文章中得到一些东西。正如我所说,不知道它是否会帮助你,但看看。

于 2009-05-31T15:45:03.683 回答
0

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

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

你正在做的是使用 SP-designer 来做,我找不到通过常规 webpart 来做的方法。

  1. 在页面的“设计”视图中拖放您的共享文档库
  2. 单击常用任务箭头 ( > ) 并自定义要显示的列
  3. 仍然在常见任务中,应用选择的过滤器。您在这里要做的是在您的月份列上应用过滤器,以便月份列等于当前月份/年份,对吗?过滤器只会让您选择输入内容,输入当前月份,例如 5 月 9 日。然后切换到“代码”视图
  4. 找到共享文档库,更具体地说,查找类似以下内容的内容: < ;Where> ;.... 这就是我之前提到的 CAML 查询。您可以对整个内容进行 HTML 解码,使其更具可读性。但本质上,过滤器是一个简单的 CAML 查询。您想修改该查询,以便您的月/年组合是当前月/年的组合。CAML 有一项称为 <MONTH/> 的功能,它以以下格式返回月份:mm/yyyy(您可能需要更改列的格式或创建一个新格式以方便您自己) - 您的 CAML 查询应该是有点像这样:

<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 编码上,我必须在 ';' 之前添加空格 所以你可以看到代码。

于 2009-05-07T16:05:58.210 回答
0

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

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

像这样: 进一步自定义 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>]]>

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

希望这可以帮助。如果您找到其他解决方案,请回发。

于 2009-04-30T23:25:29.650 回答
0

您可能想尝试使用由表单 webpart 过滤的 DataViewWebpart来执行此操作。管理文件夹的显示,然后单击它时管理文件夹项目将是一个问题。这就是我猜不使用文件夹的原因之一。

于 2009-04-29T22:47:48.500 回答
0

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

使用它也让我们大开眼界: ASP.NET Controls Filter Data View

总而言之,您可以简单地使用月份年份组合填充下拉列表,通过设计器视图在页面上添加共享文档库,使用“过滤器”连接到您的 ASP.NET 下拉列表,然后您就有了一个过滤器月。您也可以使用 XSL 将其默认为某个日期,现在都在代码视图中 :)

于 2009-05-01T00:29:07.063 回答