エクスポート (0) 印刷
すべて展開

Word 2007 で SharePoint Server 2007 クエリ サービスを使用するカスタム作業ウィンドウの作成

Office 2007

要約 :  Microsoft Office SharePoint Server 2007 エンタープライズ検索クエリ Web サービスを使用して検索クエリを実行するための Microsoft Office Word 2007 用の作業ウィンドウを作成します。

Office の使い方の表示

対象 :   Microsoft Office SharePoint Server 2007、Windows SharePoint Services 3.0、Microsoft Office Word 2007、Microsoft Visual Studio 2005、Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office System Second Edition

Joel Krist (Akona Systems)

2007 年 10 月

概要

Microsoft Office SharePoint Server 2007 では、エンタープライズ検索に複数の新機能が追加され、機能強化が行われています。新機能では、使い慣れた検索操作感覚はそのままに、検索結果の関連性の向上、人および専門家を検索する新機能、基幹業務 (LOB) アプリケーションのデータに索引を付けて検索する機能、および管理性と拡張性の強化が実現されています。Office SharePoint Server 2007 のエンタープライズ検索は XML Web サービスを通じてその検索機能を提供するため、SharePoint サイトのコンテキスト外のクライアント アプリケーションや Web アプリケーションからもエンタープライズ検索の結果にアクセスできます。

この記事では、Microsoft Office Word 2007 のカスタム作業ウィンドウを作成する方法について説明します。この作業ウィンドウでは、エンタープライズ検索クエリ Web サービスを使用して検索クエリが実行できます。

表示する カスタム作業ウィンドウの作成

ビデオを見る

長さ : 09:04 | サイズ : 19.7 MB | 形式 : WMV ファイル

コード作成 | 手順 | 関連情報

コード作成

次の例では、Microsoft Visual Studio 2005 Tools for the 2007 Office system Second Edition を使用してカスタム作業ウィンドウを作成します。このカスタム作業ウィンドウでは、シンプルなユーザー インターフェイスを通じて、ユーザーから検索キーワードを受け取り、検索結果を DataGridView コントロールに表示します。DataGridView コントロールの [Insert] ボタンをクリックすると、検索結果を Word 2007 に挿入することもできます。このプロセスには、次の 5 つの主な手順があります。

  1. Microsoft Visual Studio 2005 で Word 2007 アドイン プロジェクトを作成する。

  2. エンタープライズ検索クエリ Web サービスへの参照をアドイン プロジェクトに追加する。

  3. カスタム作業ウィンドウを実装するユーザー コントロールをプロジェクトに追加する。

  4. カスタム作業ウィンドウの UI を設計する。

  5. カスタム作業ウィンドウにエンタープライズ検索機能を追加する。

Visual Studio 2005 で Word アドイン プロジェクトを作成する

まず、Word 2007 アドイン プロジェクトを作成します。

Visual Studio 2005 で Word アドイン プロジェクトを作成するには

  1. Visual Studio 2005 を起動します。

  2. [ファイル] メニューの [新しいプロジェクト] をクリックします。

  3. [新しいプロジェクト] ダイアログ ボックスで、[Visual Basic] ノードまたは [Visual C#] ノードを展開してプロジェクトの種類を表示します。次に、[Office] ノードを展開し、[2007 アドイン] を選択します。

  4. [テンプレート] ペインで [Word アドイン] を選択します。

  5. プロジェクトに SearchTaskPane という名前を付けます。

  6. プロジェクトの [場所] を指定し、[OK] をクリックします。

    手順 3 で選択した言語に応じて、ThisAddIn.cs または ThisAddIn.vb という名前のファイルからなる Word アドイン プロジェクトが作成されます。

エンタープライズ検索クエリ Web サービスへの参照の追加

クライアントが Web サービスを見つけ、そのサービス記述を取得するプロセスは Web サービス探索と呼ばれます。Visual Studio 2005 の Web サービス探索のプロセスでは、Web サービス記述言語 (WSDL) を使用する XML ドキュメントのサービス記述を見つけるために、Web サイトに対してクエリを実行します。Web 参照がプロジェクトに追加されると、Visual Studio 2005 によって Web サービスのローカル表現を提供するプロキシ クラスが生成され、クライアント コードでは Web サービスと連携できるようになります。プロキシ クラス内のメソッドを呼び出すことによって、Web サービス メソッドにアクセスできるようになるのです。プロキシ クラスでは、クライアント アプリケーションと Web サービスとの間の通信を処理します。

エンタープライズ検索クエリ Web サービスに Web 参照を追加するには

  1. ソリューション エクスプローラで、[SearchTaskPane] プロジェクトを右クリックし、[Web 参照の追加] をクリックします。

  2. エンタープライズ検索クエリ Web サービスの URL を入力します。この Web サービスの既定の URL は次のとおりです。

    http://Server_Name/sites/Site_Name/_vti_bin/search.asmx

  3. [検索] をクリックして、Web サービスに関する情報を取得し、表示します。

  4. 図 1 に示すように、Web 参照名として QueryService を指定し、[参照の追加] をクリックして Web 参照をプロジェクトに追加します。

    サービス記述がダウンロードされ、アプリケーションとエンタープライズ検索クエリ Web サービスを連携させるためのプロキシ クラスが生成されます。

    図 1. [Web 参照の追加] ダイアログ ボックス


    [Web 参照の追加] ダイアログ ボックス

Noteメモ :

Windows SharePoint Services の検索でも、検索機能を公開するためのクエリ Web サービスが提供されます。エンタープライズ検索クエリ Web サービスと同じ Web メソッドをサポートしますが、Windows SharePoint Services 内の検索結果が返され、検索範囲は内部のサイトまたはリストになります。Windows SharePoint Services 内の検索クエリ Web サービスの URL は次のとおりです。

http://Server_Name/sites/Site_Name/_vti_bin/spsearch.asmx

詳細については、Windows SharePoint Services 3.0 SDK ドキュメントの「Windows SharePoint Services 検索クエリ Web サービス」を参照してください。

カスタム作業ウィンドウを実装するユーザー コントロールを追加する

カスタム作業ウィンドウはユーザー コントロールとして実装されます。

SearchTaskPane プロジェクトにユーザー コントロールを追加するには

  1. ソリューション エクスプローラで、[SearchTaskPane] プロジェクトを右クリックし、[新しい項目の追加] をクリックします。

  2. [新しい項目の追加] ダイアログ ボックスで、[ユーザー コントロール] をクリックし、図 2 に示すように、コントロールに SearchControl という名前を付けます。

    図 2. [新しい項目の追加] ダイアログ ボックス


    [新しい項目の追加] ダイアログ ボックス

  3. [追加] をクリックします。

    プロジェクトにユーザー コントロールが追加され、デザイナでコントロールが開きます。

カスタム作業ウィンドウのユーザー インターフェイスを設計する

この例で実装されるカスタム作業ウィンドウには、テキスト ボックス、ボタン、データ グリッド ビューからなるシンプルな UI が表示されます。データ グリッド ビューの列 1 のボタンをクリックすると、それに対応するアイテムのパスが Word 2007 文書に挿入されます。図 3 は、キーワード Inventory を使用した検索の結果を表示する作業ウィンドウを示しています。

Visual Studio で作業ウィンドウのユーザー インターフェイスを設計するには

  1. ユーザー コントロールの Width および Height プロパティを 300 x 400 に設定します。

  2. ユーザー コントロールに以下のコントロールを追加します。

    表 1. ユーザー コントロールに追加するコントロールの種類
    コントロールの種類 名前 目的

    TextBox

    txtKeyword

    キーワードを指定します。

    Button

    btnDoQuery

    クエリを実行します。

    DataGridView

    dgvQueryResults

    検索結果を表示します。

  3. 図 3 に示す作業ウィンドウと同じ外観になるよう、コントロールのサイズと位置を調整します。

    図 3. カスタム作業ウィンドウのユーザー インターフェイス


    カスタム作業ウィンドウのユーザー インターフェイス

  4. DataGridView コントロールにボタン列を追加します。

    1. DataGridView コントロールの右上隅にある矢印をクリックして [DataGridView のタスク] ウィンドウを表示し、[列の編集] リンクをクリックします。

    2. [追加] をクリックします。

    3. [列の追加] ダイアログ ボックスで、図 4 に示すように、列の名前に「Insert」と入力し、種類として [DataGridViewButtonColumn] を選択し、[ヘッダー テキスト] の内容を消去します。

      図 4. ボタン列の追加


      ボタン列の追加

    4. [追加] をクリックして列を追加します。

  5. 返された検索項目のパスを表示するための列を DataGridView コントロールに追加します。

    1. 図 5 に示すように、[列の追加] ダイアログ ボックスで列の名前に「Path」と入力し、種類として DataGridViewTextBoxColumn を選択し、[ヘッダー テキスト] に「Item Path」と入力して [読み取り専用] を選択します。

      図 5. パス列の追加


      [パス] 列の追加

    2. [追加] をクリックして列を追加します。

    3. [閉じる] をクリックして [列の追加] ダイアログ ボックスを閉じます。

  6. [列の編集] ダイアログ ボックスで、ボタン列を選択します。図 6 に示すように、Text プロパティを Insert、UseColumnTextForButtonValue プロパティを True、Width プロパティを 50 に設定します。

    図 6. ボタン列のプロパティの設定


    ボタン列のプロパティの設定

  7. [列の編集] ダイアログ ボックスで、[Item Path] 列を選択します。図 7 に示すように、DataPropertyName プロパティを Path、AutoSizeMode プロパティを DisplayedCells に設定します。

    図 7. [Item Path] 列のプロパティの設定


    [項目のパス] 列のプロパティの設定

  8. [OK] をクリックします。

  9. [DataGridView のタスク] ウィンドウで、[追加を有効にする]、[編集を有効にする]、および [削除を有効にする] オプションをオフにします。

カスタム作業ウィンドウにエンタープライズ検索機能を追加する

次に、カスタム作業ウィンドウにエンタープライズ検索機能を追加します。

カスタム作業ウィンドウにコードを追加してエンタープライズ検索を使用できるようにするには

  1. btnDoQuery ボタンをダブルクリックして、ユーザー コントロールのソース ファイルを開きます。

    SearchControl.vb または SearchControl.cs ソース ファイルが開き、btnDoQuery_Click イベント ハンドラが表示されます。

  2. 以下の Imports ステートメントまたは using ステートメントを SearchControl.vb または SearchControl.cs ソース ファイルのヘッダー部分に追加します。Imports および using ステートメントによって、名前空間の完全修飾パスを使用しなくても、Microsoft.Office.Interop.Word 名前空間に定義されたクラスと型を使用できるようになります。

    SearchControl.cs ファイルの場合は、ユーザー コントロールの作成時に Visual Studio 2005 によって生成された using ステートメントの後にステートメントを追加します。

    Imports Word = Microsoft.Office.Interop.Word
    

    using Word = Microsoft.Office.Interop.Word;
    
  3. DataGridView コントロールの AutoGenerateColumns プロパティを False に設定して、検索結果で返される列がすべて表示されるのを防ぎます。

  4. Visual Basic を使用してカスタム作業ウィンドウを実装している場合は、SearchControl クラス用のコンストラクタを作成します。図 8 に示すように、[クラス名] ドロップダウン リストで [SearchControl] を選択し、[メソッド名] ドロップダウン リストで [New] を選択します。

    図 8. SearchControl コンストラクタの追加


    SearchControl 構造体の追加

  5. SearchControl クラスのコンストラクタで、Visual Studio によって生成された InitializeComponent メソッドの呼び出しの後に、以下のコードを追加します。

    dgvQueryResults.AutoGenerateColumns = False
    

    dgvQueryResults.AutoGenerateColumns = false;
    
  6. btnDoQuery_Click イベント ハンドラの本文に以下のコードを追加します。

    ' The string containing the keyword to use in the search.
    Dim keywordString As String = txtKeyword.Text
    
    ' The XML string containing the query request information 
    ' for the Web service.
    Dim qXMLString As String = _
        "<QueryPacket xmlns='urn:Microsoft.Search.Query'>" + _
        "<Query><SupportedFormats><Format revision='1'>" + _
        "urn:Microsoft.Search.Response.Document:Document</Format>" + _
        "</SupportedFormats><Context>" + _
        "<QueryText language='en-US' type='STRING'>" + _
        keywordString + _
        "</QueryText></Context>" + _
        "<IncludeRelevantResults>true</IncludeRelevantResults>" + _
        "</Query></QueryPacket>"
    
    ' Create an instance of the Web service proxy class.
    Dim queryService As QueryService.QueryService = _
        New SearchTaskPane.QueryService.QueryService()
    queryService.Credentials = _
        System.Net.CredentialCache.DefaultCredentials
    
    ' Perform the query and bind the results to the DataViewGrid.
    Try
        Dim queryResults As System.Data.DataSet = _
            queryService.QueryEx(qXMLString)
        dgvQueryResults.DataSource = queryResults.Tables(0)
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
    

    // The string containing the keyword to use in the search.
    string keywordString = txtKeyword.Text;
    
    // The XML string containing the query request information 
    // for the Web service.
    string qXMLString =
        "<QueryPacket xmlns='urn:Microsoft.Search.Query'>" + 
        "<Query><SupportedFormats><Format revision='1'>" + 
        "urn:Microsoft.Search.Response.Document:Document</Format>" + 
        "</SupportedFormats><Context>" + 
        "<QueryText language='en-US' type='STRING'>" + 
        keywordString + 
        "</QueryText></Context>" + 
        "<IncludeRelevantResults>true</IncludeRelevantResults>" + 
        "</Query></QueryPacket>";
    
    // Create an instance of the Web service proxy class.
    QueryService.QueryService queryService =
        new SearchTaskPane.QueryService.QueryService();
    queryService.Credentials =
        System.Net.CredentialCache.DefaultCredentials;
    
    // Perform the query and bind the results to the DataViewGrid.
    try
    {
        System.Data.DataSet queryResults =
            queryService.QueryEx(qXMLString);
        dgvQueryResults.DataSource = queryResults.Tables[0];           
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
    
  7. [Insert] ボタンがクリックされたときに作業ウィンドウが応答できるように、CellContentClick イベントの DataGridView コントロールにイベント ハンドラを追加します。SearchControl.vb または SearchControl.cs のデザイン ビューに切り替え、dgvQueryResults DataGridView コントロールを選択します。コントロールの [イベント] プロパティ ページを表示して、CellContentClick イベントをダブルクリックします。

    Visual Studio 2005 では、SearchControl.vb または SearchControl.cs コード ファイルに切り替わり、dgvQueryResults_CellContentClick イベント ハンドラが表示されます。dgvQueryResults_CellContentClick メソッドの定義には以下のコードを追加します。

    If TypeOf dgvQueryResults.Columns(e.ColumnIndex) Is _
        DataGridViewButtonColumn And e.RowIndex <> -1 Then
    
        Dim myRange As Word.Range = _
            Globals.ThisAddIn.Application.ActiveDocument.Content
        Dim resultPath As String = _
            dgvQueryResults.Rows(e.RowIndex).Cells("Path").Value.ToString()
    
        Try
            myRange.InsertAfter(resultPath)
        Catch
            MessageBox.Show( _
                "The result's path cannot be added to the document.")
        End Try
    End If
    

    if (dgvQueryResults.Columns[e.ColumnIndex] is
        DataGridViewButtonColumn && e.RowIndex != -1)
    {
        Word.Range myRange = 
           Globals.ThisAddIn.Application.ActiveDocument.Content;
        string resultPath = 
           dgvQueryResults.Rows[e.RowIndex].Cells["Path"].Value.ToString();
    
        try
        {
            myRange.InsertAfter(resultPath);
        }
        catch
        {
            MessageBox.Show(
                "The result's path cannot be added to the document.");
        }
    }
    
  8. カスタム作業ウィンドウが自動的に表示されるように Word アドインを変更します。ThisAddIn.cs または ThisAddIn.vb ファイルを開きます。

    1. ThisAddIn クラスに以下の変数宣言を追加します。

      Private ctpSearch As Microsoft.Office.Tools.CustomTaskPane = Nothing
      

      private Microsoft.Office.Tools.CustomTaskPane ctpSearch = null;
      
    2. カスタム作業ウィンドウのインスタンスを作成し、アドインに属するカスタム作業ウィンドウのコレクションに追加するための以下のコードを ThisAddIn_Startup ハンドラに追加します。

      ctpSearch = Me.CustomTaskPanes.Add( _
          New SearchControl(), "Specify a Search Keyword")
      ctpSearch.Visible = True
      

      ctpSearch = this.CustomTaskPanes.Add(
          new WSSQueryWebServiceControl(), "Specify a Search Keyword");
      ctpSearch.Visible = true;
      
    3. アドイン内のカスタム作業ウィンドウのコレクションから、カスタム作業ウィンドウを削除するための以下のコードを ThisAddIn_Shutdown ハンドラに追加します。

      Me.CustomTaskPanes.Remove(ctpSearch)
      

      this.CustomTaskPanes.Remove(ctpSearch);
      
      

Ctrl キーを押しながら F5 キーを押して、アプリケーションをビルドして実行します。Word 2007 のインスタンスが起動し、カスタム作業ウィンドウが文書の右側に表示されます。検索キーワードを指定して [Do Query] をクリックすると、検索結果が DataGridView コントロールに表示されます。検索結果アイテムで [Insert] をクリックすることによって、そのアイテムのパスが Word 文書に挿入されます。

Noteメモ :

SearchTaskPane Word 2007 アドイン プロジェクトの作成時には、Visual Studio 2005 で SearchTaskPaneSetup プロジェクトが作成されています。SearchTaskPaneSetup プロジェクトを使用すると、開発環境以外のコンピュータに作業ウィンドウ アドインをインストールできます。アドインの展開の詳細については、「アプリケーション レベルのアドインの配置」を参照してください。

手順

この記事では、Microsoft Office Word 2007 のカスタム作業ウィンドウを作成する方法を紹介します。この作業ウィンドウでは、エンタープライズ検索クエリ Web サービスを使用して検索クエリが実行できます。ここでは、以下の手順を実行しています。

  1. Visual Studio 2005 で Word アドイン プロジェクトを作成する。

  2. エンタープライズ検索クエリ Web サービスへの参照をプロジェクトに追加する。

  3. カスタム作業ウィンドウを実装するユーザー コントロールをプロジェクトに追加する。

  4. カスタム作業ウィンドウの UI を設計する。

  5. カスタム作業ウィンドウにエンタープライズ検索機能を追加する。

Noteメモ :

この記事のコードおよび手順では、Office SharePoint 2007 のエンタープライズ検索を操作する方法を示しています。ただし、同じテクニックを使用して、Windows SharePoint Services 3.0 の検索を操作できます。

関連情報

コミュニティの追加

追加
表示:
© 2015 Microsoft