Tuesday, July 23, 2013

SharePoint 2010 - Semplice Cascading Lookup con SPServices

Ancora un post su quell'ottimo strumento che è SPServices, il framework jQuery/Ecmascript per SharePoint!

Uno scenario semplice: abbiamo due liste di anagrafiche, ad esempio, Nazioni e Aziende per Nazioni, e una lista che ha le due colonne Lookup, Nazione e Azienda.
Vogliamo poter utilizzare la prima Lookup, Nazione, per filtrare la seconda, Azienda, per le sole Aziende per il Paese selezionato.

Creiamo la lista Nazioni, con il solo campo Title.




Ora creiamo la lista Aziende con Title (Nome Azienda) e Nazione (lookup verso la lista Nazioni).



Ora, creiamo una lista CustomList1 che abbia le due colonne Nazione e Azienda, rispettivamente lookup di Nazioni e Aziende.

Modifichiamo i form NewForm.aspx e EditForm.aspx, inserendo il codice che segue, avendo cura di caricare in SiteAssets i file .js di cui abbiamo bisogno:

jquery.SPServices-0.7.2.min.js (download qui)
jquery-1.8.2.min.js (testato con questa versione)

Ecco il codice da inserire in entrambi i form (new e edit):

<script type="text/javascript" src="../../SiteAssets/js/jquery-1.8.2.min.js"></script>
<script type="text/javascript" src="../../SiteAssets/js/jquery.SPServices-0.7.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
  $().SPServices.SPCascadeDropdowns({
    relationshipList: "Società",  //Display Name della Lista della seconda Lookup
    relationshipListParentColumn: "Nazione", //Static Name della colonna della Lista per la prima Lookup
    relationshipListChildColumn: "Title", //Static Name della colonna della seconda Lookup (Nome Azienda)
    //CAMLQuery: "<Eq><FieldRef Name='Status'/><Value Type='Text'>Active</Value></Eq>",   //Eventuale query per filtrare i risultati sulla seconda Lookup
    parentColumn: "Nazione", //Display Name della colonna come scritta nel form New o Edit di CustomList1
    childColumn: "Azienda", //Display Name della colonna come scritta nel form New o Edit di CustomList1
    simpleChild: true //modifica la visualizzazione della seconda Lookup in semplice dropdown
  });
});
</script>

Quindi, aprendo un form, ad esempio, nuovo elemento:


La seconda tendina rimane vuota, mentre se selezioniamo la Nazione:

Abbiamo il filtro sulle voci della seconda tendina:


Ovviamente, possiamo aggiungere altro codice per andare a mettere in cascata una terza lookup.

L'unica accortezza è che gli script portano il nome visualizzato nel form delle colonne: se si cambia questa etichetta o, banalmente, si utilizza un sito multilingua, bisogna andare a modificare gli script.

E' possibile richiamare tutto in un .js (magari nella master page) in modo da fare le modifiche solo una volta e non dover modificare entrambi i form.