Les commandes STSADM peuvent s »avérer très utiles mais vous ne trouverez pas forcément la commande utile pour accomplir ce que vous voulez.
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.SharePoint;
et
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 pagesn" + "t Using: stsadm -o checkNaviation -siteUrl <a href="http://monsite//n/n">http://monsite//n/n</a>"; } public int Run(string command, StringDictionary keyValues, out string output) { if (!keyValues.ContainsKey("siteUrl")) { output = "Vous devez preciser l''url de la site collectionn"; 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'2014-02-20 17:02:46'est pas un site de type PUBLISHINGnFin 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) { List<string> pageList = new List<string>(); 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éet =>{0}", pageUrl); if (!pageList.Contains(pageUrl)) Console.WriteLine("tt => EXISTE PASnn"); else Console.WriteLine("tt => EXISTEnn"); } }
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 .
Merci pour le partage de vos connaissances et de détails comme très utile aussi bien que compréhensible.