O Cenário
Dias atrás precisei fazer uma implementação que devia obter a estrutura de navegação dos sites do Sharepoint e gerar um menu de navegação para o usuário. Essa é uma tarefa aparentemente trivial.
O Sharepoint oferece um funcionalidade de Navigation, você pode criar lógicas e estruturas de navegação para os sites da sua Site Collection, isso é uma mão na roda, pois como comentei você pode acessar via código as estruturas de navegação criadas e manipulá-las da forma que quiser. Você pode acessar as configurações de Navegação nas “Configurações do Site” na sessão “Aparência”
E o código abaixo demonstra como acessar as estruturas de navegação do Sharepoint via código.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
using Microsoft.SharePoint.Publishing; using Microsoft.SharePoint.Navigation; using Microsoft.SharePoint.Publishing.Navigation; private void TestNavigation() { using (SPSite site = new SPSite(SPContext.Current.Site.Url)) { SPWeb web = site.OpenWeb(this.UrlSite); if (web.Exists) { using (web) { PublishingWeb pubWeb = PublishingWeb.GetPublishingWeb(web); PortalNavigation portalNav = pubWeb.Navigation; SPNavigationNodeCollection nodeCurrent = portalNav.CurrentNavigationNodes; if (nodeCurrent.Count > 0) { foreach (SPNavigationNode node in nodeCurrent) { // Algum código para manipular os nós da navegação } } } } } } |
O Problema
Código feito, tudo aparentemente ok, o problema é que não disso funciona! Você pode perder horas procurando erros no seu código e não vai achar erros pois o código esta certo, então, ou você entra em contato com ESTA pessoa ou algum colega de trabalho lhe dá a solução, no meu caso, meu colega Fábio me deu a solução.
O “truque” é que para funcionar você precisa acessar as configurações da navegação, mover um site pra cima e pra baixo e salvar.
Acredito que ao salvar o Sharepoint gera, valida ou atualiza essa estrutura de navegação internamente e ela passa a ficar acessível (de fato) pelo código.
Note que na linha 19 dó código de exemplo estamos acessando a CurrentNavigationNodes, então você precisa fazer este esquema de subir e descer o site no nó Navegação Atual.
A partir disso vai funcionar.
Quem disse que computação é uma Ciência Exata?