Share via


Scrittura del codice di un enumeratore Foreach personalizzato

Si applica a:SQL Server Integration Runtime SSIS in Azure Data Factory

Dopo avere creato una classe che eredita dalla classe di base ForEachEnumerator e avere applicato l'attributo DtsForEachEnumeratorAttribute alla classe, è necessario eseguire l'override dell'implementazione delle proprietà e dei metodi della classe di base per fornire la funzionalità personalizzata.

Per un esempio reale di enumeratore personalizzato, vedere Sviluppo di un'interfaccia utente per un enumeratore Foreach personalizzato.

Inizializzazione dell'enumeratore

È possibile eseguire l'override del metodo InitializeForEachEnumerator per memorizzare nella cache i riferimenti alle gestioni connessioni definite nel pacchetto e i riferimenti all'interfaccia degli eventi che è possibile utilizzare per generare errori, avvisi e messaggi informativi.

Convalida dell'enumeratore

Eseguire l'override del metodo Validate per verificare che l'enumeratore sia configurato correttamente. Se il metodo restituisce Failure, l'enumeratore e il pacchetto che lo contiene non verranno eseguiti. L'implementazione di questo metodo è specifica di ogni enumeratore, ma se l'enumeratore si basa su oggetti Variable o ConnectionManager, è necessario aggiungere codice per verificare che questi oggetti esistano nelle raccolte fornite al metodo.

Nell'esempio di codice seguente è illustrata un'implementazione di Validate che verifica una variabile specificata in una proprietà dell'enumeratore.

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  

Restituzione della raccolta

Durante l'esecuzione il contenitore ForEachLoop chiama il metodo GetEnumerator dell'enumeratore personalizzato. In questo metodo l'enumeratore crea e popola la raccolta di elementi, quindi la restituisce. ForEachLoop scorre quindi gli elementi della raccolta ed esegue il flusso di controllo per ognuno di essi.

Nell'esempio seguente è illustrata un'implementazione di GetEnumerator che restituisce una matrice di numeri interi casuali.

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  

Vedere anche

Creazione di un enumeratore Foreach personalizzato
Sviluppo di un'interfaccia utente per un enumeratore Foreach personalizzato