Compartir a través de


Codificar un enumerador foreach personalizado

Una vez que haya creado una clase que herede de la clase base ForEachEnumerator y haya aplicado el atributo DtsForEachEnumeratorAttribute a la clase, debe invalidar la implementación de las propiedades y los métodos de la clase base para proporcionar su funcionalidad personalizada.

Para obtener un ejemplo funcional de un enumerador personalizado, vea Desarrollar una interfaz de usuario para un enumerador foreach personalizado.

Inicializar el enumerador

Puede invalidar el método InitializeForEachEnumerator para almacenar en memoria caché las referencias a los administradores de conexión definidos en el paquete y las referencias a la interfaz de eventos que puede utilizar para provocar errores, advertencias y mensajes informativos.

Validar el enumerador

Invalide el método Validate para comprobar que el enumerador se ha configurado correctamente. Si el método devuelve Failure, no se ejecutarán el enumerador ni el paquete que contiene el enumerador. La implementación de este método es específica de cada enumerador, pero si el enumerador se basa en los objetos Variable o ConnectionManager, debe agregar código para comprobar que estos objetos existen en las colecciones que se proporcionan al método.

En el ejemplo de código siguiente se muestra una implementación de Validate que comprueba una variable especificada en una propiedad del 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

Devolver la colección

Durante la ejecución, el contenedor ForEachLoop llama al método GetEnumerator del enumerador personalizado. En este método, el enumerador crea y rellena su colección de elementos y, a continuación, devuelve la colección. A continuación, ForEachLoop itera los elementos de la colección y ejecuta su flujo de control para cada elemento de la colección.

En el ejemplo siguiente se muestra una implementación de GetEnumerator que devuelve una matriz de enteros aleatorios.

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
Icono de Integration Services (pequeño) Manténgase al día con Integration Services

Para obtener las descargas, artículos, ejemplos y vídeos más recientes de Microsoft, así como soluciones seleccionadas de la comunidad, visite la página de Integration Services en MSDN:


Para recibir notificaciones automáticas de estas actualizaciones, suscríbase a las fuentes RSS disponibles en la página.

Vea también

Tasks

Crear un enumerador foreach personalizado

Desarrollar una interfaz de usuario para un enumerador foreach personalizado