Tuesday, August 24, 2010

Come nascondere Activity Type sul edit del profilo utente

Cosa sono le activity type?

Era un tema che avevo già affontato durante la mia sessione alla SharePoint Conference Italiana e che riprendo brevemente per che la fosse persa. Su SharePoint 2010 è presente una nuova funzionalità che permette agli utenti di essere notificati via feed su una serie di eventi e azioni che avvengono nel network. Alcune di questi sono legati ad azioni generate direttamente dagli utenti stessi (tipo il cambio dello stato, la scrittura di un post, il rating di un documento, ecc..) altre invece sono di sistema (ad esempio l’avvicinarsi del complenno, il giorno stesso del compleanno, le membership, ecc...).



La domanda è si possono scegliere quali activity fare visualizzare gli utenti ?

Facciamo l’esempio di un’azienda che non gestisce su sharepoint il campo manager. Avere un activity type che notifica il cambio del manager è inopportuno e quindi se ne ritiene opportuno disattivare questo feed.

Verificata con Microsoft l’assenza di metodi nel object model di SharePoint per nascondere delle activity type del profilo utente ho scoperto che sul database (don’t try this at home ) User Profile Service Application_ProfileDB c’è la tabella ActivityType che contiene l’elenco di tutte le activity type (finalmente i nomi delle tabelle sono autoesplicativi!). Questa tabella ha un campo ActivityTypeName che contiene il nome interno delle activity. Se il nome dell’activity inzia con INTERNAL_ questo type non verrà visualizzato sulla UI (editprofile.aspx).



Possiamo quindi modifica il contenuto di questa tabella andando cambiare il nome delle activity che vogliamo nascondere? Chiaramente NON è supportato.

Altenativamente si può agire sulla UI tramite JQuery per nascondere i controlli. Con JQuery è abbastanza semplice fare questo genere di ‘magheggi’. Ecco quindi la soluzione.

Prerequisito

Scaricare l’ultima versione di JQuery e relizzare un feature a livello di farm che permette di deployare i javascript (consiglio sia in installare il javascript nimizzato che quello in versione debug)

Soluzione

1) Identificare univocamente quali activity type si intende nascondere della pagina editprofile.aspx. Per fare ciò è necessario navigare sul sorgente della pagina (tramite view source del browser) e prendere i nomi/id degli controlli da nascondere. Per controllo che si occupa del activity type Change Manager s è il ctl00_PlaceHolderMain_ProfileEditorEdit_8. La cosa importante di questo nome è ProfileEditorEdit che identifica tutta l’area dei controlli della sezione Activity I’m following e il numero 8 che corrisponde all’ID del activity type nel database di cui facevo riferimento poco fa. Possiamo quindi essere certi avere un buon margine che questo identificativo non cambierà nel tempo.




2) Modificare la master page inserendo la direttiva per l’inclusione di Jquery



e la funzione che si occupa di nascondere e deselezionare il checkbox

1.  function HideActivityType(activityControl) {
2.      $("#" + activityControl).attr('checked', false);
3.      $("#" + activityControl).hide();
4.      $("label[for='" + activityControl + "']").hide();
5.      $("label[for='" + activityControl + "']").next().hide();
6.  }

La riga numero 2 prende il controllo checkbox e lo disabilita, le due righe successive si occupano di nascondere il controllo checkbox e della label ad esso associata. La riga 4 parte dal controllo label per navigare sul successivo controllo che è quello messo allo scopo per andare a capo (BR) e lo nasconde.

3) Inserire la parte Jquery che va a localizzare i controlli per nasconderli

1. $(document).ready(function () {
2.       // Edit profile page
3.       var managerChange = "ctl00_PlaceHolderMain_ProfileEditorEdit_8";
4.       HideActivityType(managerChange);
5. });



Bookmark and Share

Friday, August 6, 2010

Parodia dell'IPad

Ancora qualche giorno e poi iniziano le meritate vacanze, vi lascio un paio di esilaranti parodie di uno degli oggetti più desiderati dell'ultimo periodo.

Buon divertimentoe e buone ferie!