Visualizzare i metadati degli allegati delle liste sharepoint

In Sharepoint, mentre le document library sono “documento-centriche” (un documento con eventuali metadati), le liste sono “metadati-centriche“, ovvero aggregazioni di metadati con uno o più eventuali allegati.

Gli allegati nelle liste in Sharepoint 2007 non hanno la stessa dignità di quelli delle document library: non sono versionabili versionamento e non hanno attributi, venendo esposti nel dettaglio di un Item dopo i metadati e solo come elenco di titoli con collegamento ipertestuale.

In un progetto che sto seguendo, un obiettivo è quello di ordinare e visualizzare gli allegati di un ListItem insieme alla loro data di caricamento/modifica, utilizzando solo semplici personalizzazioni del frontend e quindi senza scrivere bytecode. Devono quindi essere recuperati gli attributi/metadati degli allegati (per es. data e ora di creazione, data e ora di modifica).

Purtroppo tramite

  • interfaccia standard
  • personalizzazione delle webpart con Sharepoint Designer (SPD)
  • utilizzo dei web services di sharepoint (per es. lists.aspx con SPServices) in logica lato client (javascript)

non c’è possibilità di reperire tali metadati, anche se questi esistono: per esempio vengono visualizzati in Explorer usando la funzione “Apri con Esplora Risorse” e dai vari applicativi MS Office integrabili con Sharepoint.

Queste funzioni e questi applicativi usano il protocollo standard WEBDAV, implementato anche da Sharepoint, e quindi l’idea è quella di utilizzare tale protocollo dal browser tramite javascript per leggere questi dati.

Esistono molte librerie javascript, ma ho preferito spendere qualche minuto per fare un po’ di reverse-engineering del protocollo (utilizzando Wireshark) implementando così una funzione ad hoc, e acquisendo poi ulteriore know how.

In sisntesi WebDAV è un’estensione del protocollo HTTP, poiché aggiunge alcuni nuovi metodi come PROPFIND, MOVE, DELETE in aggiunta ai canonici  GET, POST, PUT.

Per i miei scopi ho analizzato solo il metodo PROPFIND, che permette di leggere (anche a più livelli) gli attributi delle risorse partendo da una data URI, in particolare vengono restituite in un Blob XML le seguenti informazioni:

  • l’url
  • il displayname
  • la data di creazione (UTC)
  • la data di modifica (UTC)
  • la dimensione in byte
  • l’autore dell’ultima modifica
  • la tipologia della risorsa (file o folder)

Per ottenere la risposta XML basta effettuare una chiamata jquery del tipo:

$.ajax({ 
 url: davurl,
 method: "PROPFIND",
 async: false,
 headers: { Depth: 1 } /* 0 = only the url-resource, 1 = the folder and the resources contained , undefined = recurse subfolders */
 }).done(function(data){ 
    var x = data.xml;
   // here analize the xml response
 });

I parametri sono l’url della risorsa (file o cartella) e  il numero di livelli  da analizzare (Depth ), che viene invece passato in un apposito campo nell’header della richiesta HTTP.

Per leggere la risposta usiamo sempre jquery (o meglio l’estensione xpath) per navigare l’XML:

$(x).xpath("//D:response",resolver).each(function(){ 
 
 var url = $(this).xpath("D:href",resolver).text();
 var displayname = $(this).xpath("D:propstat/D:prop/D:displayname",resolver).text();
 var creationdate =$(this).xpath("D:propstat/D:prop/D:creationdate",resolver).text();
 var size =$(this).xpath("D:propstat/D:prop/D:getcontentlength",resolver).text();

});

dove

resolver = function(prefix){
   return "http://www.w3.org/1999/xhtml"; 
}

Per renderne più agevole l’utilizzo, ho incapsulato il “codice WebDav” in una classe javascript “DavResource” (cfr. allegato all’articolo), che ha come prerequisiti le seguenti librerie:

  • JQuery (jquery.js >= 1.9.1)
  • Xpath (jquery.xpath.js)
  • MomentJs (moment.min.js)

In Sharepoint basta quindi personalizzare la pagina contenente il dettaglio del ListItem di interesse, ovvero DispForm.aspx, inserendo una Webpart Editor Contenuto collegata ad uno script HTML precedentemente caricato in Sharepoint stesso, contenente i riferimenti  agli script e la seguente sezione di codice:

<script type="text/javascript">

$(function() {
 $("#idAttachmentsTable").find("a").each(function(){
  var lnk = $(this).attr("href");
  var dav = DavResource.getDAVResource(lnk.replace(/ /ig,"%20"));
  $(this).after("&nbsp;"+ dav.lastmodified); 
 });
} 
 
</script>

Tale codice individua la tabella degli attachment e per ogni attachment recupera ed espone i relativi metadati (qui viene esposta solo la data di ultima modifica)

Metadati allegati sharepoint

Metadati allegati sharepoint

Note

I 2 metodi statici getDAVResource/getDAVResources della classe DavResource ritornano oggetti (rispettivamente un singolo ed un array) della classe stessa, aventi i seguenti attributi:

  • url
  • displayname
  • creationdate (formato ISO in Localtime)
  • lastmodified  (formato ISO in Localtime)
  • isfolder
  • contentlength
  • modifiedby

Download

Scarica la classe javascript DavResourcejquery.DavResource.js.zip (1KB), che non vuole essere sicuramente un progetto finito, ma un punto di partenza per uno nuovo.

Alcuni riferimenti

WebDAV Resources http://www.webdav.org/

WebDav for dummies http://blog.coralbits.com/2011/07/webdav-protocol-for-dummies.html

 

 

Pubblicato in Sharepoint, Software | Contrassegnato , | Lascia un commento

Anno nuovo, sito nuovo

Era da qualche qualche anno che avevo in cantiere di farlo, negli ultimi mesi l’avevo creato e rivisto più volte per la solita mania di perfezione….

Alla fine mi sono deciso e l’ho pubblicato, così com’era, anche se non è perfetto come me lo immaginavo: il sito per la pubblicazione delle mie fotografie, dalla grafica semplice, per dare maggior risalto all’immagine e dalla navigazione veloce a soli 2 livelli.

Ho pubblicato subito un set limitato di immagini, ma molto presto ne aggiungerò tante altre…

Mauro Dalfreddo Photography

Mauro Dalfreddo Photography

In questo sito desidero presentare i miei lavori come fotografo amatore, voglio esporre alcune foto scattate nei viaggi e negli itinerari percorsi,  soprattutto quei paesaggi e quei particolari che mi hanno particolarmente colpito. 
Solitamente utilizzo la post-elaborazione digitale, non per modificare radicalmente la foto,  ma per far si che l’immagine rispecchi quello che i miei occhi e i miei sensi hanno percepito al momento dello scatto:  voglio quindi tentare di comunicare le emozioni provate in quegli istanti.

Possiedo una Canon EOS 600D con ottiche Tamron 18-270 e Sigma 8-16 e cerco di coltivare la mia passione per la fotografia,  scatti e postproduzione, mediando tra i numerosi impegni professionali e familiari.

In fondo è vero, non è sempre l’attrezzatura che fa la foto: è la mente, il cuore e … un pizzico di fortuna!

Riferimenti

Mauro Dalfreddo Photography:  http://www.dalfreddo.it/ o http://www.dalfreddo.it/photo/

 

 

 

Pubblicato in Fotografia, Pensieri | Contrassegnato , , | Lascia un commento

Un sentiero per Cesare

ieri, 29 settembre 2013 – Cesiomaggiore, Val Canzoi, alle porte del Parco Nazionale delle Dolomiti Bellunesi. Noi Dalfreddo e alcuni amici di Cesare, sfidando il tempo avverso, abbiamo inaugurato alla presenza del Sindaco e di alcuni suoi ex-colleghi Mazarol uno stupendo sentiero naturalistico: un breve percorso che partendo dall’Orsera si snoda nel bosco accanto al torrente Caorame, costeggiando laghetti naturali e incorniciato dalle possenti montagne.

Un sentiero per Cesare

Un sentiero per Cesare

Flora e Yuri, come guide naturalistiche, hanno erudito i presenti in merito alle bellezze naturalistiche, soffermandosi sulla micro fauna e flora tipica di questi posti e raccontandoci anche le credenze legate alle storie delle fate Anguane e del folletto Mazarol che abitano questi luoghi.

9 pannelli ci hanno accompagnato lungo il sentiero: i contenuti, elaborati da amici ed ex-colleghi Mazarol di Cesare, sono derivati dai suoi lavori per aspetti squisitamente naturalistici, per riflessioni ed attività didattiche da farsi direttamente sul luogo, ci sono sue fotografie di escursioni come guida naturalistica e momenti conviviali insieme agli amici, e anche brani tratti dalle sue poesie.

E questo sentiero dedicato a Cesare, intitolato “di terra e d’amore” come la pubblicazione delle sue poesie, è proprio uno di quelli da lui preferiti; è inevitabile percorrendo il sentiero passo dopo passo, ripensare al caro Cugino, al modo in cui lui lo percorreva… Cesareeeeeeeeeeee !!

Rannicchiato sulla campagna

io vite contorta e solare

ascolto la terra,

il respiro della mia terra

che sa di antico

di gesti e suoni lontani

e dorme la mia anima

cullata da questa quiete infinita

(La mia terra – da “di terra e d’amore” di Cesare Dalfreddo)

Il sentiero è da ripercorrere sicuramente, magari con più attenzione durante una bella giornata di sole; arrivedersi quindi all’Orsera.

Riferimenti

L’Evento , Cooperativa Mazarol

Pubblicato in Pensieri | Contrassegnato , | Lascia un commento