自定义企业级搜索 Web 部件入门

本主题介绍开发企业级搜索自定义 Web 部件的先决条件。

开发 Web 部件

Windows SharePoint Services 3.0 中的 Web 部件比早期版本的 Web 部件技术有所改进。可以使用 Windows SharePoint Services 3.0 Web 部件以及 Microsoft ASP.NET 2.0 Web 部件。

备注

在您创建 Windows SharePoint Services Web 部件时要使用的基类是 Microsoft.SharePoint.WebPartPages.WebPart 类。在您创建 ASP.NET Web 部件时要使用的基类是 System.Web.UI.WebControls.WebPart 类。

基类提供所有 Web 部件均通用的基本属性,例如 Title、Description 等等。可以向派生类添加自定义属性,这样,在运行时将呈现两组属性,但它们作为一组属性运行。

本质上,Web 部件是 .NET Web 自定义控件程序集,它使用 Windows SharePoint Services 格式 (.dwp) 或 ASP.NET 2.0 格式 (.webpart) 的 Web 部件描述文件。Web 部件描述文件可以存储在任何计算机上,并可以从任何计算机引用,它包含描述 Web 部件实例的 XML 元数据。Web 部件 .NET 程序集是一个 DLL,必须安装在使用 Web 部件的每台 Windows SharePoint Services 计算机上,并必须在这些计算机上注册。

在 ASP.NET 和 SharePoint Web 部件之间进行选择

通常,应该设计从 ASP.NET 2.0 WebPart 类继承的新的 Web 部件。ASP.NET Web 部件具有使用 .webpart 扩展名的描述文件名。对于未与 Windows SharePoint Services 紧密结合的网站,ASP.NET Web 部件提供最大的灵活性和兼容性。

Windows SharePoint Services 3.0 Web 部件提供与 Windows SharePoint Services 2.0 的向后兼容性。SharePoint Web 部件具有使用 .dwp 扩展名的描述文件名。SharePoint Web 部件包含额外的功能,但只能在 SharePoint 网站中使用。下面列出了 SharePoint Web 部件的额外功能。

  • SharePoint 网站中的跨页连接

  • Web 部件区域之外的 Web 部件之间的连接

  • 使用 Web 部件页面服务组件的客户端连接

  • Web 部件数据缓存

  • 使用 Web 部件工作项的异步处理

有关开发和连接 Web 部件、将 ASP.NET Web 部件导入到 Windows SharePoint Services 网站以及 SharePoint Web 部件对象模型的详细信息,请参阅 Windows SharePoint Services 3.0 SDK。

使用查询对象模型

企业级搜索提供了一个对象模型,可使用它以编程方式依照搜索组件来执行搜索查询。Microsoft.Office.Server.Search.Query 命名空间包含两个提供此功能的类:

有关使用企业级搜索查询对象模型的详细信息,请参阅Getting Started with the Enterprise Search Query Object Model

设置开发环境

设置 Web 部件开发环境时,受支持的方法是在 Office SharePoint Server 2007 服务器上进行本地开发。

可以使用 Microsoft Office SharePoint Designer 2007 将 Web 部件导入到网页,但不能创建新的 Web 部件。若要开发自定义 Web 部件程序集,需要使用开发工具(例如 Microsoft Visual Studio 2005)。如果使用 Visual Studio 2005,您将从完善的开发环境和丰富的调试功能中受益。有关使用 Visual Studio 2005 来创建 Web 部件的详细信息,请参阅以下链接:

创建 Web 部件项目

可以使用“Web 控件库”模板为 Web 部件创建 Visual Studio 2005 项目。此模板位于“新建项目”对话框中,在 C# 和 Visual Basic 的“Windows”节点内。

项目引用

从“Web 控件库”模板创建的项目包含对 ASP.NET Web 部件所需程序集的引用。但是,因为将使用企业级搜索查询对象模型来访问搜索组件,所以必须将某些程序集的引用添加到项目中。

因为使用的是企业级搜索查询对象模型,所以必须包括对 Microsoft.Office.Server.Search.dll 的引用。以下列表中的其他程序集引用是可选的,但在使用企业级搜索查询对象模型的大多数情况下,也将需要这些引用。

将以下引用添加到项目中:

  • Microsoft.SharePoint.dll

    如果自定义 Web 部件类从 Microsoft.SharePoint.WebPartPages.WebPart 类继承,则需要此程序集。如果需要使用 SPFarm 对象以编程方式检索有关承载 Web 部件的服务器的信息,则也可能需要此程序集。

  • Microsoft.Office.Server.dll

    如果需要使用 Office 服务器管理对象模型以编程方式为搜索组件检索有关共享服务提供程序的信息,则可能需要此程序集。

  • System.Data.dll

  • System.XML.dll

创建 Web 部件类

通过修改从“Web 控件库”模板创建的默认类来创建 Web 部件类。所做的修改取决于是要创建 ASP.NET Web 部件,还是要创建 SharePoint Web 部件。这些修改在以下各节说明。

还需要将 Microsoft.Office.Server.Search.Query 的 using 命名空间指令添加到这两种 Web 部件的类中。以下是要使用的语法:

using Microsoft.Office.Server.Search.Query;

针对 ASP.NET Web 部件的修改

除了 Query 命名空间之外,还必须添加 ASP.NET Web 部件类的命名空间指令。以下是要使用的语法:

using System.Web.UI.WebControls.WebParts;

针对 SharePoint Web 部件的修改

除了 Query 命名空间之外,还必须添加 SharePoint Web 部件类的命名空间指令。以下是要使用的语法:

using Microsoft.SharePoint.WebPartPages;

备注

为了确保 Web 部件类从您希望的类派生,请勿在同一个类中同时包含这两个命名空间指令。

如果创建的是 SharePoint Web 部件,则还需要为 Web 部件指定 XML 根命名空间。以下是要使用的语法:

...
using Microsoft.SharePoint.WebPartPages:
namespace CustomSearchWebPart
{
    [XmlRoot(Namespace = "CustomSearchWebPart")]
    public class customSearchQuery : WebPart
...

部署 Web 部件

编译项目时,可以选择强命名 Web 部件的程序集。如果要将 Web 部件部署到全局程序集缓存,则必须强命名程序集。如果不将它部署到全局程序集缓存,而是改为部署到 Office SharePoint Server 2007 网站的 _app_bin 目录,则可以根据需要强命名程序集。

有关强命名 Web 部件程序集和部署位置的详细信息,请参阅在虚拟服务器上管理 Web 部件(该链接可能指向英文页面)

编译 Web 部件之后,可以创建需要部署它的文件。对于 SharePoint Web 部件,创建 .dwp 文件;对于 ASP.NET Web 部件,创建 .webpart 文件。

创建 .dwp 文件

可以使用文本编辑器(例如记事本)创建和编辑简单的 .dwp 文件。下面的代码示例演示一个简单的 SharePoint Web 部件(无强名称)的 XML 语法:

<?xml version="1.0"?>
<WebPart xmlns="https://schemas.microsoft.com/WebPart/v2">
   <Assembly>CustomWebPart, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=null</Assembly>
   <TypeName>CustomWebPart.customSearchQuery</TypeName>
   <Title>Custom Search Web Part</Title>
</WebPart>

有关创建这些文件的详细信息,请参阅:

创建 .webpart 文件

可以使用文本编辑器(例如记事本)手动创建和编辑简单的 .webpart 文件。下面的代码示例演示一个简单的 Web 部件(无强名称)的 XML 语法:

<?xml version="1.0" encoding="utf-8"?>
<webParts>
  <webPart xmlns="https://schemas.microsoft.com/WebPart/v3">
    <metaData>
     <type name="CustomASPNETWebPart.customSearchQuery, CustomASPNETWebPart, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      <importErrorMessage>Cannot import this Web Part.</importErrorMessage>
    </metaData>
    <data>
      <properties>
        <property name="Title" type="string">Custom Search Query</property>
      </properties>
    </data>
  </webPart>
</webParts>

还可以通过从 ASP.NET 页面导出 Web 部件动态地生成 .webpart 文件。

注册 Web 部件并将其作为 SafeControl 导入

必须在 SafeControl 列表中注册 Web 部件,并将其导入到网站,才能在网站中使用 Web 部件。

在 SafeControl 列表中注册 Web 部件

  1. 打开位于网站根文件夹中的 web.config 文件。

  2. 找到 SafeControls 标记。

  3. 为 Web 部件添加标记。

下面的代码示例演示一个简单的 Web 部件(安装在 BIN 目录中,且无强名称)的标记语法:

<SafeControl Assembly="CustomSearchWebPart, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
 Namespace="CustomSearchWebPart" TypeName="*" Safe="True" />

最后一个部署步骤是将 Web 部件导入到网站。

将 Web 部件导入到网站

  1. 在浏览器中,打开要添加 Web 部件的页面,单击“网站操作”菜单,再单击“编辑网页”。

  2. 在页面处于编辑模式之后,为所要的 Web 部件区域(右或左)单击“添加 Web 部件”。

  3. 在“添加 Web 部件”对话框中,单击“高级 Web 部件库和选项”链接。

  4. 单击“浏览”,再单击“导入”。

  5. 单击“浏览”,导航到 .dwp 或 .webpart 文件的保存位置,选择它,再单击“打开”。

现在,应在对话框中列出您的 Web 部件。可以将该 Web 部件从对话框拖到页面上。

See Also

任务

演练:创建自定义企业级搜索 Web 部件

演练:创建 AdventureWorks 业务数据应用程序示例的 ASP.NET Web 部件

概念

生成自定义企业级搜索 Web 部件