SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Infragistics NetAdvantageチュートリアル(AD)

Silverlight 3をSharePointで使おう

NetAdvantage Silverlight 2009 vol.1とSharePoint

  • このエントリーをはてなブックマークに追加

SharePoint検索Webサービスの使用

 今回のアプリケーションでは実際の検索はSharePointの検索Webサービスに依存します。この検索機能はWebサービスとして公開されているため、アプリケーションで使用するSOAPクライアントを作成して使用します。

 前のセクションでExpression Blendを使用して作成したプロジェクトを、今度はVisual Studioで開きます。

 検索用Webサービスを使用するために、以下のような検索サービス用アドレス(.asmxファイルへのURL)をもとに、このサービスへの参照をVisual Studioのプロジェクトに追加します。

http://<サーバー名あるいはアドレス>/_vti_bin/spearch.asmx

 アドレスを指定したサービスの参照ダイアログは以下のようになります。

図9 検索Webサービスへのサービス参照設定
図9 検索Webサービスへのサービス参照設定

 追加されたサービス参照をアプリケーション内で使用するには、サービス用SOAPクライアントオブジェクトを作成し、クライアントのQueryExCompletedイベントハンドラーを実装します。

 検索サービスを使用する際には実際にクエリとして使用されるXML文字列を送る必要があります。この文字列はQueryExAsyncメソッドを使用してクエリ用文字列(QueryPacket)を送信することで検索が実行されます。クエリ内では検索パネル内に入力された値をクエリのQueryText項目に追加します。今回使用されるクエリ文字列は以下のようになります。

SharePointコンテンツ検索用クエリ
string keywords = this.txtKeywords.Text;
string qXMLString = "<QueryPacket xmlns='urn:Microsoft.Search.Query'>" +
"<Query><SupportedFormats><Format revision='1'>" +
"urn:Microsoft.Search.Response.Document:Document</Format>" +
"</SupportedFormats><Context><QueryText language='ja-JP' type='STRING'>" +
keywords + "</QueryText></Context></Query></QueryPacket>";

 これでSharePointの検索Webサービスを呼び出す準備が整いました。SOAPクライアントを使用した検索処理は以下のようになります。

 SharePointのクエリWebサービスの使用についてはMSDN「Windows SharePoint Serviceの検索アーキテクチャ」に詳細が記載されています。

ソース:MainPage.xaml.cs
private void GetSearchResult()
{
    string keywords = this.txtKeywords.Text;
    string qXMLString = "<QueryPacket xmlns='urn:Microsoft.Search.Query'>" +
    "<Query><SupportedFormats><Format revision='1'>" +
    "urn:Microsoft.Search.Response.Document:Document</Format>" +
    "</SupportedFormats><Context><QueryText language='ja-JP' type='STRING'>" +
    keywords + "</QueryText></Context></Query></QueryPacket>";

    // 検索サービス用 SOAP クライアントを作成
    SharePointSearch.SPSearch.QueryServiceSoapClient qsc = new SharePointSearch.SPSearch.QueryServiceSoapClient();

    // サービス用認証情報を設定
    // (使用する SharePoint サーバーのドメインアカウントを使用) 
    UserNamePasswordClientCredential upcc = qsc.ClientCredentials.UserName;
    upcc.UserName = @"KALEHUAWEHE\Administrator";
    upcc.Password = "Himitwo2";

    // SPSearch Web サービスを使用
    // QueyExCompleted イベントハンドラを設定
    qsc.QueryExCompleted += new EventHandler<SharePointSearch.SPSearch.QueryExCompletedEventArgs>(qsc_QueryExCompleted);

    // 検索用クエリを実行
    qsc.QueryExAsync(qXMLString);
}

xamWebTileViewを使用した検索結果の表示

 検索が終了した直後には非同期でQueryExCompletedイベントの発生が促されるため、このイベント用のハンドラーをあらかじめ定義しておくことが必要になります。

QueryExCompletedイベントハンドラー
void qsc_QueryExCompleted(object sender, SharePointSearch.SPSearch.QueryExCompletedEventArgs e)

 QueryExCompletedイベントハンドラーでは取得したデータを検索結果表示用xamWebTileViewコントロールのデータコンテキストに設定します(データコンテキストはすでにxamWebTileViewのItemSourceプロパティにバインドされるようにXAML上で設定されています)。これを実装するためには以下の手順が必要になります。

  1. 検索結果データ用オブジェクトの作成
  2. ViewModelの作成
  3. XMLドキュメントとして返されたデータを検索結果オブジェクトに変換

 検索結果用データオブジェクトはSharePointの検索Webサービスから返されるデータをそのまま読み込めるようなオブジェクトを作成します(SPSearchRelevantResult.cs参照)。Silverlight 3ではADO.NETのDataSetなどが扱えませんが、その代わりにMVVM(Model-View-ViewModel)パターンで使用されるようなViewModelを作成してSilverlightのデータバインディング機能を活用することが一般的です。ここではSPSearchRelevantResultsオブジェクトをコレクションとして扱うViewModelを作成します。

 MVVMパターンやViewModelについての詳しい説明はここでは割愛しますが、参考記事として以下のような記事へのリンクをあげておきます。興味のある方はご覧ください。

ソース:SPSearchResultDataSource.cs
public class SPSearchResultDataSource : BaseViewModel
{
        public SPSearchResultDataSource()
        {
        }

        private IEnumerable<SPSearchRelevantResult> result;
        public IEnumerable<SPSearchRelevantResult> Result
        {
            get
            {
                return this.result;
            }
            set
            {
                if (this.result != value)
                {
                    this.result = value;
                    this.OnPropertyChanged("Result");
                }
            }
        }
}

 そして最後にXMLドキュメントとして返された検索結果をViewModel内のオブジェクトとしてセットします。作成したViewModelはxamWebTileViewのデータコンテキストとして設定することで、タイルビュー表示に使用されます。

次のページ
検索中インターフェイスの作成

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
Infragistics NetAdvantageチュートリアル連載記事一覧

もっと読む

この記事の著者

インフラジスティックス・ジャパン株式会社 鈴木 誠(スズキ マコト)

大学卒業後、ホノルルにてエンタープライズコンテンツ管理及び大手リゾートホテルや教育機関向けWeb開発を行う。その後、米海軍サプライ管理システムの開発に従事。.NETからJavaまで主にWebテクノロジーに関わる。筋トレの傍ら植物を育てるのが趣味。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4726 2009/12/21 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング