Ho già affrontato in un precedente post il problema dei menu a cascata, componente non disponibile OOB sulla piattaforma SharePoint 2010, proponendo una soluzione che fa uso di InfoPath. Il difetto di tale soluzione è che si applica solamente alla versione Enterprise di SharePoint, dal momento che le versioni Foundation e Server sono prive degli InfoPath Services.
Con questa prossima soluzione, che fa uso di JQuery, si potranno creare menù a cascata con qualsiasi versione di SharePoint, anche in assenza di InfoPath.
Riprendiamo quindi l’esempio precedente, con le due liste “Marche” e “Modelli”, creiamo una nuova lista che chiamiamo “Automobili”, e la popoliamo con due controlli a discesa “Marca” e “Modello”.
Ora è necessario rendere disponibile le librerie JQuery e JQ uery Library for Sharepoint . Nel mio caso ho creato una cartella sotto “SiteAssets” chiamata “Javascript” in cui ho inserito i componenti. I due file saranno quindi raggiungibili tramite http://<WEBSITE>/siteassets/javascript/<SCRIPT.JS>, ma è sufficiente caricare i file in una qualsiasi raccolta su cui gli utenti hanno diritto di lettura.
Torniamo ora alla nostra lista “Automobili” ed apriamo il modulo “NewForm.aspx” in modalità di modifica avanzata. Lo stesso procedimento sarà poi da applicare al modulo “EditForm.aspx”. Nel caso invece si applichi questa soluzione ad una raccolta documentale, sarà sufficiente modificare solamente il modulo “EditForm.aspx” per avere il menù a cascata sia sul nuovo elemento che sulla modifica.
Impostiamo la visualizzazione codice, ci posizioniamo sotto la riga
<asp:Content ContentPlaceHolderId="PlaceHolderMain" runat="server">
ed incolliamo il seguente script:
<script type="text/javascript" src="/siteassets/javascript/jquery-1.6.2.min.js"></script>
<script type="text/javascript" src="/siteassets/javascript/jquery.SPServices-0.7.1a.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$().SPServices.SPCascadeDropdowns({
relationshipList: "
Modelli
",
relationshipListParentColumn: "
Marca
",
relationshipListChildColumn: "
Title
",
parentColumn: "
Marca
",
childColumn: "
Modello
",
debug: true
});
});
</script>
Salviamo, avviamo il form, e osserviamo (con non poca soddisfazione) i risultati:
Il componente funziona alla grande, e non presenta l’effetto collaterale visto per il caso di InfoPath.
Vediamo ora i principali parametri utilizzati nella funzione:
- relationshipList : è la lista in cui è inserita la relazione tra I due campi, nel nostro caso la lista “Modelli”
- relationshipListParentColumn : è, nella lista di relazione, il campo padre, nel nostro caso il campo “Marca”
- relationshipListChildColumn : è, nella lista I relazione, il campo figlio, nel nostro caso il modello di vettura. In questo particolare caso, però, dobbiamo inserire come il valore “Title”, dal momento che, nella lista “Modelli”, abbiamo rinominato questo campo (ma che SharePoint, by design, mantiene con il suo nome di default).
- parentColumn : fa rifermento alla lista su cui stiamo operando, nel nostro caso “Automobili” e fa riferimento al campo padre, per noi “Marca”
- childColumn : fa rifermento alla lista su cui stiamo operando, nel nostro caso “Automobili” e fa riferimento al campo figlio, per noi “Modello”
E, come nel migliore dei casi, poca spesa tanta resa!