Generazione e definizione di eventi in un'attività personalizzataRaising and Defining Events in a Custom Task

Il motore di runtime di Integration ServicesIntegration Services include una raccolta di eventi che forniscono lo stato di avanzamento durante la convalida e l'esecuzione di un'attività.The Integration ServicesIntegration Services run-time engine provides a collection of events that provide status on the progress of a task as the task is validated and executed. L'interfaccia IDTSComponentEvents definisce questi eventi e viene fornita alle attività come parametro per i metodi Validate e Execute.The IDTSComponentEvents interface defines these events, and is provided to tasks as a parameter to the Validate and Execute methods.

È disponibile un altro set di eventi, definiti nell'interfaccia IDTSEvents, che vengono generati per conto dell'attività da TaskHost.There is another set of events, which are defined in the IDTSEvents interface, that are raised on behalf of the task by the TaskHost. L'oggetto TaskHost genera gli eventi che si verificano prima e dopo la convalida e l'esecuzione, mentre l'attività genera gli eventi che si verificano durante l'esecuzione e la convalida.The TaskHost raises events that occur before and after validation and execution, whereas the task raises the events that occur during execution and validation.

Creazione di eventi personalizzatiCreating Custom Events

Gli sviluppatori di attività personalizzate possono definire nuovi eventi personalizzati creando un nuovo oggetto EventInfo nell'implementazione sottoposta a override del metodo InitializeTask.Custom task developers can define new, custom events by creating a new EventInfo in their overridden implementation of the InitializeTask method. Dopo il EventInfo viene creato, viene aggiunto al EventInfos raccolta usando il Add (metodo).After the EventInfo is created, it is added to the EventInfos collection by using the Add method. La firma del metodo Add è la seguente:The method signature of the Add method is as follows:

public void Add(string eventName, string description, bool allowEventHandlers, string[] parameterNames, TypeCode[] parameterTypes, string[] parameterDescriptions);

L'esempio di codice seguente illustra il metodo InitializeTask di un'attività personalizzata, in cui vengono creati due eventi e vengono impostate le relative proprietà.The following code sample shows the InitializeTask method of a custom task, where two custom events are created and their properties are set. I nuovi eventi vengono quindi aggiunti alla raccolta EventInfos.The new events are then added to the EventInfos collection.

Il primo evento personalizzato presenta un elemento eventName di "OnBeforeIncrement" e un elemento description di "Fires after the initial value is updated."The first custom event has an eventName of "OnBeforeIncrement" and description of "Fires after the initial value is updated." Il parametro successivo, il valore true, indica che questo evento deve consentire la creazione di un contenitore del gestore eventi per gestire l’evento.The next parameter, the true value, indicates that this event should allow an event handler container to be created to handle the event. Il gestore eventi è un contenitore che fornisce la struttura in un pacchetto e servizi alle attività, analogamente ad altri contenitori come Sequence, ForLoop e ForEachLoop.The event handler is a container that provides structure in a package and services to tasks, like other containers such as the package, Sequence, ForLoop, and ForEachLoop. Quando il allowEventHandlers parametro true, DtsEventHandler gli oggetti vengono creati per l'evento.When the allowEventHandlers parameter is true, DtsEventHandler objects are created for the event. I parametri definiti per l'evento sono ora disponibili per DtsEventHandler nella raccolta di variabili di DtsEventHandler.Any parameters that were defined for the event are now available to the DtsEventHandler in the variables collection of the DtsEventHandler.

public override void InitializeTask(Connections connections,  
   VariableDispenser variables, IDTSInfoEvents events,  
   IDTSLogging log, EventInfos eventInfos,  
   LogEntryInfos logEntryInfos, ObjectReferenceTracker refTracker)  
{  
    this.eventInfos = eventInfos;  
    string[] paramNames = new string[1];  
    TypeCode[] paramTypes = new TypeCode[1]{TypeCode.Int32};  
    string[] paramDescriptions = new string[1];  

    paramNames[0] = "InitialValue";  
    paramDescriptions[0] = "The value before it is incremented.";  

    this.eventInfos.Add("OnBeforeIncrement",   
      "Fires before the task increments the value.",  
      true,paramNames,paramTypes,paramDescriptions);  
    this.onBeforeIncrement = this.eventInfos["OnBeforeIncrement"];  

    paramDescriptions[0] = "The value after it has been incremented.";  
    this.eventInfos.Add("OnAfterIncrement",  
      "Fires after the initial value is updated.",  
      true,paramNames, paramTypes,paramDescriptions);  
    this.onAfterIncrement = this.eventInfos["OnAfterIncrement"];  
}  
Public Overrides Sub InitializeTask(ByVal connections As Connections, _  
ByVal variables As VariableDispenser, ByVal events As IDTSInfoEvents, _  
ByVal log As IDTSLogging, ByVal eventInfos As EventInfos, _  
ByVal logEntryInfos As LogEntryInfos, ByVal refTracker As ObjectReferenceTracker)   

    Dim paramNames(0) As String  
    Dim paramTypes(0) As TypeCode = {TypeCode.Int32}  
    Dim paramDescriptions(0) As String  

    Me.eventInfos = eventInfos  

    paramNames(0) = "InitialValue"  
    paramDescriptions(0) = "The value before it is incremented."  

    Me.eventInfos.Add("OnBeforeIncrement", _  
      "Fires before the task increments the value.", _  
      True, paramNames, paramTypes, paramDescriptions)  
    Me.onBeforeIncrement = Me.eventInfos("OnBeforeIncrement")  

    paramDescriptions(0) = "The value after it has been incremented."  
    Me.eventInfos.Add("OnAfterIncrement", _  
      "Fires after the initial value is updated.", True, _  
      paramNames, paramTypes, paramDescriptions)  
    Me.onAfterIncrement = Me.eventInfos("OnAfterIncrement")  

End Sub  

Generazione di eventi personalizzatiRaising Custom Events

Gli eventi personalizzati vengono generati con una chiamata al metodo FireCustomEvent.Custom events are raised by calling the FireCustomEvent method. La riga di codice seguente genera un evento personalizzato.The following line of code raises a custom event.

componentEvents.FireCustomEvent(this.onBeforeIncrement.Name,  
   this.onBeforeIncrement.Description, ref arguments,  
   null, ref bFireOnBeforeIncrement);  
componentEvents.FireCustomEvent(Me.onBeforeIncrement.Name, _  
Me.onBeforeIncrement.Description, arguments, _  
Nothing,  bFireOnBeforeIncrement)  

EsempioSample

Nell'esempio seguente viene illustrata un'attività che definisce un evento personalizzato nel InitializeTask metodo, aggiunge l'evento personalizzato per il EventInfos insieme e quindi genera l'evento personalizzato durante il relativo Execute metodo chiamando il FireCustomEvent (metodo).The following example shows a task that defines a custom event in the InitializeTask method, adds the custom event to the EventInfos collection, and then raises the custom event during its Execute method by calling the FireCustomEvent method.

[DtsTask(DisplayName = "CustomEventTask")]  
    public class CustomEventTask : Task  
    {  
        public override DTSExecResult Execute(Connections connections,   
          VariableDispenser variableDispenser, IDTSComponentEvents componentEvents,  
           IDTSLogging log, object transaction)  
        {  
            bool fireAgain;  
            object[] args = new object[1] { "The value of the parameter." };  
            componentEvents.FireCustomEvent( "MyCustomEvent",   
              "Firing the custom event.", ref args,  
              "CustomEventTask" , ref fireAgain );  
            return DTSExecResult.Success;  
        }  

        public override void InitializeTask(Connections connections,  
          VariableDispenser variableDispenser, IDTSInfoEvents events,  
          IDTSLogging log, EventInfos eventInfos,  
          LogEntryInfos logEntryInfos, ObjectReferenceTracker refTracker)  
        {  
            string[] names = new string[1] {"Parameter1"};  
            TypeCode[] types = new TypeCode[1] {TypeCode.String};  
            string[] descriptions = new string[1] {"Parameter description." };  

            eventInfos.Add("MyCustomEvent",  
             "Fires when my interesting event happens.",  
             true, names, types, descriptions);  

        }  
   }  
<DtsTask(DisplayName = "CustomEventTask")> _   
    Public Class CustomEventTask  
     Inherits Task  
        Public Overrides Function Execute(ByVal connections As Connections, _  
          ByVal variableDispenser As VariableDispenser, _  
          ByVal componentEvents As IDTSComponentEvents, _  
          ByVal log As IDTSLogging, ByVal transaction As Object) _  
          As DTSExecResult  

            Dim fireAgain As Boolean  
            Dim args() As Object =  New Object(1) {"The value of the parameter."}  

            componentEvents.FireCustomEvent("MyCustomEvent", _  
              "Firing the custom event.", args, _  
              "CustomEventTask" ,  fireAgain)  
            Return DTSExecResult.Success  
        End Function  

        Public Overrides  Sub InitializeTask(ByVal connections As Connections, _  
          ByVal variableDispenser As VariableDispenser,  
          ByVal events As IDTSInfoEvents,  
          ByVal log As IDTSLogging, ByVal eventInfos As EventInfos, ByVal logEnTryInfos As LogEnTryInfos, ByVal refTracker As ObjectReferenceTracker)  

            Dim names() As String =  New String(1) {"Parameter1"}  
            Dim types() As TypeCode =  New TypeCode(1) {TypeCode.String}  
            Dim descriptions() As String =  New String(1) {"Parameter description."}  

            eventInfos.Add("MyCustomEvent", _  
              "Fires when my interesting event happens.", _  
              True, names, types, descriptions)  

        End Sub  

    End Class  

Vedere ancheSee Also

Integration Services ( SSIS ) Gestori eventi Integration Services (SSIS) Event Handlers
Aggiungere un gestore eventi a un pacchettoAdd an Event Handler to a Package