クエリ オブジェクト モデルを使用して基本的な検索 Web パーツを作成する

最終更新日: 2010年4月30日

適用対象: SharePoint Server 2010

この記事の内容
Web パーツ プロジェクトの設定
Web パーツの実装
Web パーツの展開とテスト

Microsoft SharePoint Server 2010 では、ブラウザーから、検索センター ページおよび Web パーツの表示形式と機能をカスタマイズできます。ブラウザーから実行できない方法でこれらのページや Web パーツをカスタマイズする場合は、クエリ オブジェクト モデルまたはフェデレーション オブジェクト モデルを使用して検索クエリを実行するカスタム Web パーツを作成できます。

このチュートリアルでは、クエリ オブジェクト モデルを使用して、キーワード クエリを実行し、返される検索結果を表示するカスタム Web パーツを作成します。フェデレーション オブジェクト モデルを使用して、カスタム検索 Web パーツを作成する方法を示す例については、「[チュートリアル] フェデレーション オブジェクト モデルを使用して、基本検索 Web パーツを作成する」を参照してください。

CustomKeywordSearch Web パーツ例の完全なコードは、「コード サンプル: カスタムのキーワード検索 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」と入力し、[OK] をクリックします。

  4. SharePoint カスタマイズ ウィザードで、[ファーム ソリューションとして配置する] をクリックし、[完了] をクリックします。

次に、Web パーツ プロジェクトに必要な参照を追加する必要があります。

Web パーツ プロジェクトへの参照を追加するには

  1. [プロジェクト] メニューの [参照の追加] をクリックします。

  2. [.NET] タブで、以下の各参照を選択し、選択ごとに [OK] をクリックします。

    • Microsoft.Office.Server

    • Microsoft.Office.Server.Search

Web パーツのコードを追加する前に、Web パーツ クラス ファイルをプロジェクトに追加し、その後 using ステートメントをクラスに追加する必要があります。

Web パーツ クラスをプロジェクトに追加するには

  1. [プロジェクト] メニューの [新しいアイテムの追加] をクリックします。

  2. [新しい項目の追加] ダイアログ ボックスで、[Web パーツ] をクリックし、「Custom Keyword Search」と入力して [追加] をクリックします。

  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 の click イベントを追加します。

    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 パーツを作成して、Web サイトに展開します。

    • インターネット インフォメーション サービス (IIS) をリサイクルします。

    プロジェクトの変更後に [ソリューションの展開] を再選択すると、以前のバージョンのソリューションが自動的に取り消され、最新のバージョンに置き換わります。

  2. ブラウザーから、Web パーツを追加する Web パーツ ページに移動します。

  3. [サイトの操作] タブ、[ページの編集] の順にクリックします。

  4. Web パーツ領域で、[Web パーツの追加] をクリックします。

  5. [カテゴリ] で、[Custom] をクリックします。

  6. [Web パーツ] で、[Custom Keyword Search]、[追加] の順にクリックします。

  7. [保存して閉じる] をクリックします。Custom Keyword Search Web パーツがページに表示されていることを確認してください。

Web パーツをテストするには

  1. テキスト ボックスに検索語句を入力し、[検索の開始] をクリックします。

  2. Visual Studio 2010 の [プロジェクト] メニューで、[CustomKeywordSearch プロパティ] をクリックします。

  3. [デバッグ] タブの [開始動作] セクションで、[ブラウザーを開始時に使用する URL] をクリックし、Web パーツを追加した Web パーツ ページへの URL を入力します。[プロパティ] ページを閉じます。

    この手順が完了したら、Web パーツ コードにブレークポイントを設定して、[デバッグ] メニューで [F5] をクリックしてデバッグを開始できます。

関連項目

参照

Microsoft.Office.Server.Search.Query.KeywordQuery