Koda en anpassad Foreach-uppräknare

Gäller för:SQL Server SSIS Integration Runtime i Azure Data Factory

Efter att du har skapat en klass som ärver från ForEachEnumerator basklassen och applicerat attributet DtsForEachEnumeratorAttribute på klassen, måste du åsidosätta implementeringen av basklassens egenskaper och metoder för att tillhandahålla din anpassade funktionalitet.

För ett fungerande exempel på en anpassad enumerator, se Utveckling av ett användargränssnitt för en anpassad föreach enumerator.

Initiering av uppräknaren

Du kan åsidosätta InitializeForEachEnumerator metoden för att cachelagra referenser till anslutningshanterare som definieras i paketet, och för att cacheminna referenser till händelsegränssnittet som du kan använda för att skapa fel, varningar och informationsmeddelanden.

Validering av uppräknaren

Du åsidosätter Validate metoden för att verifiera att enumeratorn är korrekt konfigurerad. Om metoden returnerar Failure kommer inte enumeratorn och paketet som innehåller enumeratorn att exekveras. Implementeringen av denna metod är specifik för varje enumerator, men om enumeratorn förlitar sig på Variable eller ConnectionManager objekt bör du lägga till kod för att verifiera att dessa objekt finns i de samlingar som tillhandahålls metoden.

Följande kodexempel demonstrerar en implementation av Validate som kontrollerar efter en variabel specificerad i en egenskap hos enumeratorn.

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  

Återlämnande av samlingen

Under exekveringen anropar containern ForEachLoopGetEnumerator metoden för den anpassade enumeratorn. I denna metod skapar och fyller enumeratorn sin samling av objekt, och returnerar sedan samlingen. Sedan ForEachLoop itererar den objekten i samlingen och utför sitt kontrollflöde för varje objekt i samlingen.

Följande exempel visar en implementation av GetEnumerator som returnerar en array av slumpmässiga heltal.

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