Partager via


Procédure : créer une fonction pour inscrire une règle d’intégrité

Dernière modification : mercredi 23 septembre 2009

S’applique à : SharePoint Foundation 2010

Vous installez une nouvelle règle d’intégrité en inscrivant celle-ci avec Analyseur d’intégrité SharePoint. Pour cela, vous devez d’abord placer l’assembly qui contient la règle dans le Global Assembly Cache (GAC) sur chaque ordinateur, puis appeler la méthode RegisterRules(Assembly) de la classe SPHealthAnalyzer.

Lorsque vous travaillez dans votre environnement de développement, vous pouvez utiliser l’outil Global Assembly Cache Tool (Gacutil.exe) pour placer l’assembly dans le GAC, puis écrire du code personnalisé pour charger l’assembly et inscrire la règle. Dans un environnement de production, il est préférable d’utiliser une procédure plus robuste. Dans ce cas, la règle sera probablement installée par quelqu’un d’autre, par exemple un administrateur de batterie de serveurs, et vraisemblablement installée sur plusieurs serveurs, et pas seulement sur le serveur utilisé pour le développement.

Le meilleur moyen d’inscrire une règle avec Analyseur d’intégrité SharePoint dans un environnement de production consiste à créer une fonctionnalité SharePoint à cet effet. La clé de cette technique consiste à inclure, comme partie de l’assembly de la règle, des gestionnaires d’événements pour les événements FeatureActivated et FeatureDeactivating. Lorsqu’un administrateur de batterie de serveurs installe la fonctionnalité, vos gestionnaires d’événements sont inscrits dans le système. Lorsqu’un administrateur de batterie de serveurs active la fonctionnalité, le code dans votre gestionnaire d’événements FeatureActivated peut appeler la méthode RegisterRules(Assembly) pour inscrire la règle. Lorsqu’un administrateur de batterie de serveurs désactive la fonctionnalité, le code dans votre gestionnaire d’événements FeatureDeactivating peut appeler la méthode UnregisterRules(Assembly) pour supprimer la règle.

Cette rubrique explique comment créer des gestionnaires d’événements pour inscrire ou annuler une règle, et comment inclure des gestionnaires d’événements dans l’assembly de règle dans une fonctionnalité au niveau de la batterie de serveurs. Pour des informations sur le déploiement de la fonctionnalité et l’installation de l’assembly de règle dans le GAC, voir Procédure : déployer une règle d’intégrité avec un package de solution.

Pour créer des gestionnaires d’événements afin d’inscrire ou d’annuler une règle d’intégrité

  1. Ouvrez Visual Studio en tant qu’administrateur : cliquez sur le programme dans le menu Démarrer, puis sélectionnez Exécuter en tant qu’administrateur.

  2. Ouvrez le projet qui contient le code de votre règle d’intégrité.

  3. Ajoutez une nouvelle classe au projet.

    Dans l’Explorateur de solutions, sélectionnez le nom du projet, choisissez Ajouter, puis Nouvel élément…. Dans la boîte de dialogue Ajouter un nouvel élément, choisissez le modèle Classe. Nommez la classe RuleFeatureReceiver. Cliquez ensuite sur Ajouter.

  4. Ajoutez des instructions using (Imports dans Visual Basic) pour les espaces de noms indiqués dans l’exemple suivant.

    using System;
    using System.Collections.Generic;
    using System.Reflection;
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.Administration.Health;
    
    Imports System
    Imports System.Collections.Generic
    Imports System.Reflection
    Imports Microsoft.SharePoint
    Imports Microsoft.SharePoint.Administration.Health
    
  5. Modifiez la déclaration de classe afin que la classe hérite de la classe SPFeatureReceiver.

    class RuleFeatureReceiver : SPFeatureReceiver
    
    Public Class RuleFeatureReceiver
        Inherits SPFeatureReceiver
    
  6. Substituez et implémentez la méthode FeatureActivated(SPFeatureReceiverProperties), comme illustré dans l’exemple suivant.

    public override void FeatureActivated(SPFeatureReceiverProperties properties)
    {
        Assembly a = Assembly.GetExecutingAssembly();
        IDictionary<Type, Exception> exceptions = SPHealthAnalyzer.RegisterRules(a);
    
        if (exceptions != null)
        {
            string logEntry = a.FullName;
            if (exceptions.Count == 0)
            {
                logEntry += " All rules were registered.";
            }
            else
            {
                foreach (KeyValuePair<Type, Exception> pair in exceptions)
                {
                    logEntry += string.Format(" Registration failed for type {0}. {1}",
                                              pair.Key, pair.Value.Message);
                }
            }
            System.Diagnostics.Trace.WriteLine(logEntry);
        }
    }
    
    Public Overrides Sub FeatureActivated(ByVal properties As Microsoft.SharePoint.SPFeatureReceiverProperties)
    
        Dim a As Assembly = Assembly.GetExecutingAssembly()
        Dim exceptions As IDictionary(Of Type, Exception) = SPHealthAnalyzer.RegisterRules(a)
    
        If Not exceptions Is Nothing Then
            Dim logEntry As String = a.FullName
            If exceptions.Count = 0 Then
                logEntry += " All rules were registered."
            Else
                Dim pair As KeyValuePair(Of Type, Exception)
                For Each pair In exceptions
                    logEntry += String.Format(" Registration failed for type {0}. {1}", _
                                                  pair.Key, pair.Value.Message)
                Next
            End If
            System.Diagnostics.Trace.WriteLine(logEntry)
        End If
    
    End Sub
    
  7. Substituez et implémentez la méthode FeatureDeactivating(SPFeatureReceiverProperties), comme illustré dans l’exemple suivant.

    public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
    {
        Assembly a = Assembly.GetExecutingAssembly();
        IDictionary<Type, Exception> exceptions = SPHealthAnalyzer.UnregisterRules(a);
    
        if (exceptions != null)
        {
            string logEntry = a.FullName;
            if (exceptions.Count == 0)
            {
                logEntry += " All rules were unregistered.";
            }
            else
            {
                foreach (KeyValuePair<Type, Exception> pair in exceptions)
                {
                    logEntry += string.Format(" Unregistration failed for type {0}. {1}",
                                              pair.Key, pair.Value.Message);
                }
            }
            System.Diagnostics.Trace.WriteLine(logEntry);
        }
    }
    
    Public Overrides Sub FeatureDeactivating(ByVal properties As Microsoft.SharePoint.SPFeatureReceiverProperties)
    
        Dim a As Assembly = Assembly.GetExecutingAssembly()
        Dim exceptions As IDictionary(Of Type, Exception) = SPHealthAnalyzer.UnregisterRules(a)
    
        If Not exceptions Is Nothing Then
            Dim logEntry As String = a.FullName
            If exceptions.Count = 0 Then
                logEntry += " All rules were unregistered."
            Else
                Dim pair As KeyValuePair(Of Type, Exception)
                For Each pair In exceptions
                    logEntry += String.Format(" Unregistration failed for type {0}. {1}", _
                                                  pair.Key, pair.Value.Message)
                Next
            End If
            System.Diagnostics.Trace.WriteLine(logEntry)
        End If
    
    End Sub
    
  8. Générez le projet.

Pour créer une fonctionnalité qui installe une règle d’intégrité

  1. Créez un dossier Features.

    Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le nom du projet, choisissez Ajouter, puis sélectionnez Nouveau dossier. Tapez Features.

  2. Créez un sous-dossier pour votre fonctionnalité.

    Cliquez avec le bouton droit sur le dossier Features, choisissez Ajouter, puis sélectionnez Nouveau dossier. Tapez le nom de votre fonctionnalité (par exemple, CompanyName.HealthRules).

    Ensuite, lorsque vous créerez un package de solution pour déployer la fonctionnalité, un dossier portant le même nom sera créé dans le dossier %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\FEATURES sur chaque serveur de la batterie de serveurs. Le nom que vous donnez au dossier peut aider les administrateurs à retrouver le fichier de définition de votre fonctionnalité.

  3. Créez un fichier de définition de fonctionnalité.

    Cliquez avec le bouton droit sur le sous-dossier de votre fonctionnalité, sélectionnez Ajouter, puis Nouvel élément.... Dans la boîte de dialogue Ajouter un nouvel élément, sélectionnez le modèle Fichier XML. Nommez le fichier Feature.xml. Puis, cliquez sur Ajouter.

  4. Ouvrez le fichier Feature.xml dans l’éditeur.

  5. Supprimez la première (et unique) ligne du fichier et collez à sa place le code suivant.

    <Feature xmlns="https://schemas.microsoft.com/sharepoint/"
             Scope="Farm"
             Hidden="FALSE"
             Title="Your Title"
             Description="Your description"
             Id="00000000-0000-0000-0000-000000000000"
             ReceiverAssembly="<assembly name>, Version=<number>, Culture=<culture>, PublicKeyToken=<token>"
             ReceiverClass="MyNamespace.RuleFeatureReceiver"
             AlwaysForceInstall="TRUE"
             ImageUrl=""/>
    
  6. Dans Feature.xml, remplacez les valeurs des attributs Title et Description par les vôtres.

  7. Remplacez la valeur de l’attribut Id par le nouveau GUID généré (sans accolades).

    Vous pouvez utiliser l’outil GuidGen (guidgen.exe) pour obtenir un nouveau GUID. Dans le menu Outils de Visual Studio, cliquez sur Créer GUID. Dans la boîte de dialogue Créer GUID, sélectionnez 4. Format de registre, puis cliquez sur Copier. Collez le contenu du Presse-papiers entre les guillemets après l’attribut Id. Supprimez les accolades du GUID.

  8. Remplacez la valeur de l’attribut ReceiverAssembly par le nom complet, en quatre parties, de votre assembly.

    Pour savoir comment obtenir le nom complet de votre assembly, voir Procédure : créer un outil pour obtenir le nom complet d'un assembly.

  9. Remplacez la valeur de l’attribut ReceiverClass par le nom qualifié par un espace de noms de votre sous-classe SPFeatureReceiver.

  10. Enregistrez le fichier.

Pour savoir comment déployer la fonctionnalité, voir Procédure : déployer une règle d’intégrité avec un package de solution.

Voir aussi

Tâches

Procédure : déployer une règle d’intégrité avec un package de solution

Procédure : créer un outil pour obtenir le nom complet d'un assembly

Concepts

Utilisation des fonctionnalités