やりたいこと
- SharePointにログインしているユーザ(自分)の所属組織にいるメンバーのPresenceリストを表示する。
(チームサイトとかでメンバー一覧とPresenceだしたいという要望から) - なおmasterページはいじらない前提。なのでscript editorのみ利用する
やること
- SharePointのUserProfileからPeerとManagerをとってきてリスト表示
- Lync Presenceの取得を参考に、リストの左側にPresenceアイコンを出す
コード
ここではPeerと自分の情報表示について記載します。
snipet
<script type='text/javascript' src="/Style%20Library/JS/jquery.min.js">
</script> //ここにはSharePoint上のjqueryのpathを記載
<script type='text/javascript'>
function setImnrc(){
var peerList = document.getElementsByClassName("ms-imnSpan");
for(var i =0; i<peerList.length; i++){
var targetId ="imn_" + i +",type=smtp";
var temp = document.getElementById(targetId);
var mail = temp.getAttribute("sip");
IMNRC(mail,temp);
};
}
var workEmail = "";
var EmployeeID = "";
var Title = "";
var userDisplayName = "";
var AccountName = "";
var peers ={};
$.ajax({
url: "/_api/SP.UserProfiles.PeopleManager/GetMyProperties",
headers: { Accept: "application/json;odata=verbose" },
success: function (data) {
//Get properties from user profile Json response
userDisplayName = data.d.DisplayName;
AccountName = data.d.AccountName;
peers =data.d.Peers.results;
for (var j =0; j < peers.length; j++){
var peerName = peers[j].split("\\");
var pres = "<span class='ms-imnSpan'><a class='ms-imnlink ms-spimn-presenceLink' href='#' onclick='IMNImageOnClick(event);return false;'><span class='ms-spimn-presenceWrapper ms-imnImg ms-spimn-imgSize-10x10'><img name='imnmark' title='' class='ms-spimn-img ms-spimn-presence-online-10x10x32' id='imn_"+ j +",type=smtp' alt='presence' src='/_layouts/15/images/spimn.png' sip='" + peerName[1] + "@xxx.com' showofflinepawn='1'></span></a></span>";
var inhtml= pres + "<span>"+ peerName[1] + "</span></br>";
$('#peers').append(inhtml);
inhtml="";
peerName ="";
pres="";
};
var properties = data.d.UserProfileProperties.results;
for (var i = 0; i < properties.length; i++) {
if (properties[i].Key == "WorkEmail") {
workEmail = properties[i].Value;
}
if (properties[i].Key == "EmployeeID") {
EmployeeID = properties[i].Value;
}
if (properties[i].Key == "Title") {
Title = properties[i].Value;
}
}
$('#AccountName').text(AccountName);
$('#userDisplayName').text(userDisplayName);
$('#Title').text(Title);
$('#workEmail').text(workEmail);
setImnrc;
},
error: function (jQxhr, errorCode, errorThrown) {
alert(errorThrown);
}
});
</script>
<h2><strong>Employee Details</strong></h2>
<br />
AccountName: <span id="AccountName"></span> </br>
DisplayName: <span id="userDisplayName"></span> </br>
Title: <span id="Title"></span> </br>
Email Address: <span id="workEmail"></span> </br>
<h2><strong>Peers</strong></h2>
<div id="peers"/>
<br />
もう少し綺麗な書き方がありそうですが。。。
やっているのは、
SP.UserProfiles.PeopleManager/GetMyProperties APIをつかって、自分のPropertyをとってきて、そこに含まれるPeerをリストにして、さらにそのリストをもとに、Lync Presenceをだしている。
peerName[1] + "@xxx.com'のところは、とれるPeer listがDOMAIN\NAME形式だったので、
書き換えたという感じです。
企業によって、組織構造(データ構造)がちょっと違うので、まずはGetMyPropertiesの結果を見てみて、欲しい情報がどこにはいっているかを解析する必要があります。
以上寄せ集め情報からでした。
[9/19追記]
バグっていたので修正しました。
Ref:https://sharepoint.stackexchange.com/questions/157721/lync-presence-indicators-not-working-when-dynamically-added