Compartilhar via


Codificando um enumerador Foreach personalizado

Aplica-se a: Tempo de execução de integração do SSIS do SQL Server no Azure Data Factory

Depois de criar uma classe que herda da classe base ForEachEnumerator e aplicar o atributo DtsForEachEnumeratorAttribute a essa classe, você deve substituir a implementação das propriedades e dos métodos da classe base para fornecer sua funcionalidade personalizada.

Para obter um exemplo de funcionamento de um enumerador personalizado, consulte Desenvolvendo uma interface do usuário para um enumerador ForEach personalizado.

Inicializando o enumerador

Você substitui o método InitializeForEachEnumerator para referências aos gerenciadores de conexões definidos no pacote, e para referências de cache à interface de eventos que você pode usar para gerar erros, avisos e mensagens informativas.

Validando o enumerador

Você substitui o método Validate para verificar se o enumerador está configurado corretamente. Se o método retornar Failure, o enumerador e o pacote contendo o enumerador não serão executados. A implementação desse método é específica de cada enumerador, mas se o enumerador depender de objetos Variable ou ConnectionManager, adicione código para verificar se esses objetos existem nas coleções fornecidas para o método.

O exemplo de código a seguir demonstra uma implementação de Validate que verifica uma variável especificada em uma propriedade do enumerador.

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  

Retornando a coleção

Durante execução, o contêiner ForEachLoop chama o método GetEnumerator do enumerador personalizado. Nesse método, o enumerador cria, preenche e retorna sua coleção de itens. O ForEachLoop itera os itens na coleção e executa seu fluxo de controle para cada item da coleção.

O exemplo a seguir mostra uma implementação de GetEnumerator que retorna uma matriz de inteiros aleatórios.

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  

Consulte Também

Criando um enumerador Foreach personalizado
Desenvolvendo uma interface do usuário para um enumerador ForEach personalizado