Commande STSADM

Comment créer une extension STSADM

05/12/2010 1 833 lectures 2.8/5 (4 votes) Geoffrey Bertholet Sébastien Sougnez

La structure interne ainsi que le design d'AreaProg ont récemment été modifiés.
Suite à cela, le format de certains articles a été perturbé. Le problème est connu et en cours de résolution. Merci de votre compréhension.

Au premier abord, on pourrait croire que l'outil STSADM est fixe et que l'on ne sait pas le customiser. Et pourtant, il est tout à fait possible de créer des extensions et ce assez simplement. Voici les quelques étapes permettant d'en développer. Tout d'abord, il faut créer un projet de type Class library. Dans un souci de facilité et de rapidité, nous utiliserons l'outil WSPBuilder pour créer notre solution de type WSPBuilder Project. Une fois la solution créée, nous ajoutons une classe que nous nommerons ModifyListProperties. Cette classe doit implémenter l'interface STSADM.
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;

namespace MySTSADMCommand
{
    public class ModifyListProperties : Microsoft.SharePoint.StsAdmin.ISPStsadmCommand
    {
        #region ISPStsadmCommand Members

        public string GetHelpMessage(string command)
        {
            
	}

        public int Run(string command, System.Collections.Specialized.StringDictionary keyValues, out string output)
        {
            
        }

        #endregion
    }
}
Vous voyez donc que notre classe doit implémenter deux méthodes : GetHelp et Run Méthode GetHelp: Elle permet, comme son nom l'indique, de fournir une aide à l'utilisateur lorsque qu'il exécutera la commande. STSADM.exe -o -help NomCommande Le paramètre command passé à la méthode nous donne le nom de la commande exécutée. Ici nous renverrons un simple message décrivant la syntaxe de la commande. Méthode Run: C'est cette méthode qui sera appelée lorsque la commande STSADM sera exécutée. Cette méthode prends trois paramètres d'entées: - command : Nom de la commande exécutée. - keyValues : Les paramètres qui sont passés lors de l'exécution de la commande. - output : Si nécessaire, permet de renvoyer une chaine de caractère qui apparaîtra dans la console. Valeur de retour : 0 si tout se passe bien. -1 pour tout erreur autre que syntaxe. -2 pour une erreur de syntaxe. Dans notre exemple, la commande permettra de modifier la propriété AllowDeletion d'une liste. Tout d'abord, il faut vérifier si les paramètres nécessaires à l'exécution de la commande ont été fournis lors de l'appel à celle-ci. Si ce n'est pas le cas, nous renvoyons un message d'erreur ainsi que -2 en paramètre de retour car c'est une erreur de syntaxe. Si tous les paramètres sont correctement fourni, alors nous mettons à jour la propriétés de la liste. Voici le code de la méthode Run
int Microsoft.SharePoint.StsAdmin.ISPStsadmCommand.Run(string command, System.Collections.Specialized.StringDictionary keyValues, out string output)
        {
            string _Url = String.Empty;
            string _ListName = String.Empty;
            Boolean _ContainsParameters = false;

            output = null;

            try
            {

                if (keyValues.ContainsKey("Url"))
                    _Url = keyValues["url"];
                else
                    throw new Exception("	Command line error - url missing
	Usage :	 stsadm.exe -o ModifyListProperties {-url <url>} {-List <list>} {-AllowDeletion | -DoesNotAllowDeletion}");

                if (keyValues.ContainsKey("List"))
                    _ListName = keyValues["List"];
                else
                    throw new Exception("	Command line error - List missing
	Usage :	 stsadm.exe -o ModifyListProperties {-url <url>} {-List <list>} {-AllowDeletion | -DoesNotAllowDeletion}");

                using (SPSite site = new SPSite(_Url))
                {
                    using (SPWeb web = site.OpenWeb())
                    {
                        SPList _List = web.Lists[_ListName];

                        #region AllowDeletion
                        if (keyValues.ContainsKey("AllowDeletion"))
                        {
                            _List.AllowDeletion = true;
                            _ContainsParameters = true;
                        }

                        if (keyValues.ContainsKey("DoesNotAllowDeletion"))
                        {
                            _List.AllowDeletion = false;
                            _ContainsParameters = true;
                        }
                        #endregion

                        if (_ContainsParameters)
                        {
                            _List.Update();
                            output += string.Format("List {0} - Allow Deletion - {1}", _ListName, _List.AllowDeletion.ToString());
                        }
                        else
                        {
                            throw new Exception("	Command line error - Parameter missing
	Usage :	 stsadm.exe -o ModifyListProperties {-url <url>} {-List <list>} {-AllowDeletion | -DoesNotAllowDeletion}");
                        }
                    }
                }

                return 0;

            }
            catch (Exception ex )
            {
                output = ex.Message;
                return -2;
            }
        }
Voila, notre classe est maintenant complète. Il va falloir maintenant créer une architecture similaire au dossier 12 de SharePoint. Créons donc un dossier nommé CONFIG dans le dossier 12 de notre solution ainsi qu'un fichier de type xml qui permettra de définir la commande STSADM. Nommez ce fichier stsadmcommands.ModifyListProperties.xml. Nous l'appelons ainsi pour avoir la même nomenclature que les commandes STSADM basiques de SharePoint (cfr le dossier 12/CONFIG de SP). La structure de ce fichier xml ressemble à ceci :
<?xml version="1.0" encoding="utf-8" ?>
<commands>
	<command
	  name="ModifyListProperties"
	  class="MySTSADMCommand.ModifyListProperties,MySTSADMCommand, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d9cc65896e107053" />
</commands>
Nous retrouvons donc dans ce fichier un tag de type command qui comprend deux éléments : -name : Nom de la commande. -class : Signature de la classe. Maintenant que notre solution est complète, compilons-la et déployons la grâce à WSPBuilder (Merci SSO ;) ). Vous verrez maintenant que le fichier xml est bien présent dans le dossier 12/CONFIG de SharePoint et que la dll est bien présente dans la GAC. Il ne reste plus qu'à tester la commande.
Image
Vous pouvez télécharger la solution ici : Télécharger

Noter

Veuillez vous identifier ou vous inscrire pour donner une note à cet article.

Commentaires / Questions

Aucun commentaire.

Veuillez vous identifier ou vous inscrire pour réagir à cet article.

Avatar

Geoffrey Bertholet

Envoyer un mail Windows live messenger LinkedIn Facebook Rédacteur

50 points

Avatar

Sébastien Sougnez

Envoyer un mail Site web Windows live messenger LinkedIn Twitter Facebook MVP Administrateur

25754 points