SharePoint 2010 において歓迎の電子メールをカスタム クレーム プロバイダーで動作させる

原文の記事の投稿日: 2012 年 5 月 3 日 (木曜日)

"ブログ友だち" の Israel V. から最近指摘されたのですが、カスタム クレーム プロバイダー用に作成したサンプル コードにちょっとした欠陥があり、サンプルのとおりに行うと、サイトに新しいユーザーを追加したときに送信されるはずの歓迎の電子メールが送信されません。もちろん私にも責任があるので、この問題を解決するために、状況をもっと良く見て、Israel が作成したいくつかのコードを調べました。

一言で言うと、この問題は、サイト コレクションに初めてユーザーを追加する場合に、プロファイルの同期が行われていないなどの理由で、そのユーザーに関連付けられた電子メール アドレスが存在しない場合に発生します。したがってこの場合に重要なことは、おわかりのように (これから簡単なシナリオで要約しますが)、ユーザーが追加されるときにユーザーの電子メール アドレスを取得し、PickerEntity クラスの適切なプロパティにそれを設定することです。これについて詳しく説明します。

電子メール アドレスをどこから取得するかは、完全にクレーム プロバイダーに依存します。データを Active Directory から取得する場合は、AD をクエリすることで取得できます。SAML を使用していて、電子メール アドレスが ID クレームの場合は、単にそれを再利用できます。基本的に、"依存している" のでここで呼び出す必要があります。

使用するときは、FillResolve メソッドをが呼び出されたときです。ご存知のように、このメソッドは、ユーザー選択ウィンドウを使用してエントリが追加された後か、または入力コントロールに値が入力されて解決ボタンがクリックされたときに、呼び出すことができます。多くのコード サンプルで示してきたように、その処理の間に、メソッドに渡される List<PickerEntity> に追加できるように、PickerEntity クラスのインスタンスを作成します。

追加する方法は、次のように PickerEntity インスタンスにプロパティを設定するだけです。

//needed to make welcome emails work:

pe.EntityData[PeopleEditorEntityDataKeys.Email] = "steve@stevepeschka.com";

この例で、"pe" は単に、私が作成し、FillResolve メソッドに返す PickerEntity クラスのインスタンスです。

これですべてです。一番厄介なのは電子メール アドレスの値を取得するところかもしれません。しかし、取得できたなら、非常に簡単に PickerEntity に追加して、歓迎電子メールを動作させることができます。私はこれをテストし、a) 元のカスタム クレーム プロバイダーでは歓迎電子メールが送信されないこと、b) この変更を組み込んだ後では送信されるようになったことを確認しました。Israel V. にあらためて感謝します。

これはローカライズされたブログ投稿です。原文の記事は、「Getting Welcome Emails to Work with a Custom Claims Provider in SharePoint 2010」をご覧ください。