In questi giorni mi sono trovato di fronte ad un nuovo problema. L'ambito è sempre quello di SharePoint.
Tutti gli utilizzatori di SharePoint, sapranno che quando si clikka sui file memorizzati nelle varie document library questi vengono aperti direttamente con i vari programmi associati alla tipologia dei file. Questo vuol dire che i .doc saranno aperti con Word, i .pdf con Acrobat Reader e così via.
Supponiamo adesso di voler modificare questo comporamento e di voler elaborare i file aperti da SharePoint prima di visualizzarli. Supponiamo anche di volerli visualizzare in applicazioni ASP.NET custom. Come fare? E' possibile, sempre con lo stesso click sul nome del file, scatenare una serie di elaborazioni, trasparenti all'utente? La risposta fortunatamente è si! Vediamo come.
Visualizzando il codice HTML che viene generato quando si visualizza il contenuto di una document library ci si accorgerà che i link saranno del tipo:
<A HREF="http://SERVER/SITO/Documento.est" onclick="DispDocItemEx(this,'FALSE','FALSE','TRUE','')">Documento.est</A>
Quello che si nota è che viene richiamata una funzione Javascript, la DispDocItemEx che in effetti è la responsabile dell'apertura e della visualizzazione dei documenti. La funzione è contenuta nel file OWS.JS che, per un'installazione in italiano di Windows e SharePoint, si può trovare all'interno del percorso:
C:\Programmi\File Comuni\Microsoft Shared\web server extensions\60\TEMPLATE\LAYOUTS\1040
Nel caso di lingue diverse effettuare le opportune conversioni. Non sto a riportare tutto il codice della funzione in quanto la potete tranquillamente trovare nel file indicato. Modificando opportunamente tale codice è possibile ottenere comportamenti customizzati. Ad esempio inserendo il frammento di codice seguente è possibile elaborare solo una certa tipologia di file (nell'esempio i tif) da un'applicazione ASP.NET custom:
if ((szHref.indexOf('.TIF') >0) || (szHref.indexOf('.tif') >0))
{
window.open("http://CUSTOM_APP/Page.aspx?doc=" + szHref);
event.cancelBubble = true;
event.returnValue = false;
return true;
}
Occorre però fare attenzione ad una modifica del genere in quanto variazioni fatte alla funzione DispDocItemEx hanno impatto su tutto il portale. Un'altro svantaggio è quello che si sta modificando un file di SharePoint che potrebbe anche essere sovrascritto da eventuali Service Pack.
Di contro il fatto di avere un effetto così immediato su tutto il portale, potrebbe essere il modo per influenzare il comportamento di tutti i documenti già esistenti.
Nel prossimo post vedremo come è possibile confinare questo comportamento a singoli siti defininendo site definition personalizzate.