Gewusst wie: Erstellen eines Features zum Registrieren einer Integritätsregel

Letzte Änderung: Mittwoch, 23. September 2009

Gilt für: SharePoint Foundation 2010

Eine neue Integritätsregel installieren Sie, indem Sie die Regel in SharePoint-Integritätsanalyse registrieren. Dazu müssen Sie zuerst die Assembly, die die Regel enthält, im globalen Assemblycache (Global Assembly Cache, GAC) auf jedem Computer platzieren und dann die RegisterRules(Assembly)-Methode der SPHealthAnalyzer-Klasse aufrufen.

Wenn Sie in Ihrer Entwicklungsumgebung arbeiten, können Sie das Tool für den globalen Assemblycache (Gacutil.exe) verwenden, um die Assembly im GAC zu platzieren, und anschließend benutzerdefinierten Code zum Laden der Assembly und zum Registrieren der Regel schreiben. In einer Produktionsumgebung sollten Sie ein robusteres Verfahren anwenden. In diesem Fall wird die Regel vermutlich von einer anderen Person installiert, z. B. von einem Serverfarmadministrator, und zwar sehr wahrscheinlich auf mehreren Servern, nicht nur auf dem für die Entwicklung vorgesehenen Server.

Die beste Möglichkeit, eine Regel mit SharePoint-Integritätsanalyse in einer Produktionsumgebung zu registrieren, besteht darin, ein SharePoint-Feature für diesen Zweck zu erstellen. Der Schlüssel bei dieser Vorgehensweise liegt darin, Ereignishandler für das FeatureActivated- und das FeatureDeactivating-Ereignis als Teil der Regelassembly einzubinden. Installiert ein Serverfarmadministrator das Feature, werden die Ereignishandler im System registriert. Wenn ein Farmadministrator das Feature aktiviert, kann der Code im FeatureActivated-Ereignishandler die RegisterRules(Assembly)-Methode zum Registrieren der Regel aufrufen. Deaktiviert ein Serverfarmadministrator das Feature, kann der Code im FeatureDeactivating-Ereignishandler die UnregisterRules(Assembly)-Methode der Regel aufrufen.

In diesem Thema wird erklärt, wie Sie Ereignishandler erstellen, die eine Regel registrieren und die Registrierung einer Regel aufheben, und wie Sie Ereignishandler und die Regelassembly in ein Feature auf Farmebene integrieren. Informationen zum Bereitstellen des Features und Installieren der Regelassembly im GAC finden Sie unter Gewusst wie: Bereitstellen einer Integritätsregel mit einem Lösungspaket.

So erstellen Sie Ereignishandler, die eine Integritätsregel registrieren und deren Registrierung aufheben

  1. Öffnen Sie Visual Studio als Administrator, indem Sie im Startmenü mit der rechten Maustaste auf das Programm klicken und dann Als Administrator ausführen auswählen.

  2. Öffnen Sie das Projekt, das den Code für die betreffende Integritätsregel enthält.

  3. Fügen Sie dem Projekt eine neue Klasse hinzu.

    Wählen Sie im Projektmappen-Explorer den Projektnamen aus, wählen Sie dann Hinzufügen und anschließend Neues Element… aus. Wählen Sie im Dialogfeld Neues Element hinzufügen die Vorlage Klasse aus. Geben Sie der Klasse den Namen RuleFeatureReceiver. Klicken Sie dann auf Hinzufügen.

  4. Fügen Sie using-Anweisungen (in Visual Basic Imports) für die im folgenden Beispiel gezeigten Namespaces hinzu.

    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. Ändern Sie die Klassendeklaration dahin gehend, dass die Klasse von der SPFeatureReceiver-Klasse erbt.

    class RuleFeatureReceiver : SPFeatureReceiver
    
    Public Class RuleFeatureReceiver
        Inherits SPFeatureReceiver
    
  6. Überschreiben und implementieren Sie die FeatureActivated(SPFeatureReceiverProperties)-Methode, wie im folgenden Beispiel gezeigt.

    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. Überschreiben und implementieren Sie die FeatureDeactivating(SPFeatureReceiverProperties)-Methode, wie im folgenden Beispiel gezeigt.

    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. Erstellen Sie das Projekt.

So erstellen Sie ein Feature, das eine Integritätsregel installiert

  1. Erstellen Sie einen Ordner Features.

    Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektnamen, wählen Sie Hinzufügen und dann Neuer Ordner aus. Geben Sie Features ein.

  2. Erstellen Sie einen untergeordneten Ordner für das Feature.

    Klicken Sie mit der rechten Maustaste auf den Ordner Features, wählen Sie Hinzufügen und dann Neuer Ordner aus. Geben Sie den Namen des Features ein (z. B. CompanyName.HealthRules).

    Wenn Sie später ein Lösungspaket zum Bereitstellen des Features erstellen, wird ein gleichnamiger Ordner im Ordner %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\FEATURES jedes Servers in der Serverfarm erstellt. Anhand des Namens, den Sie dem Ordner geben, können Administratoren die Definitionsdatei für das Feature finden.

  3. Erstellen Sie eine Featuredefinitionsdatei.

    Klicken Sie mit der rechten Maustaste auf den Unterordner für das Feature, wählen Sie Hinzufügen und dann Neues Element... aus. Wählen Sie im Dialogfeld Neues Element hinzufügen die Vorlage XML-Datei aus. Geben Sie der Datei den Namen Feature.xml. Klicken Sie anschließend auf Hinzufügen.

  4. Öffnen Sie die Datei Feature.xml im Editor.

  5. Löschen Sie die erste (und einzige) Zeile in der Datei. Fügen Sie an dieser Stelle den folgenden Code über die Zwischenablage ein.

    <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. Ersetzen Sie in der Datei Feature.xml die Werte des Title- und des Description-Attributs durch eigenen Text.

  7. Ersetzen Sie den Wert des Id-Attributs durch eine neu generierte GUID (ohne Klammern).

    Sie können mithilfe des Tools GuidGen (Guidgen.exe) eine neue GUID abrufen. Wählen Sie in Visual Studio im Menü Extras den Befehl GUID erstellen aus. Wählen Sie im Dialogfeld GUID erstellen die Option 4. Registrierungsformat aus, und klicken Sie auf Kopieren. Fügen Sie den Inhalt der Zwischenablage zwischen den Anführungszeichen nach dem Id-Attribut ein. Entfernen Sie die Klammern von der GUID.

  8. Ersetzen Sie den Wert des ReceiverAssembly-Attributs durch den vollständigen, vierteiligen Namen der Assembly.

    Informationen zum Abrufen des vollständigen Namens der Assembly finden Sie unter Gewusst wie: Erstellen eines Tools zum Abrufen des vollständigen Namens einer Assembly.

  9. Ersetzen Sie den Wert des ReceiverClass-Attributs durch den mit einem Namespace qualifizierten Namen der SPFeatureReceiver-Unterklasse.

  10. Speichern Sie die Datei.

Informationen zum Bereitstellen des Features finden Sie unter Gewusst wie: Bereitstellen einer Integritätsregel mit einem Lösungspaket.

Siehe auch

Aufgaben

Gewusst wie: Bereitstellen einer Integritätsregel mit einem Lösungspaket

Gewusst wie: Erstellen eines Tools zum Abrufen des vollständigen Namens einer Assembly

Konzepte

Verwenden von Features