LoginSignup
0
0

More than 5 years have passed since last update.

JavascriptでSharePointのユーザプロファイルから自分の組織メンバーのPresence取得

Last updated at Posted at 2017-09-17

やりたいこと

  • 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

Reference

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0