{"id":904,"date":"2012-01-23T16:59:23","date_gmt":"2012-01-23T15:59:23","guid":{"rendered":"http:\/\/blog.kodono.info\/wordpress\/?p=904"},"modified":"2012-01-23T16:59:23","modified_gmt":"2012-01-23T15:59:23","slug":"alternatives-a-imnrc-et-processimn-pour-determiner-la-presence-dune-personne-sharepoint","status":"publish","type":"post","link":"https:\/\/blog.kodono.info\/wordpress\/2012\/01\/23\/alternatives-a-imnrc-et-processimn-pour-determiner-la-presence-dune-personne-sharepoint\/","title":{"rendered":"Alternatives \u00e0 IMNRC() et ProcessImn() pour d\u00e9terminer la pr\u00e9sence d&#8217;une personne [Sharepoint]"},"content":{"rendered":"<p>Avec Sharepoint (2003 &#038; 2007) on peut voir la pr\u00e9sence (sur IM\/MSN\/Microsoft Messenger\/Office Messenger\/Microsoft Lynk) des utilisateurs directement dans une page Web gr\u00e2ce \u00e0 des petites bulles de couleur. Quand on place le curseur au-dessus on aper\u00e7oit un popup avec diverses informations et possibilit\u00e9s. Cela n&#8217;est disponible que pour Internet Explorer puisqu&#8217;on utilise ici de l&#8217;ActiveX (et en particulier <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/ms455335.aspx\" title=\"Lien vers la documentation Microsoft pour NameCtrl\">NameCtrl<\/a>).<\/p>\n<p>Je force le mode standard d&#8217;IE dans mon Sharepoint, et j&#8217;ai remarqu\u00e9 que les fonctions <code>ProcessImn()<\/code> et <code>IMNRC()<\/code> (l&#8217;une appelant l&#8217;autre) causaient un plantage d&#8217;IE avec un CPU qui montait en charge, et cela pour les pages qui contiennent un grand nombre de personnes et donc de bulles de pr\u00e9sence (typiquement une liste AllItems avec des colonnes qui montrent cette information).<br \/>\nJ&#8217;ai donc d\u00e9cid\u00e9 de cr\u00e9er une alternative \u00e0 l&#8217;affichage de la pr\u00e9sence dans Sharepoint en utilisant mes propres fonctions.<\/p>\n<p>Le r\u00e9sultat est le suivant :<\/p>\n<pre class=\"brush: javascript\">\r\n\/* on commence par supprimer les deux fonctions qui posent probl\u00e8mes *\/\r\nfunction IMNRC() {}\r\nfunction ProcessImn() {}\r\nvar nameCtrl; \/\/ on s'assure de d\u00e9finir nameCtrl\r\nvar presence={}; \/\/ on cr\u00e9e un objet presence qui va nous servir \u00e0 mettre en cache l'\u00e9tat de chaque individu\r\n\/\/ Cette fonction fait apparaitre un menu\/popup avec les informations de pr\u00e9sence de l'utilisateur\r\nfunction showIMMenu() {\r\n  var el=window.event.srcElement;\r\n  var pos=el.getBoundingClientRect();\r\n  \/\/ on place le menu en question \u00e0 la position pos.left et pos.top\r\n  nameCtrl.ShowOOUI(el.getAttribute(\"sip\"), 0, pos.left, pos.top);\r\n}\r\n\r\n\/\/ Cette fonction va cacher le menu\r\nfunction hideIMMenu() { nameCtrl.HideOOUI() }\r\n\r\n\/\/ Cette fonction va permettre de modifier la bulle avec celle qui correspond \u00e0 l'\u00e9tat de pr\u00e9sence de l'utilisateur\r\nfunction ChangeIMPresence(sip, state, imgID) {\r\n  if (presence[imgID] == state) return;\r\n  presence[imgID]=state;\r\n  var imgIM=document.getElementsByName(imgID);\r\n  for (var i=0; i&lt;imgIM.length; i++) {\r\n    var alt=\"\",src=\"imnhdr.gif\"; \/\/ default image (grey)\r\n    switch(state) {\r\n      case 0: alt=\"Online\"; src=\"imnon.png\"; break;\r\n      case 1: alt=\"Offline\"; src=\"imnoff.png\"; break;\r\n      case 2: alt=\"Away\"; src=\"imnaway.png\"; break;\r\n      case 4: alt=\"Be Right Back\"; src=\"imnaway.png\"; break;\r\n      case 3: alt=\"Busy\"; src=\"imnbusy.png\"; break;\r\n      case 5: alt=\"On the Phone\"; src=\"imnbusy.png\"; break;\r\n      case 6: alt=\"Out to Lunch\"; src=\"imnaway.png\"; break;\r\n      default: alt=\"Unknown\"; src=\"imnhdr.gif\";\r\n    }\r\n    imgIM[i].src=\"http:\/\/your_sharepoint\/_layouts\/images\/\"+src;\r\n    imgIM[i].alt=alt;\r\n  }\r\n}\r\n\r\n\/\/ Maintenant on initialise l'objet ActiveX\r\nfunction initIMPresence() {\r\n  if (typeof ActiveXObject == \"function\") { \/\/ seulement pour IE\r\n    if (typeof nameCtrl==\"undefined\") nameCtrl=new ActiveXObject('Name.NameCtrl.1');\r\n    var imgIM=document.getElementsByName(\"imnmark\"); \/\/ toutes les bulles de pr\u00e9sence ont le nom \"imnmark\"\r\n    for (var i=0; i&lt;imgIM.length; i++) {\r\n      var sip=imgIM[i].getAttribute(\"sip\"); \/\/ l'attribut \"sip\" retourne l'information que l'on souhaite\r\n      if (sip!=null) {\r\n        sip=sip.slice(4);\r\n        var state=nameCtrl.GetStatus(sip, \"imnmark_\"+sip); \/\/ retourne la pr\u00e9sence bas\u00e9e sur le SIP (adresse email)\r\n        nameCtrl.OnStatusChange=ChangeIMPresence;\r\n        imgIM[i].src=\"http:\/\/your_sharepoint\/_layouts\/images\/imnhdr.gif\";\r\n        imgIM[i].alt=\"Unknown\";\r\n        imgIM[i].name+=\"_\"+sip;\r\n        imgIM[i].onclick=showIMMenu;\r\n        imgIM[i].onmouseover=showIMMenu; \/\/ quand on passe la souris au-dessus d'une bulle on verra le menu\r\n        imgIM[i].onmouseout=hideIMMenu;\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n\/\/ et on lance tout \u00e7a !\r\ninitIMPresence();\r\n<\/pre>\n<p>En ajoutant ce bout de code \u00e0 ma masterpage j&#8217;ai pu conserver les bulles de pr\u00e9sence tout en \u00e9vitant un plantage d&#8217;IE \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Avec Sharepoint (2003 &#038; 2007) on peut voir la pr\u00e9sence (sur IM\/MSN\/Microsoft Messenger\/Office Messenger\/Microsoft Lynk) des utilisateurs directement dans une page Web gr\u00e2ce \u00e0 des petites bulles de couleur. Quand on place le curseur au-dessus on aper\u00e7oit un popup avec diverses informations et possibilit\u00e9s. Cela n&#8217;est disponible que pour Internet Explorer puisqu&#8217;on utilise ici de [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","hide_page_title":"","footnotes":""},"categories":[20,33],"tags":[24,155,158,117],"class_list":["post-904","post","type-post","status-publish","format-standard","hentry","category-niveau-expert","category-programmation","tag-javascript","tag-niveau-expert","tag-programmation","tag-sharepoint"],"_links":{"self":[{"href":"https:\/\/blog.kodono.info\/wordpress\/wp-json\/wp\/v2\/posts\/904","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.kodono.info\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.kodono.info\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.kodono.info\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.kodono.info\/wordpress\/wp-json\/wp\/v2\/comments?post=904"}],"version-history":[{"count":3,"href":"https:\/\/blog.kodono.info\/wordpress\/wp-json\/wp\/v2\/posts\/904\/revisions"}],"predecessor-version":[{"id":907,"href":"https:\/\/blog.kodono.info\/wordpress\/wp-json\/wp\/v2\/posts\/904\/revisions\/907"}],"wp:attachment":[{"href":"https:\/\/blog.kodono.info\/wordpress\/wp-json\/wp\/v2\/media?parent=904"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.kodono.info\/wordpress\/wp-json\/wp\/v2\/categories?post=904"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.kodono.info\/wordpress\/wp-json\/wp\/v2\/tags?post=904"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}