Monday, December 19, 2011

WebPart targeting feature con User Profile e custom con IRuntimeFilter2


Nel paradigma delle Intranet 2.0 gioco un ruolo importante la personalizzazione dei contenuti. Sintetizzando il concetto possiamo dire che gli utenti devono essere in grado di navigare una intranet ottenendo contenuti personalizzati. Quali sono i criteri di personalizzazione? Sicuramente un ricco profilo utente può essere un'ottima fonte di informazioni per definire un audience, ma non è l'unica fonte dati. L'appartenenza a gruppi potrebbe essere di interesse per individuare classi di profilo. Talvolta sono necessario delle logiche personalizzate che si basano su dominio, nome utente o informazioni contenuti in altri sistemi (ad esempio sistema di HR).

Calando il requisito su SharePoint troviamo una funzionalità che fa il caso; è il targeting e può essere applicato ad interi contenuti (item in generale) o parti di un contenuto (webpart). Il targeting viene presentato come un campo con il picker che ne permette la selezione di audience, distribution list e sharepoint group. 

Con l'amico Carmelo abbiamo appronfondito gli internals. La configurazione di SharePoint richiede che per usare la funzionalità dei targeting sia necessario configurare la User Profile Service Application e associarla alla web application tramite il proxy; senza la USPA associata alla web application, non viene visualizzata la proprietà della webpart Target Audience all'interno della ToolPart.



Il sistema del targeting è implementato a basso livello e questo ne per permette l'applicazione sulle webpart senza richiedere specifici sviluppi.
Queste caratteristiche fanno si che il targeting sia disponibilie sono sulla versione Server e non quella  Foundation. 

Qui è nata la mia curiosità e l'approfondimento di questo post. Domande tipo "è possibile fare uso del targeting anche senza UPSA?" o "se le formazioni delle audience sono contenuti sui gruppi SharePoint perchè dobbiamo necessariamente fare uso della USPA?" o "sono ammesse logiche custom per l'assegnazione della audiences?"

Il principale indagato era un componente che viene istanziato in tutte le webpart, la cui configurazione è salvata sul web.config nella chiave SharePoint/RuntimeFilter. Sto parlando di questa chiave

La classe Microsoft.Office.Server.Audience.AudienceManager implementa le interfacce IRuntimeFilter (ormai obsoleta) e IRuntimeFilter2 usata dal WebPartManager per valutare se il sistema di filtro delle webpart debba essere valutato e utilizzato, e ne influenza la visualizzazione all’interno della Toolpart. Ho verificato che commentando questa chiave le webparts non visualizzando più il campo Target Audiences.

Facendo qualche ricerca ho trovato che componente era già presente su di Microsoft.SharePoint.Portal, Version=11.0.0.0 (naturalmente al tempo non c'erano ancora le service application); il sistema ha quindi un punto di estendibilità e permette di implementare custom runtime filter per andare ad gestire i filtri sulle webpart. Ne parla approfonditamente il libro SharePoint 2010 Web Part in Action di Wictor Wilén (SharePoint MVP e MCM) dedicando appunto un capitolo all’implementazione di un custom filter

"The runtime filter in SharePoint is a specific class derived from the IRuntimeFilter2 interface. This class is registered in the web.config file and is called for every Web Part when rendering a page. A specific method in the class tells SharePoint whether it should be shown to the user. In this section you’ll create a custom runtime filter that can be used to target the Web Part using the site collection groups. This will give you the option to target Web Parts to specific groups even in SharePoint Foundation."

0 comments:

Post a Comment