Récemment chez un client nous avons eu un petit soucis de modification de navigation.Chaque fois que nous tentions d'utiliser la page de modification de navigation de sharepoint,nous avions une jolie exception générée par Sharepoint.
Un utilisateur avait supprimé une page qui était encore référencée dans la navigation et du coup générait une NullReferenceException.
Ici nous allons vérifier que tout les noeuds de la navigation renvoie vers une page existant dans la doclib "Pages" en créeant une nouvelle commande STSADM.
Cela aurait pu être fait autrement mais nous allons ici aborder l'extension de commandes STSADM.
Notre commande prendrant en paramètre l'url de la site collection dont nous souhaitons vérifier la navigation.
Créer un nouveau projet visual studio de type "Bibliothèque de classe"
Ajouter ensuite le
using Microsoft.SharePointet
using Microsoft.SharePoint.StsAdmin
Votre classe doit hériter et implémenter l'interface ISPStsadmCommand.
public interface ISPStsadmCommand { string GetHelpMessage(string command); int Run(string command, StringDictionary keyValues, out string output); } public string GetHelpMessage(string command) { return "\tCheck navigations node and pages\n" + "\t Using: stsadm -o checkNaviation -siteUrl http://monsite//n/n"; } public int Run(string command, StringDictionary keyValues, out string output) { if (!keyValues.ContainsKey("siteUrl")) { output = "Vous devez preciser l'url de la site collection\n"; return 0; } _siteUrl = keyValues["siteUrl"]; using (SPSite site = new SPSite(_siteUrl)) { using (SPWeb web = site.OpenWeb()) { if (!PublishingWeb.IsPublishingWeb(web)) { Console.WriteLine("Ce site n'est pas un site de type PUBLISHING\nFin du traitement"); return 0; } PublishingWeb pubWeb = PublishingWeb.GetPublishingWeb(web); foreach (SPNavigationNode navigationNode in pubWeb.CurrentNavigationNodes) { if (navigationNode.Children.Count > 0) { foreach (SPNavigationNode childrenNavNode in navigationNode.Children) if (!childrenNavNode.Url.Contains("?")) _urlToTest.Add(childrenNavNode.Url); } } TestPages(web); } } return 1; private static void TestPages(SPWeb p_web) { ListpageList = new List (); SPList pagesList = p_web.Lists["Pages"]; foreach (SPListItem pageItem in pagesList.Items) pageList.Add(pageItem.Name); foreach (string pageUrl in _urlToTest) { Console.WriteLine("Page testée\t =>{0}", pageUrl); if (!pageList.Contains(pageUrl)) Console.WriteLine("\t\t => EXISTE PAS\n\n"); else Console.WriteLine("\t\t => EXISTE\n\n"); } }
Ajout de notre commande à celles de stsadm. Créez-vous un fichier xml que vous appelerez par exemple stsadmcommands.mesExtensions.xml et ques vous allez ensuite copiez dans le répertoire /12/Config/ de votre installation Sharepoint. Voici la structure du fichier xml
Aucun commentaire:
Enregistrer un commentaire