Partager via


Codage d'un énumérateur Foreach personnalisé

S’applique à :SQL Server SSIS Integration Runtime dans Azure Data Factory

Après avoir créé une classe qui hérite de la classe de base ForEachEnumerator, puis appliqué l'attribut DtsForEachEnumeratorAttribute à cette classe, vous devez substituer l'implémentation des propriétés et des méthodes de la classe de base afin de fournir vos fonctionnalités personnalisées.

Pour obtenir un exemple fonctionnel d’un énumérateur personnalisé, consultez Développement d’une interface utilisateur pour un énumérateur ForEach personnalisé.

Initialisation de l'énumérateur

Vous pouvez substituer la méthode InitializeForEachEnumerator pour mettre en cache des références aux gestionnaires de connexions définis dans le package et des références à l'interface d'événements qui vous permet de déclencher des erreurs, des avertissements et des messages d'information.

Validation de l'énumérateur

Substituez la méthode Validate pour vérifier que l'énumérateur est correctement configuré. Si la méthode retourne Failure, l’énumérateur et le package dans lequel il est contenu ne seront pas exécutés. L'implémentation de cette méthode est propre à chaque énumérateur, mais si l'énumérateur utilise des objets Variable ou ConnectionManager, vous devez ajouter du code pour vérifier que ces objets existent dans les collections fournies à la méthode.

L'exemple de code suivant montre une implémentation de Validate qui recherche une variable spécifiée dans une propriété de l'énumérateur.

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  

Retour de la collection

Au moment de l’exécution, le conteneur ForEachLoop appelle la méthode GetEnumerator de l’énumérateur personnalisé. Dans cette méthode, l'énumérateur crée et remplit sa collection d'éléments, puis retourne la collection. Le conteneur ForEachLoop itère ensuite les éléments dans la collection et exécute son flux de contrôle pour chacun d'eux.

L'exemple suivant présente une implémentation de GetEnumerator qui retourne un tableau d'entiers aléatoires.

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  

Voir aussi

Création d'un énumérateur Foreach personnalisé
Développement d'une interface utilisateur pour un énumérateur ForEach personnalisé