L'intero sistema di navigazione di Sharepoint è completamente esposto attraverso il suo relativo modello ad oggetti. Abbiamo infatti un nuovo namespace, dalla versione 3.0 di Windows Sharepoint Services, in grado di manipolare i nodi di navigazione dei nostri siti. Il namespace in questione è il Microsoft.Sharepoint.Navigation; al suo interno, troviamo queste principali classi:

  • SPNavigation - che rappresenta il sistema di navigazione di un sito
  • SPNavigationNode - che rappresenta un singolo nodo di una barra di navigazione
  • SPNavigationNodeCollection - che rappresenta una collezione di nodi di navigazione
Una proprietà di tipo SPNavigation, ci viene offerta dalla classe SPWeb. Attraverso la proprietà Navigation, infatti, siamo in grado di recuperare sia la barra di navigazione che la quicklaunch bar di ogni sito Sharepoint, ed effettuare delle operazioni di personalizzazione su di esse:

using(SPWeb web = SPControl.GetContextWeb(Context))

{
//aggiungo degli item alla navigazione SPNavigationNodeCollection quicklaunch = web.Navigation.QuickLaunch;
SPNavigationNodeCollection navbar = web.Navigation.TopNavigationBar;

SPNavigationNode peppe = new SPNavigationNode("PeppeDotNet", "http://www.peppedotnet.it");
quicklaunch.AddAsFirst(peppe);
navbar.AddAsLast(peppe);

SPNavigationNode prevNode = web.Navigation.GetNodeByUrl("http://localhost/SubSite");
navbar.Add(peppe, prevNode);
}

Come potete vedere, possiamo recupare le collezioni di nodi relative alla barra di navigazione e alla quicklaunch bar, attraverso le relative proprietà esposte dalla classe SPNavigation. Poi possiamo aggiungere dei nodi alla navigazione, sfruttando uno di questi metodi della classe SPNavigationNodeCollection:
  • AddAsFirst - Aggiunge un nodo all'inizio della collezione
  • AddAsLast - Aggiunge un nodo alla fine della collezione
  • Add - Aggiunge un nodo, subito prima di un nodo di riferimento
Inoltre, è possibile sfruttare la classe SPNavigationNode, per l'inserimento o la modifica di sottonodi di navigazione:

using(SPWeb web = SPControl.GetContextWeb(Context))

{
SPList list = web.Lists["MyList"];
SPNavigationNode rootList = web.Navigation.GetNodeByUrl(list.DefaultViewUrl);
foreach (SPView view in list.Views)
{
SPNavigationNode node = new SPNavigationNode(view.Title, view.Url, false);
rootList.Children.AddAsFirst(node);
}
}

In questo modo, abbiamo aggiunto dei sub-menu alla voce relativa ad una specifica lista, in modo tale da inserire nella struttura di navigazione anche le sue viste.
Veramente utile !