SharePoint を利用していると、ユーザーの部署名などのユーザー プロファイルを JavaScript から利用したいという要望は多いかと思います。以前、下記のような記事を投稿しましたが、この方法はあくまでも裏ワザ的なものでした。

ASP.NET サーバー コントロールを利用して、JavaScript 変数にユーザー プロファイルを格納する
http://idea.tostring.jp/?p=1023

そのため、今回は真っ当な方法、つまりはきちんと SharePoint の API を利用してユーザープロファイルを取得してみます。

さっそくスクリプト

後から使い回しが容易なように function としています。引数に取得したいユーザー プロパティの内部名を渡します。実際に利用する時は、function の戻り値でユーザー プロパティの値を返すようにすると良いと思いますが、今回はアラート ダイアログに結果が表示されるようにしています。

function getMyProfileProperty(strPropName){
	SP.SOD.executeFunc('userprofile', 'SP.UserProfiles', function(){
		var clientContext = new SP.ClientContext.get_current();
		var peopleManager = new SP.UserProfiles.PeopleManager(clientContext);
		var myProperties = peopleManager.getMyProperties();

		clientContext.load(myProperties);
		clientContext.executeQueryAsync(
			function(sender, args){
				var vProperties = myProperties.get_userProfileProperties();
				alert(vProperties[strPropName]); //ダイアログを表示
			},function(sender, args){
				alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
			});
	});
}

ちなみに、ユーザー プロパティの内部名は、オンプレミス/オンライン問わず、全体管理の「ユーザー プロパティの管理」から確認ができますが、下記のページに一覧になっているのを見つけたのでご紹介しておきます。

SP.UserProfiles.PersonProperties.userProfileProperties property (sp.userprofiles)
http://msdn.microsoft.com/en-us/library/office/jj679700(v=office.15).aspx

実行してみる

では、実行してみましょう。今回は部署(Department)を取得してみます。

20140415-01

はい、簡単に取得することができました。ただ、実行されたタイミングで SharePoint へクエリを投げるので、ほんの少しのタイムラグはあります。

さいごに

こうして取得したユーザー プロファイルをリストの投稿フォームで入力フィールドに自動的に入力するなどの使い方は良くみますね。運用を考えると、ユーザーのプロファイルをいかに充実させるかの方が悩みドコロではあるのですけどね…。