演练:使用查询对象模型创建基本搜索 Web 部件

上次修改时间: 2010年4月30日

适用范围: SharePoint Server 2010

本文内容
设置 Web 部件项目
实现 Web 部件
部署并测试 Web 部件

在 Microsoft SharePoint Server 2010 中,您可以自定义浏览器中的搜索中心页和 Web 部件的外观和功能。但是,如果要按无法通过浏览器实现的方式自定义这些页面或 Web 部件,则可以创建自定义 Web 部件,自定义 Web 部件使用查询对象模型或联合对象模型来执行搜索查询。

本演练中,您将创建一个自定义 Web 部件,该部件使用查询对象模型,来执行关键字查询并显示返回的搜索结果。有关演示如何通过使用联合对象模型来创建自定义搜索 Web 部件的示例,请参阅演练:使用联合对象模型创建基本搜索 Web 部件

您可在代码示例:自定义关键字搜索 Web 部件代码中找到 CustomKeywordSearch Web 部件示例的完整代码。

备注

本演练中介绍的 Web 部件提供非常基本的搜索功能。

本演练涉及到以下任务:

  • 设置 Web 部件项目

  • 实现 Web 部件

  • 部署并测试 Web 部件

先决条件

若要执行本演练,必须在您的开发计算机上安装了以下项:

  • Microsoft SharePoint Server 2010

  • Microsoft Visual Studio 2010 或类似的与 Microsoft .NET Framework 兼容的开发工具

设置 Web 部件项目

为 Web 部件创建项目

  1. 在 Visual Studio 2010 中的"文件"菜单上,指向"新建",然后单击"项目"。

  2. 在"项目类型"中的"C#"下,选择"SharePoint"。

  3. 在"模板"下,选择"空白 SharePoint 项目"。在"名称"字段中键入"CustomKeywordSearch",然后单击"确定"。

  4. 在"SharePoint 自定义向导"中,单击"部署为场解决方案",然后单击"完成"。

接下来,必须向您的 Web 部件项目添加需要的引用。

向 Web 部件项目添加引用

  1. 在"项目"菜单上单击"添加引用"。

  2. 在".NET"选项卡上,选择以下每个引用,然后在选择每项后单击"确定":

    • Microsoft.Office.Server

    • Microsoft.Office.Server.Search

在为 Web 部件添加代码之前,您必须向该项目中添加 Web 部件类文件,然后向该类中添加 using 语句。

向项目中添加 Web 部件类

  1. 在"项目"菜单上单击"添加新项"。

  2. 在"添加新项"对话框中,单击"Web 部件",键入"自定义关键字搜索",然后单击"添加"。

  3. 在类的开始处添加以下命名空间指令。

    using System.Data;
    using Microsoft.Office.Server.Search.Query;
    using Microsoft.Office.Server.Search.Administration;
    

实现 Web 部件

现在,您可编写代码来执行查询,然后呈现返回的搜索结果。

添加并呈现 Web 部件的子控件

  1. 在 Custom_Keyword_Search 类声明下面添加以下代码。

    Button queryButton;
    TextBox queryTextBox;
    Label resultsLabel;
    DataGrid resultsGrid;
    
  2. 在 CreateChildControls 方法中,添加代码来初始化控件,如下所示。

    protected override void CreateChildControls()
    {
         Controls.Clear();
         queryTextBox = new TextBox();
         this.Controls.Add(queryTextBox);
         queryButton = new Button();
         queryButton.Text = "Start Search";
         queryButton.Click += new EventHandler(queryButton_Click);
         this.Controls.Add(queryButton);
         resultsLabel = new Label();
         this.Controls.Add(resultsLabel);
    }
    
  3. 使用以下代码,为"queryButton"添加一个单击事件。

    void queryButton_Click(object sender, EventArgs e)
    {
         if (queryTextBox.Text != string.Empty)
         {
              ExecuteKeywordQuery(queryTextBox.Text);
         }
         else
         {
              resultsLabel.Text = "You must enter a search word.";
         }
    }
    
  4. 为 ExecuteKeywordQuery 方法添加以下代码。

    void ExecuteKeywordQuery(string queryText)
    {
         SearchServiceApplicationProxy proxy = (SearchServiceApplicationProxy)SearchServiceApplicationProxy.GetProxy
    (SPServiceContext.GetContext(SPContext.Current.Site));
         KeywordQuery query = new KeywordQuery(proxy);
         query.ResultsProvider = Microsoft.Office.Server.Search.Query.SearchProvider.Default;
         query.QueryText = queryText;
         query.ResultTypes|=ResultType.RelevantResults;
         ResultTableCollection searchResults = query.Execute();
    
         if(searchResults.Exists(ResultType.RelevantResults))
         {
              ResultTable searchResult = searchResults[ResultType.RelevantResults];
              DataTable result = new DataTable();
              result.TableName = "Result";
              result.Load(searchResult,LoadOption.OverwriteChanges);
              FillResultsGrid(result);
         }
    }
    
  5. 为 FillResultsGrid 方法添加以下代码。

    private void FillResultsGrid(DataTable resultTable)
    {
         //Instantiate the DataGrid
         resultsGrid = new DataGrid();
         //Set the DataSource
         resultsGrid.DataSource = resultTable;
         //Bind the data to the DataGrid
         resultsGrid.DataBind();
         //Add the DataGrid to the controls
         Controls.Add(resultsGrid);
    }
    

现在您即可部署 Web 部件。

部署并测试 Web 部件

部署 Web 部件

  1. 在"生成"菜单上,单击"部署解决方案"。

    部署过程将执行以下操作:

    • 生成 Web 部件 DLL 并将其部署到全局程序集缓存中。

    • 创建 Web 部件并将其部署到网站中。

    • 回收 Internet Information Services (IIS)。

    若在对项目进行更改后重新选择"部署解决方案",将收回解决方案的早期版本,并将其替换为最新版本。

  2. 从浏览器中,导航至要将 Web 部件添加到的 Web 部件页。

  3. 单击"网站操作"选项卡,然后单击"编辑页面"。

  4. 在任意 Web 部件区域中单击"添加 Web 部件"。

  5. 在"类别"中单击"自定义"。

  6. 在"Web 部件"中,单击"自定义关键字搜索",然后单击"添加"。

  7. 单击"保存并关闭"。验证自定义关键字搜索 Web 部件是否在该页上显示。

测试 Web 部件

  1. 在文本框中键入搜索术语,然后单击"开始搜索"。

  2. 在 Visual Studio 2010 中的"项目"菜单上,单击"CustomKeywordSearch 属性"。

  3. 在"调试"选项卡上的"启动操作"部分,单击"使用 URL 启动浏览器",然后键入指向您将 Web 部件添加到的 Web 部件页的 URL。关闭"属性"页。

    完成此步骤后,您即可在 Web 部件代码中设置一个断点,并通过单击"调试"菜单上的 F5 开始进行调试。

请参阅

引用

Microsoft.Office.Server.Search.Query.KeywordQuery