Pokračovanie blogu o tom, ako si naprogramovať Chrome rozšírenie, ktoré po kliknutí dokáže zobraziť zoznam našich spolupracovníkov z Intranetu v SharePointe. Zobrazí ich profilovú fotografiu a po prejdení myšou sa zobrazia aj ostatné dáta uložené v zozname.
V predchádzajúcej časti sme si povedali, že údaje o spolupracovníkoch, resp. firemných kontaktoch, sú obvykle uložené v SharePointe ako špeciálny zoznam typu „Contacts“. Zoznamy tohto typu sa dajú štandardne pripojiť k Outlooku, ktorý sa potom stane ďalším klientom SharePointu (okrem Internetového browsera). Pripojenie k Oulooku aktivujeme nasledovne…
…potom sa kontakty zobrazia v Outlooku ako „Other Contacts“:
A presne táto možnosť ma inšpirovala k tomu, aby som sa pokúsil vytvoriť niečo podobné aj do môjho obľúbeného prehliadača – Chrome. K dátam sa moje nové rozšírenie dostane pomocou už v prvej časti spomínaného protokolu REST, ktorý je v SharePointe štandardne podporovaný od verzie 2010.
Zoznam kontaktov ako plugin pre Chrome by potom mohol vyzerať nasledovne…
…a detail kontaktu v Chrome ak na moju fotku ukážem myšou:
Dáta o mojej osobe ktoré sú uložené v zozname typu “Contacts” ako “ZoznamZamestnacov”. Moje ID je 4 a tak k dátam o mojej osobe sa dostanem pomocou RESTu: http://sharepoint-intranet/_vti_bin/listdata.svc/ZoznamZamestnancov(4)
Webová služba odpovie vo forme XML, ktorý sa priamo v prehliadači zobrazí nasledovne:
Teraz všetky doterajšie poznatky o protokole REST a Chrome rozšíreniach “zlepíme” dokopy a vytvoríme úplne nové rozšírenie. Budeme na to potrebovať práve 4 súbory (použil som súbory z Google tutoriálu pre vytvorenie prvého rozšírenia):
- icon.png – obrázok, ktorý reprezentuje štart rozšírenia, čiže miesto, kam sa klikne.
- manifest.json – popisuje obsah balíka rozšírenia.
- popup.html – HTML stránka ako obálka pre JavaScript, ktorý cez REST prečíta a zobrazí dáta zo SharePointu.
- popup.js – JavaScript, ktorý cez REST prečíta a zobrazí data zo SharePointu.
Obsah jednotlivých súborov si teraz pozrieme podrobnejšie.
{ "manifest_version": 2, "name": " Contacts from Sharepoint Intranet ", "description": "Contacts from Sharepoint Intranet", "version": "1.0", "browser_action": { "default_icon": "icon.png", "default_popup": "popup.html" }, "permissions": [ "https://sharepoint-intranet/" ] }
manifes.json
popup.html
<!doctype html> <html> <head> <title>Together</title> <style> body { min-width: 357px; overflow-x: hidden; } img { margin: 5px; border: 2px solid black; vertical-align: middle; width: 85px; height: 105px; } </style> <script src="popup.js"></script> </head> <body> </body> </html>
popup.js
var contactsgenerator = { requestIMG: function() { this.showPhotosIMG_(this); }, showPhotosIMG_: function (e) { for (var i = 1; i <= 15; i++) { var img = document.createElement('img'); img.src = this.constructContactsURL_(i); img.setAttribute('alt', 'Contacts from Sharepoint Intranet'); img.setAttribute('title', this.getMOSS_(i, 'ZozmanZamestnancov')); document.body.appendChild(img); } }, constructContactsURL_: function (i) { return "https://sharepoint-intranet/Lists/ZoznamZamestnancov/Attachments/"+i+"/ContactPicture.jpg" }, getMOSS_: function(i, listname) { var xhReq = new XMLHttpRequest(); xhReq.open("GET", "https://sharepoint-intranet/_vti_bin/listdata.svc/" + listname + "(" + i + ")", false); xhReq.send(null); var serverResponse = xhReq.responseXML; var fn=serverResponse.getElementsByTagName("FullName")[0].childNodes[0].nodeValue; try { var mn=serverResponse.getElementsByTagName("MobileNumber")[0].childNodes[0].nodeValue; var mail=serverResponse.getElementsByTagName("EMailAddress")[0].childNodes[0].nodeValue; } catch (err) { return fn; } return fn+" "+mn+" "+mail; } }; document.addEventListener('DOMContentLoaded', function () { contactsgenerator.requestIMG(); } );
JavaScript číta prostredníctvom REST-u serverom vrátené dáta vo formáte XML pomocou funkcie getMOSS, ktorá ich zároveň parsuje do premenných ako mn-Mobile Number, alebo fn-Full Name. Funkcia showPhotosIMG vytvára obrázky kontaktov s dátami ako atribút ‘title’, pričom ako ‘src’ obrázka sa použije jpg kontaktu zo ShrarePointu funkciou constructContactsURL. Tieto sa potom pridajú do hostiteľského HTML pomocou document.body.appendChild(img).
V tomto prípade sa číta konštantných 15 kontaktov. Úplne správne by bolo ešte treba zistiť počet kontaktov v zozname, napríklad pomocou ďalšieho REST volania:
https://sharepoint-intranet/_vti_bin/Listdata.svc/ZoznamZamestnancov/$count. Výsledok tohto volania by sme potom mohli uložiť do premennej a tú použiť namiesto konštanty 15. Ale to už nechám na čitaeľov.
No, a to je v podstate všetko, čo sme potrebovali. Ešte samozrejme rozšírenie nainštalovať a vyskúšať. Nainštalovanie nášho nového rozšírenia vykonáme v záložke „Rozšírenia“ pomocou “Načítať rozbalené rozširenie”. V tomto prípade sú všetky 4 zdrojové súbory rozšírenia uložené v adresári X:\Temp\CHE-Tog.
Pri písaní týchto článkov som použil:
– SharePoint Server 2010 a 2013
– Chrome, verzia 31.0.1650.63 m
– Eclipse Kepler, ako editor JavaScriptu.