JavaScript を利用するカスタマイズにおいて、時々サイトやページにアクセスしているユーザー(カレント ユーザー)のユーザー プロファイルの値を利用したくなる時があります。その際に、通常であれば JavaScript から REST や CSOM などを利用して値を取得する処理を記述するのですが、もっと簡単に取得する方法はないものかと考えていました。そうした時に、ふと、「こんな方法でも良いんじゃないか?」と思いついた方法を自身の備忘録も兼ねて記載します。今回の記事は、SharePoint 2013 を対象としています。

ユーザー プロファイルに関係するサーバー コントロール

SharePoint 標準構成の中で、ユーザー プロファイルが表示されるページがあります。それは、個人用サイトの「Person.aspx」です。なぜこのページでのみユーザー プロファイルが表示されるのかと思い、SharePoint Designer で開いてみると、下記のようなタグ プレフィックスが登録されています。

<%@ Register Tagprefix="SPSWC" Namespace="Microsoft.SharePoint.Portal.WebControls" Assembly="Microsoft.SharePoint.Portal, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

さらに、読み進めていくと、このタグ プレフィックスは、個人用の Web パーツ(AskMeAboutWebPart や ProfileInfoWebPart)と関連していることが分かりました。なんだかこれは使えそうです。

あらためて MSDN を確認すると、この Namespace や Assembly には、ユーザー プロファイルを読み込み、表示するためのクラスが存在することも分かります。

ProfilePropertyLoader class
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.portal.webcontrols.profilepropertyloader.aspx
ProfilePropertyValue class
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.portal.webcontrols.profilepropertyvalue.aspx

これらを利用して、JavaScript の変数にユーザー プロファイルの値を入れてみます。

JavaScript 変数にユーザー プロファイルの値を格納する

これら情報を基に、任意のページ(拡張子が.aspx)を SharePoint Designer で開き、下記を追加していきます。

まずは、@Register タグの最後に下記を追加します。

<%@ Register Tagprefix="SPSWC" Namespace="Microsoft.SharePoint.Portal.WebControls" Assembly="Microsoft.SharePoint.Portal, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

次に、ページ上の任意の場所に下記を追加します。どこでも良いのですが、今回は<asp:content contentplaceholderid="PlaceHolderAdditionalPageHead" runat="server">タグの中に追加しました。PropertyNameに指定する値は、全体管理の「ユーザー プロパティの管理」から確認ができます。

<SPSWC:ProfilePropertyLoader runat="server"/>
<script type="text/javascript">
var myUserObj = {
	FirstName: "<SPSWC:ProfilePropertyValue Id='myUserFirstName' PropertyName='FirstName' TitleMode='true' runat='server'/>",
	Name: "<SPSWC:ProfilePropertyValue Id='myUserName' PropertyName='PreferredName' TitleMode='true' runat='server'/>",
	Office: "<SPSWC:ProfilePropertyValue Id='myUserOffice' PropertyName='Office' TitleMode='true' runat='server'/>"
}
</script>

ページを保存し、再読み込み後に F12 開発者ツールで確認してみると、変数には、カレント ユーザーのユーザー プロファイルの値が入っていることが確認できます。

20131024-1

さいごに

今回の方法は、SharePoint Designer のみで完結するカスタマイズですので、SharePoint Online でも利用が可能です。ユーザー プロファイルの値を取り出して、JavaScript から利用するだけであれば、非常に簡単に行えます。また、JavaScript 内に取得処理を記述する方法とは違い、ページの読み込みが終わったタイミングで変数に値が入るため、色々と使い道はあるかと思いました。