内容查询 Web 部件的新增内容
内容查询 Web 部件的新增内容
您好,我是 Dustin Anglin,是企业内容管理工作组的项目经理。今天,我将在这里介绍我们使用最常用的 SharePoint Web 部件之一“内容查询 Web 部件”(喜欢使用首字母缩略词的人更常称之为“CQWP”)所做的新事情。
如果您尚不了解它,请确保查看 Jim Masson 的 ECM 概述和 Sangya Singh 的 WCM 概述(该链接可能指向英文页面)。
针对新手介绍 CQWP
在这里针对你们中不熟悉 CQWP 的那些人简单介绍它的用途以及您可以将它用于哪些种类的任务。
内容查询 Web 部件是网站设计者可用于将有趣的相关信息片段聚合在网页上的工具,它允许您通过易于使用的 UI 构建查询,然后以独特的可配置方式显示该内容。
CQWP 旨在返回任何位置(包括单个列表或库以及整个网站集中的所有列表或库)的覆盖多种不同范围的汇总内容。在 SharePoint 2010 中,CQWP 单列表查询还经过优化,以利用智能索引和其他旨在改进对大型文档库的查询性能的工具来处理单个大型库。
有关 CQWP 的更深入的概述,建议您查看 George Perantatos 的 SharePoint 2007 博客文章(该链接可能指向英文页面)。
使用 CQWP 创建相关新闻故事 Web 部件
我发现学习某些内容的最佳方法是提供示例,因此让我们完成一个使用 CQWP 显示与我正在阅读的当前新闻故事相关的新闻故事的原型方案。另外,由于我们不想要较旧的故事,我们将确保我们的 Web 部件设置为只显示最近的故事,例如上周内创建的故事。
构建查询:基于上下文推动查询
内容查询 Web 部件可很好地用于在页面上显示查询的内容,但我不想每次创建新的新闻故事时都必须向 Web 部件区域中添加一个新的 CQWP,尤其在我将一再地设置同一 Web 部件时。
在 SharePoint 2007 中,您可以将 CQWP 添加到页面布局中,以便它显示在某种类型的所有页面上(例如,在此方案中,您可以创建“新闻文章”(News Article) 页面布局),问题是您只能在该 Web 部件上设置一个查询,这意味着使用“新闻文章”(News Article) 布局的每个页面将返回一组相同的结果。
我们要做的事情是让每个“新闻文章”(News Article) 页面显示与我正在阅读的当前文章 相关的文章,比如我正在阅读体育文章,则为相关的体育故事。
我们还需要一个元数据字段来描述当前文章是哪类“新闻文章”(News Article),例如“体育”(Sports) 或“商业”(Business),因此我们将添加一个名为“新闻类别”(News Category) 的新托管元数据字段,我们可以将它链接到术语库,并在其中创建新闻类别的托管分类以供我们的作者从中选取。
下面是我们的“新闻文章”(News Article) 页面布局外观的概念大纲:
我提到过我们希望 Web 部件由当前文章的上下文驱动,具体来说是当前文章的“新闻类别”(News Category)。在 SharePoint 2010 中,我们可以通过使用两个极好的新标记设置查询筛选器来实现此目的:
PageFieldValue
使用此标记可指定当前页面布局上使用当前页面的字段值动态替换筛选器值的字段。
例如:我创建了一个指定我的“新闻类别”(News Category) 是哪类故事(“商业”(Business)、“政治”(Politics)、“世界”(World)、“体育”(Sports) 等等…)的自定义托管元数据字段“新闻类别”(News Category),并将它添加到“新闻文章”(News Article) 页面布局。通过使用 PageFieldValue 标记,查询将根据当前页面的“新闻类别”(News Category) 进行更改。因此,如果当前页面的类别是“体育”(Sports),则它将返回 标记为“体育”(Sports) 的页面。
PageQueryString
就像 PageFieldValue 标记一样,您也可以选择查找 URL 查询字符串中要用于查询的值。
例如:您可以将查询字符串值添加到 URL 中(例如“&NewsCategory=Sports”)并将 CQWP 的查询设置为返回“新闻类别”(News Category) 字段等于“体育”(Sports) 或查询字符串中当前的任何值的页面。
当您希望在 Web 部件中显示不同的结果集而无需为每个不同的结果集创建新页面时,使用查询字符串参数较好。
在本示例中,我们将使用 PageFieldValue 标记将 CQWP 设置为返回其“新闻类别”(News Category) 字段包含当前文章的“新闻类别”(News Category) 字段中的相同元数据值的新闻文章。并且通过修改自定义“新闻文章”(News Article) 页面布局,CQWP 将自动显示在所有新的“新闻文章”(News Article) 页面上,已设置并准备好显示相关新闻文章。
稍微仔细一点查看查询,您会看到我添加了两个其他筛选器。第一个筛选器筛选出与当前文章同名的任何文章(实际上是确保查询结果中没有重复当前文章),第二个筛选器用于只返回最近 7 天内创建的新闻故事,从而确保结果总是最新。
另外,在此示例中,“新闻类别”(News Category) 元数据字段是 CQWP 完全支持的新托管元数据字段之一,包括单值和多值种类。虽然没有在本示例中演示,但 CQWP 还支持对企业关键字列和“所有标记”(All Tags) 列进行筛选,“所有标记”(All Tags) 列允许您查找查询项上的任何托管元数据标记,而不管项上的哪个元数据字段包含标记。
显示结果:从工具窗格映射列
一些人喜欢编写 XSLT,对于他们,我希望编写您所需的所有 XSLT,并使您执行更多功能。不过,对于我们中的其余人,一些人可能说服我们中的大多数人(我们仍旧喜欢你们 XSLT 编码人员),通过编写 XSLT 阐明如何显示字段 X、Y 和 Z 是我们希望做的最后一件事情。
在 SharePoint 2010 中,CQWP 的最棒的新功能之一是能够选择要直接显示在工具窗格 UI 中的字段。因此既然已定义了查询,让我们打开“样式表”部分并查看它:
转到工具窗格的“样式表”部分,其中有一个名为“要显示的字段”(Fields to display) 的新部分,它允许您键入要为任何定义的 XSL 样式显示的字段。因此,将“项目样式”(Item Style) 视为空白模板,定义可以显示多少内容及其位置,而非要显示哪些字段。在您选择了模板后,只需插入要显示的字段,方法是将它们键入到为给定项目样式显示的插槽中。
我选择使用具有图像(在左侧)、由文章标题表示的页面的链接和文章的简短摘录(我为页面布局定义的自定义字段)的样式。通过键入要在每个插槽中显示的字段,我获得以下结果:
处理 XSLT 所花的总时间:0.0 秒! 不错!
结束语
下面扼要重述我们实现的操作:
- 通过在一个位置修改页面布局,将 CQWP Web 部件添加到我的所有新闻故事页面中
- 将 Web 部件查询配置为基于当前页面的上下文动态驱动(体育文章返回相关体育文章、商业文章返回其他商业文章等等…)
- 不编写自定义 XSLT 来将 Web 部件的样式表配置为显示自定义字段。
下面是最终产品的外观:
现在,当我的内容作者编写新故事时,每篇文章将具有显示最近的相关文章的 Web 部件,并且我的内容作者不必在 Web 部件和查询上浪费时间。
总结
这只是您可以使用内容查询 Web 部件,通过利用上下文驱动查询的功能和配置如何显示内容的易于使用的无代码方式执行的一些极好的新事情的一个示例。请经常回来看看以了解有关 CQWP 和 SharePoint 2010 中其他激动人心的新 ECM 功能的详细信息。
这是一篇本地化的博客文章。请访问 What’s New with the Content Query Web Part 以查看原文