SharePoint 2013 になり、個人用サイトに関する機能も強化されました。個人用サイトを利用するときに一番最初に気になるのがプロファイル画像。ソーシャルの活性化には、プロファイル画像を登録がはじめの一歩。でも、せっかく登録した画像が表示される機会が少ないと寂しいものです。今回は、開発やカスタマイズを行う場合に、プロファイル画像を、他のいろいろなサイトから簡単に参照、表示ができる方法を見つけましたのでご紹介します。

プロファイル画像を取得する方法

SharePoint には、Layouts フォルダという特殊なフォルダが存在します。

アプリケーション _layouts ページの種類
http://msdn.microsoft.com/ja-jp/library/aa979604(v=office.12).aspx

SharePoint 2013 では、この中に「/_layouts/15/userphoto.aspx」というページが追加されています。このページをそのまま開くと、プロファイル画像が登録されていない場合の既定の画像が表示されます。
20130706-1
このページにはクエリストリングを指定できるようで、「size」と「accountname」を指定することで、指定したユーザーの任意のサイズの写真を取得することができました。「size」に指定できるのは「S(48x48)、M(77x77)
、L(240x240)」の3種類、「accountname」には「domain\account」「account@domain.local」といった形式で指定できるほか、メールアドレスでも OK なようです。下記のような感じですね。レスポンスは Jpeg になっています。

「/_layouts/15/userphoto.aspx?size=M&accountname=account@domain.local」

下の画像は、サイズを変えてそれぞれ取得してみた結果を並べたものです。
20130706-2
ちなみに、間違った accountname を指定すると既定の画像が取得できます。これは便利です。

メリットは?

ユーザーのプロファイル画像は、個人用サイトの隠しライブラリに保存されており、保存される画像の命名ルールは環境(設定)によって異なっていたりと、きちんと画像の URL を取得するためには、ユーザー プロファイルを参照するなど手間が必要でした。こうした手間が省け、どんな場合でも同じルールの URL で画像を取得することができます。

そして最大のメリットは、それぞれに認証が必要なクロスドメインに対応ができることです。通常、個人用サイトは別の Web アプリケーションでホストされることが多く、ホストヘッダーを利用しているなど、環境によっては(特にフォーム認証などの場合は)、プロファイル画像を取得する際に認証が問題となっていました。最近の身近な例が SharePoint Online です。従来の SharePoint Online では、通常のサイトと個人用サイトのそれぞれで認証を受ける必要があり、個人用サイトから認証を受けていない場合は、通常のサイトでプロファイル画像を表示できませんでした。

こうした問題が userphoto.aspx を仲介することで回避することができるようになっています。

うまく動かない場合は?

環境が用意できずに検証ができていないのですが、オンプレミスの場合は設定変更が必要になるかもしれません。おそらくは、こちらのプロパティを変更するのだと思います。

(2014/2/27)あらためて確認すると、ディスカッション掲示板の顔写真などはこの設定変更を行うと、userphoto.aspx を利用するように切り替わるようですね。

SPWebApplication.CrossDomainPhotosEnabled property
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spwebapplication.crossdomainphotosenabled.aspx

既定では false に設定されているので、下記のように PowerShell(SharePoint 管理シェル)で変更します。

$web = Get-SPWebApplication <Web Application>
$web.CrossDomainPhotosEnabled = $true
$web.Update()

さいごに

標準機能を利用している場合は気にする必要のない機能かもしれませんが、開発やカスタマイズをされる方には非常に役立つ機能なのではないかと思っています。ぜひ SharePoint 2013 では、プロファイル画像を利用する開発、カスタマイズをどんどん行っていただければと思います。