Freigeben über


Codieren eines benutzerdefinierten Foreach-Enumerators

Gilt für: SQL Server SSIS Integration Runtime in Azure Data Factory

Nachdem Sie eine Klasse erstellt haben, die von der ForEachEnumerator-Basisklasse erbt, und das DtsForEachEnumeratorAttribute-Attribut auf die Klasse angewendet haben, müssen Sie die Implementierung der Eigenschaften und Methoden der Basisklasse überschreiben, um die benutzerdefinierte Funktionalität bereitzustellen.

Ein funktionierendes Beispiel eines benutzerdefinierten Enumerators finden Sie unter Developing a User Interface for a Custom ForEach Enumerator (Entwickeln einer Benutzeroberfläche für einen benutzerdefinierten ForEach-Enumerator).

Initialisieren des Enumerators

Sie können die InitializeForEachEnumerator-Methode verwenden, um Verweise auf die im Paket definierten Verbindungs-Manager zwischenzuspeichern und um Verweise auf die Ereignisschnittstelle zwischenzuspeichern, die Sie verwenden können, um Fehler, Warnungen und Informationsmeldungen auszulösen.

Überprüfen des Enumerators

Überschreiben Sie die Validate-Methode, um zu überprüfen, ob der Enumerator ordnungsgemäß konfiguriert ist. Wenn die Methode Failure zurückgibt, werden der Enumerator und das Paket, das den Enumerator enthält, nicht ausgeführt. Die Implementierung dieser Methode ist für jeden Enumerator spezifisch. Wenn jedoch der Enumerator auf Variable- oder ConnectionManager-Objekten basiert, sollten Sie Code hinzufügen, um zu überprüfen, ob diese Objekte in den Auflistungen, die der Methode bereitgestellt werden, vorhanden sind.

Im folgenden Codebeispiel wird die Implementierung von Validate gezeigt, die nach einer in einer Eigenschaft des Enumerators angegebenen Variablen sucht.

private string variableNameValue;  
  
public string VariableName  
{  
    get{ return this.variableNameValue; }  
    set{ this.variableNameValue = value; }  
}  
  
public override DTSExecResult Validate(Connections connections, VariableDispenser variableDispenser, IDTSInfoEvents infoEvents, IDTSLogging log)  
{  
    if (!variableDispenser.Contains(this.variableNameValue))  
    {  
        infoEvents.FireError(0, "MyEnumerator", "The Variable " + this.variableNameValue + " does not exist in the collection.", "", 0);  
            return DTSExecResult.Failure;  
    }  
    return DTSExecResult.Success;  
}  
Private variableNameValue As String  
  
Public Property VariableName() As String  
    Get   
         Return Me.variableNameValue  
    End Get  
    Set (ByVal Value As String)   
         Me.variableNameValue = value  
    End Set  
End Property  
  
Public Overrides Function Validate(ByVal connections As Connections, ByVal variableDispenser As VariableDispenser, ByVal infoEvents As IDTSInfoEvents, ByVal log As IDTSLogging) As DTSExecResult  
    If Not variableDispenser.Contains(Me.variableNameValue) Then  
        infoEvents.FireError(0, "MyEnumerator", "The Variable " + Me.variableNameValue + " does not exist in the collection.", "", 0)  
            Return DTSExecResult.Failure  
    End If  
    Return DTSExecResult.Success  
End Function  

Zurückgeben der Auflistung

Während der Ausführung ruft der ForEachLoop-Container die GetEnumerator-Methode des benutzerdefinierten Enumerators auf. In dieser Methode erstellt der Enumerator seine Auflistung von Elementen und füllt sie auf und gibt dann die Auflistung zurück. ForEachLoop führt dann eine Iteration für die Elemente in der Auflistung durch und führt die Ablaufsteuerung für jedes Element in der Auflistung durch.

Im folgenden Beispiel wird eine Implementierung von GetEnumerator gezeigt, wobei ein Array zufälliger ganzer Zahlen zurückgegeben wird.

public override object GetEnumerator()  
{  
    ArrayList numbers = new ArrayList();  
  
    Random randomNumber = new Random(DateTime.Now);  
  
    for( int x=0; x < 100; x++ )  
        numbers.Add( randomNumber.Next());  
  
    return numbers;  
}  
Public Overrides Function GetEnumerator() As Object  
    Dim numbers As ArrayList =  New ArrayList()   
  
    Dim randomNumber As Random =  New Random(DateTime.Now)   
  
        Dim x As Integer  
        For  x = 0 To  100- 1  Step  x + 1  
        numbers.Add(randomNumber.Next())  
        Next  
  
    Return numbers  
End Function  

Siehe auch

Erstellen eines benutzerdefinierten Foreach-Enumerators
Entwickeln einer Benutzeroberfläche für einen benutzerdefinierten ForEach-Enumerator