SharePoint で人の検索ボックスを使って簡易メール フォームを作ってみる
はじめに
SharePoint 2010 のコントロールで特に使い勝手がよいのは 人の検索ボックス (PeopleEditor) コントロールです。Active Directory のユーザーやグループを検索できます。見た目は以下のようなもので、標準でもさまざまな場所で利用されています。
今回はこれを利用して簡易メール フォームを作成します。
サンプル コード
実行手順
プロジェクトは 視覚的 Web パーツ で作成します。
VisualWebPart1UserControl.ascx
メール フォームのデザインを行います。PeopleEditor は初期状態でツール ボックスに表示されないため、アイテムの選択 から追加する必要があります。
<div style="width: 400px;">
<div style="margin: 3px 0px 3px 0px;">
<label for="ToPeopleEditor" runat="server">宛先:</label>
<sharepoint:peopleeditor id="ToPeopleEditor" allowempty="false" validatorenabled="true" isclaimsdisabled="True" multiselect="false" runat="server" />
</div>
<div style="margin: 0px 0px 3px 0px;">
<label for="SubjectTextBox" runat="server">件名:</label>
<asp:textbox id="SubjectTextBox" cssclass="ms-input" textmode="SingleLine" width="100%" runat="server" />
<asp:requiredfieldvalidator controltovalidate="SubjectTextBox" enableclientscript="false" errormessage="この必須フィールドに値を指定してください。" runat="server" />
</div>
<div style="margin: 0px 0px 3px 0px;">
<label for="BodyTextBox" runat="server">本文:</label>
<asp:textbox id="BodyTextBox" cssclass="ms-input" textmode="MultiLine" width="100%" runat="server" />
<asp:requiredfieldvalidator controltovalidate="BodyTextBox" enableclientscript="false" errormessage="この必須フィールドに値を指定してください。" runat="server" />
</div>
<div style="margin: 0px 0px 3px 0px;">
<asp:button id="SubmitButton" causesvalidation="true" text="送信" onclick="SubmitButton_Click" runat="server" />
</div>
</div>
VisualWebPart1UserControl.ascx.cs
送信 ボタンのクリック時イベントを定義します。PeopleEditor.ResolvedEntities プロパティには PickerEntity クラスのコレクションが格納されます。PickerEntity クラスには選択されたユーザーの情報が含まれているため、Email 要素を抽出して To アドレスに設定します。[1] これは Active Directory の mail 属性を取得しています。From アドレスには現在のユーザーのアドレスを設定します。
public partial class VisualWebPart1UserControl : UserControl
{
protected void Page_Load(object sender, EventArgs e) { }
protected void SubmitButton_Click(object sender, EventArgs e)
{
this.ToPeopleEditor.Validate();
if (this.Page.IsValid == false)
{
return;
}
var entity = this.ToPeopleEditor.ResolvedEntities.Cast<PickerEntity>().Single();
var to = (string)entity.EntityData["Email"];
if (to == null)
{
return;
}
var from = SPContext.Current.Web.CurrentUser.Email;
var msg = new MailMessage(
from,
to,
this.SubjectTextBox.Text,
this.BodyTextBox.Text);
var client = new SmtpClient();
client.Host = "localhost";
client.Send(msg);
}
}
実行結果
実行すると以下のように表示されます。

人の検索ボックスの 参照 ボタン (辞書のようなアイコン) をクリックすると、検索ダイアログが別ウィンドウで開きます。

件名と本文を入力し、送信 ボタンをクリックするとメールが送信されることを確認できます。

おわりに
人の検索ボックスは企業内アプリケーション開発において多様な場面で活用できる優れたコントロールです。また、機能を拡張することでさらに多くの用途に対応できます。
-
PeopleEditor.Entities プロパティも存在しますが、こちらには確定されていないユーザー (下線が付いていない) の情報が格納されます。 ↩︎
Discussion