Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

やりたいこと

  • 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上のjquerypathを記載
<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

h-nagao
Power Platform好きです。 #MoreBeerMorePower 新しい投稿は、はてなブログのほうにしています。
https://mofumofupower.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした