Creazione di un enumeratore Foreach personalizzatoCreating a Custom Foreach Enumerator

I passaggi per la creazione di un enumeratore Foreach personalizzato sono simili a quelli richiesti per la creazione di qualsiasi altro oggetto personalizzato per Integration ServicesIntegration Services:The steps involved in creating a custom foreach enumerator are similar to the steps for creating any other custom object for Integration ServicesIntegration Services:

  • Creare una nuova classe che eredita dalla classe di base.Create a new class that inherits from the base class. Per un enumeratore Foreach, la classe di base è ForEachEnumerator.For a foreach enumerator, the base class is ForEachEnumerator.

  • Applicare alla classe l'attributo che identifica il tipo di oggetto.Apply the attribute that identifies the type of object to the class. Per un enumeratore Foreach, l'attributo è DtsForEachEnumeratorAttribute.For a foreach enumerator, the attribute is DtsForEachEnumeratorAttribute.

  • Eseguire l'override dell'implementazione dei metodi e delle proprietà della classe di base.Override the implementation of the base class's methods and properties. Per un enumeratore Foreach, il più importante è il metodo GetEnumerator.For a foreach enumerator, the most important is the GetEnumerator method.

  • Se si desidera, sviluppare un'interfaccia utente personalizzata.Optionally, develop a custom user interface. Per un enumeratore Foreach, questa operazione richiede una classe che implementi l'interfaccia IDTSForEachEnumeratorUI.For a foreach enumerator, this requires a class that implements the IDTSForEachEnumeratorUI interface.

    Un enumeratore personalizzato è ospitato dal contenitore ForEachLoop.A custom enumerator is hosted by the ForEachLoop container. In fase di esecuzione il contenitore ForEachLoop chiama il metodo GetEnumerator dell'enumeratore personalizzato.At run time, the ForEachLoop container calls the GetEnumerator method of the custom enumerator. L'enumeratore personalizzato restituisce un oggetto che implementa il IEnumerable interfaccia, ad esempio un ArrayList.The custom enumerator returns an object that implements the IEnumerable interface, such as an ArrayList. Tramite l'oggetto ForEachLoop viene quindi scorso ogni elemento della raccolta, viene fornito il valore dell'elemento corrente al flusso di controllo tramite una variabile definita dall'utente e viene eseguito il flusso di controllo nel contenitore.The ForEachLoop then iterates over each element in the collection, provides the value of the current element to the control flow through a user-defined variable, and executes the control flow in the container.

Introduzione a un enumeratore Foreach personalizzatoGetting Started with a Custom ForEach Enumerator

Creazione di progetti e classiCreating Projects and Classes

Poiché tutti gli enumeratori Foreach gestiti derivano dalla classe di base ForEachEnumerator, il primo passaggio da completare quando si crea un enumeratore Foreach personalizzato consiste nel creare un progetto di libreria di classi nel linguaggio di programmazione gestito preferito e creare una classe che eredita dalla classe di base.Because all managed foreach enumerators derive from the ForEachEnumerator base class, the first step when you create a custom foreach enumerator is to create a class library project in your preferred managed programming language and create a class that inherits from the base class. In questa classe derivata si eseguirà l'override dei metodi e delle proprietà della classe di base per implementare la funzionalità personalizzata.In this derived class you will override the methods and properties of the base class to implement your custom functionality.

Nella stessa soluzione creare un secondo progetto di libreria di classi per l'interfaccia utente personalizzata.In the same solution, create a second class library project for the custom user interface. Per semplificare lo sviluppo, si consiglia di utilizzare un assembly distinto per l'interfaccia utente, perché in questo modo è possibile e ridistribuire l'enumeratore Foreach o la relativa interfaccia utente in modo indipendente.A separate assembly for the user interface is recommended for ease of deployment because it allows you to update and redeploy the foreach enumerator or its user interface independently.

Configurare entrambi i progetti per firmare gli assembly che verranno generati durante la compilazione utilizzando un file di chiave con nome sicuro.Configure both projects to sign the assemblies that will be generated at build time by using a strong name key file.

Applicazione dell'attributo DtsForEachEnumeratorApplying the DtsForEachEnumerator Attribute

Applicare l'attributo DtsForEachEnumeratorAttribute alla classe creata per identificarla come enumeratore Foreach.Apply the DtsForEachEnumeratorAttribute attribute to the class that you have created to identify it as a foreach enumerator. Questo attributo fornisce informazioni in fase di progettazione, ad esempio il nome e la descrizione dell'enumeratore Foreach.This attribute provides design-time information such as the name and description of the foreach enumerator. Il nome proprietà viene visualizzata nell'elenco a discesa di enumeratori disponibili nel insieme scheda della finestra di Editor ciclo Foreach la finestra di dialogo.The Name property appears in the dropdown list of available enumerators on the Collection tab of the Foreach Loop Editor dialog box.

Utilizzare la proprietà UITypeName per collegare l'enumeratore Foreach alla relativa interfaccia utente personalizzata.Use the UITypeName property to link the foreach enumerator to its custom user interface. Per ottenere il token di chiave pubblica che è necessario per questa proprietà, è possibile utilizzare sn.exe -t per visualizzare il token di chiave pubblica dal file di coppia di chiavi (con estensione snk) che si intende utilizzare per firmare l'assembly dell'interfaccia utente.To obtain the public key token that is required for this property, you an use sn.exe -t to display the public key token from the key pair (.snk) file that you intend to use to sign the user interface assembly.

Imports System  
Imports Microsoft.SqlServer.Dts.Runtime  
Namespace Microsoft.Samples.SqlServer.Dts  
    <DtsForEachEnumerator(DisplayName = "MyEnumerator", Description="A sample custom enumerator", UITypeName="FullyQualifiedTypeName,AssemblyName,Version=1.00.000.00,Culture=Neutral,PublicKeyToken=<publickeytoken>")> _   
    Public Class MyEnumerator  
     Inherits ForEachEnumerator  
        'Insert code here.  
    End Class  
End Namespace  
using System;  
using Microsoft.SqlServer.Dts.Runtime;  
namespace Microsoft.Samples.SqlServer.Dts  
{  
    [DtsForEachEnumerator( DisplayName = "MyEnumerator", Description="A sample custom enumerator", UITypeName="FullyQualifiedTypeName,AssemblyName,Version=1.00.000.00,Culture=Neutral,PublicKeyToken=<publickeytoken>")]  
    public class MyEnumerator : ForEachEnumerator  
    {  
        //Insert code here.  
    }  
}  

Compilazione, distribuzione e debug di un enumeratore personalizzatoBuilding, Deploying, and Debugging a Custom Enumerator

I passaggi per la compilazione, la distribuzione e il debug di un enumeratore Foreach personalizzato in Integration ServicesIntegration Services sono molto simili a quelli richiesti per altri tipi di oggetti personalizzati.The steps for building, deploying, and debugging a custom foreach enumerator in Integration ServicesIntegration Services are very similar to the steps required for other types of custom objects. Per ulteriori informazioni, vedere compilazione, distribuzione e debug di oggetti personalizzati.For more information, see Building, Deploying, and Debugging Custom Objects.

Vedere ancheSee Also

Codifica un enumeratore Foreach personalizzato Coding a Custom Foreach Enumerator
Sviluppo di un'interfaccia utente per un enumeratore ForEach personalizzatoDeveloping a User Interface for a Custom ForEach Enumerator