Freigeben über


Erstellen eines benutzerdefinierten Foreach-Enumerators

Die Schritte zum Erstellen eines benutzerdefinierten Foreach-Enumerators ähneln denen jedes anderen benutzerdefinierten Objekts für Integration Services:

  • Erstellen Sie eine neue Klasse, die von der Basisklasse erbt. Für einen Foreach-Enumerator ist ForEachEnumerator die Basisklasse.

  • Weisen Sie das Attribut zu, das den Typ des Objekts für die Klasse identifiziert. Für einen Foreach-Enumerator ist DtsForEachEnumeratorAttribute das Attribut.

  • Setzen Sie die Implementierung der Methoden und Eigenschaften der Basisklasse außer Kraft. Für einen Foreach-Enumerator ist die GetEnumerator-Methode die wichtigste.

  • Entwickeln Sie optional eine individuelle Benutzeroberfläche. Für einen Foreach-Enumerator ist dazu eine Klasse erforderlich, die die IDTSForEachEnumeratorUI-Schnittstelle implementiert.

Ein benutzerdefinierter Enumerator wird vom ForEachLoop-Container gehostet. Zur Laufzeit ruft der ForEachLoop-Container die GetEnumerator-Methode des benutzerdefinierten Enumerators auf. Der benutzerdefinierte Enumerator gibt ein Objekt zurück, mit dem die IEnumerable-Schnittstelle implementiert wird, wie beispielsweise ArrayList. ForEachLoop führt anschließend eine Iteration über jedes Element in der Auflistung durch, gibt den Wert des aktuellen Elements durch eine benutzerdefinierte Variable an und führt die Ablaufsteuerung im Container aus.

Ein Arbeitsbeispiel für einen benutzerdefinierten Enumerator finden Sie unter Integration Services-Beispiele auf Codeplex.

Erste Schritte mit einem benutzerdefinierten ForEach-Enumerator

Erstellen von Projekten und Klassen

Da alle verwalteten Foreach-Enumeratoren von der ForEachEnumerator-Basisklasse abgeleitet sind, besteht der erste Schritt beim Erstellen eines benutzerdefinierten Foreach-Enumerators darin, in Ihrer bevorzugten verwalteten Programmiersprache ein Klassenbibliotheksprojekt anzulegen und eine Klasse zu generieren, die von der Basisklasse erbt. In dieser abgeleiteten Klasse überschreiben Sie die Methoden und Eigenschaften der Basisklasse, um die benutzerdefinierten Funktionen zu implementieren.

Erstellen Sie in der gleichen Lösung ein zweites Klassenbibliotheksprojekt für die individuelle Benutzeroberfläche. Für eine einfache Bereitstellung sollten Sie eine eigene Assembly für die Benutzeroberfläche verwenden, da Sie so den Foreach-Enumerator oder seine Benutzeroberfläche unabhängig aktualisieren und erneut bereitstellen können.

Konfigurieren Sie beide Projekte für das Signieren der Assemblys, die bei der Erstellung erzeugt werden, mit einer Schlüsseldatei mit starkem Namen.

Anwenden des DtsForEachEnumerator-Attributs

Wenden Sie das DtsForEachEnumeratorAttribute-Attribut der Klasse zu, die Sie erstellt haben, um sie als Foreach-Enumerator zu kennzeichnen. Dieses Attribut stellt Entwurfszeitinformationen bereit, z. B. Name und Beschreibung des Foreach-Enumerators. Die Name-Eigenschaft erscheint in der Dropdown-Liste der verfügbaren Enumeratoren auf der Registerkarte Auflistung des Dialogfelds Foreach-Schleifen-Editor.

Verwenden Sie die UITypeName-Eigenschaft, um den Foreach-Enumerator mit der individuellen Benutzeroberfläche zu verknüpfen. Um das für diese Eigenschaft erforderliche öffentliche Schlüsseltoken zu erhalten, können Sie sn.exe -t verwenden. Damit zeigen Sie das öffentliche Schlüsseltoken aus der Schlüsselpaardatei (.snk) an, die Sie für das Signieren der Benutzeroberflächenassembly verwenden möchten.

Imports System
Imports Microsoft.SqlServer.Dts.Runtime
Namespace Microsoft.Samples.SqlServer.Dts
    <DtsForEachEnumerator(DisplayName = "MyEnumerator", Description="A sample custom enumerator", UITypeName="FullyQualifiedTypeName,AssemblyName,Version=1.00.000.00,Culture=Neutral,PublicKeyToken=<publickeytoken>")> _ 
    Public Class MyEnumerator
     Inherits ForEachEnumerator
        'Insert code here.
    End Class
End Namespace
using System;
using Microsoft.SqlServer.Dts.Runtime;
namespace Microsoft.Samples.SqlServer.Dts
{
    [DtsForEachEnumerator( DisplayName = "MyEnumerator", Description="A sample custom enumerator", UITypeName="FullyQualifiedTypeName,AssemblyName,Version=1.00.000.00,Culture=Neutral,PublicKeyToken=<publickeytoken>")]
    public class MyEnumerator : ForEachEnumerator
    {
        //Insert code here.
    }
}

Erstellen, Bereitstellen und Debuggen eines benutzerdefinierten Enumerators

Die Schritte zum Erstellen, Bereitstellen und Debuggen eines benutzerdefinierten Foreach-Enumerators in Integration Services ähneln denen für andere Arten benutzerdefinierter Objekte stark. Weitere Informationen finden Sie unter Erstellen, Bereitstellen und Debuggen von benutzerdefinierten Objekten.

Integration Services (kleines Symbol) Bleiben Sie mit Integration Services auf dem neuesten Stand

Die neuesten Downloads, Artikel, Beispiele und Videos von Microsoft sowie ausgewählte Lösungen aus der Community finden Sie auf der Integration Services-Seite von MSDN oder TechNet:

Abonnieren Sie die auf der Seite verfügbaren RSS-Newsfeeds, um automatische Benachrichtigungen zu diesen Aktualisierungen zu erhalten.