Silverlight 版 SharePoint 2010 ユーザー選択ウィンドウ コントロールの作成

原文の記事の投稿日: 2011 年 8 月 10 日 (水曜日)

SharePoint 開発者向けの Silverlight ツールボックスに是非欲しい部品のひとつにユーザー選択ウィンドウ コントロールがあります。SharePoint の提供する特定のコントロールを Web パーツまたはカスタム レイアウト ページ (PeopleEditor クラス) で使うことはできます。しかし、Silverlight コードはすべてクライアント側で実行されるので、これを実現する標準的なソリューションなるものは存在しません。実際、私は最近あるプロジェクトでこの機能が必要になり、結局、かなり単純なやり方で同等の機能を実現しました。以下は、そのスクリーンショットです。Silverlight のポップアップとして実装されており、UI としてはどう見ても力不足のユーザー選択ウィンドウ コントロールです。

 

 

この機能を実現するうえで鍵となったのは、SharePoint に標準で同梱されている People Web サービスという小さな Web サービスです。今回のケースでは、SearchPrincipals というメソッドを使用して、検索ボックスに入力されたテキストを取得し、一致する一連の候補の探します。今回は単純なので、複数のユーザーを探す必要はありませんでした。しかし、必要ならグループ、配布リスト、SharePoint セキュリティ グループなどを調べることもできます。また、名前を入力してもらってから Web サービス上で ResolvePrincipals メソッドを呼び出せば、独自の入力コントロールを実装することもできます。以下に実装上の要点を示します。

 

  • このメソッドは、PrincipalInfo オブジェクトを要素に持つ ObservableCollection を返します。ユーザーにとってよりわかりやすくするために、DisplayName と AccountName の 2 つの要素を持つ PickerEntry というカスタム クラスを作成しました。PrincipalInfo クラスにも部門および電子メールのプロパティが含まれているので、これも便利です。これについては、クラス内で ToString() メソッドをオーバーライドして、DisplayName プロパティが返されるようにしました。これでリスト ボックスに希望どおり名前が表示されるようになります。また、これで選択時に選択されたユーザーのアカウント名もわかるようになります。
  • この Web サービスのエントリ ポイントを、現在いる SharePoint サイト内から使えるようにしたいと考えました。Silverlight からこれを行うのは、少しばかり面倒で、少なくとも自明ではありません。幸い、次の方法でこの問題に取り組むことができました。

 

//get info on the current host

string curUrl = HtmlPage.Document.DocumentUri.AbsoluteUri.ToString();

 

//get the host name; note that this assumes the user has rights to the root site

//site collection; that may not be true in your scenario

Uri curUri = new Uri(curUrl);

HostName = curUri.Scheme + "://" + curUri.Host + ":" + curUri.Port.ToString();

 

//use the host name property to configure the request against the site in

//which the control is hosted

PeopleWS.PeopleSoapClient ps = new PeopleWS.PeopleSoapClient();

ps.Endpoint.Address =

new System.ServiceModel.EndpointAddress(HostName + "/_vti_bin/People.asmx");

 

実際、特に面白いのはこの部分だけでしょう。このユーザー コントロールに関するコードを、この投稿に添付しておきます。残念ながら、さまざまな理由でプロジェクト全体を含めることはできませんが、この投稿とコントロール コードだけでも、いずれこれと同じようなものが必要となった場合に、十分役に立つものと思います。

これはローカライズされたブログ投稿です。原文の記事は、「Writing A SharePoint 2010 People Picker Control for Silverlight」をご覧ください。