vendredi 24 décembre 2010

Extension STSADM,STSADM

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 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)
{
List pageList = 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 NB:Votre fichier doit obligatoirement commencer par "stsadmcommands" Une fois cette étape faite,il ne reste plus qu'à déployer votre DLL dans le GAC et tester votre commande

Aucun commentaire:

Enregistrer un commentaire