Generazione e definizione di eventi in un componente del flusso di datiRaising and Defining Events in a Data Flow Component

Gli sviluppatori di componenti possono generare un subset degli eventi definiti nell'interfaccia IDTSComponentEvents chiamando i metodi esposti sulla proprietà ComponentMetaData.Component developers can raise a subset of the events defined in the IDTSComponentEvents interface by calling the methods exposed on the ComponentMetaData property. È anche possibile definire eventi personalizzati tramite la raccolta EventInfos e generarli durante l'esecuzione utilizzando il metodo FireCustomEvent.You can also define custom events by using the EventInfos collection, and raise them during execution by using the FireCustomEvent method. In questa sezione viene descritto come creare e generare un evento e vengono fornite linee guida su quando è necessario generare eventi in fase di progettazione.This section describes how to create and raise an event, and provides guidelines on when you should raise events at design time.

Generazione di eventiRaising Events

I componenti generano eventi utilizzando il incendio<X > metodi il IDTSComponentMetaData100 interfaccia.Components raise events by using the Fire<X> methods of the IDTSComponentMetaData100 interface. È possibile generare eventi durante la progettazione e l'esecuzione di componenti.You can raise events during component design and execution. In genere, durante la progettazione di componenti, i metodi FireError e FireWarning vengono chiamati durante la convalida.Typically, during component design, the FireError and FireWarning methods are called during validation. Questi eventi visualizzano messaggi nel elenco errori riquadro di SQL Server Data Tools (SSDT)SQL Server Data Tools (SSDT) e fornire commenti e suggerimenti per gli utenti del componente quando un componente non è configurato correttamente.These events display messages in the Error List pane of SQL Server Data Tools (SSDT)SQL Server Data Tools (SSDT) and provide feedback to users of the component when a component is incorrectly configured.

I componenti possono inoltre generare eventi in qualsiasi momento durante l'esecuzione.Components can also raise events at any point during execution. Gli eventi consentono agli sviluppatori di componenti di fornire feedback agli utenti del componente durante la relativa esecuzione.Events allow component developers to provide feedback to users of the component as it executes. Se viene chiamato il metodo FireError durante l'esecuzione, è probabile che il pacchetto non riesca.Calling the FireError method during execution is likely to fail the package.

Definizione e generazione di eventi personalizzatiDefining and Raising Custom Events

Definizione di eventi personalizzati.Defining a Custom Event

Gli eventi personalizzati vengono creati chiamando il metodo Add della raccolta EventInfos.Custom events are created by calling the Add method of the EventInfos collection. Questa raccolta viene impostata dall'attività Flusso di dati e viene fornita come proprietà allo sviluppatore di componenti tramite la classe di base PipelineComponent.This collection is set by the data flow task and provided as a property to the component developer through the PipelineComponent base class. Questa classe contiene eventi personalizzati definiti dall'attività Flusso di dati ed eventi personalizzati definiti dal componente durante il metodo RegisterEvents.This class contains custom events defined by the data flow task and custom events defined by the component during the RegisterEvents method.

Gli eventi personalizzati di un componente non sono persistenti nel codice XML del pacchetto.The custom events of a component are not persisted in the package XML. Pertanto, il metodo RegisterEvents viene chiamato sia durante la progettazione che durante l'esecuzione per consentire al componente di definire gli eventi che genera.Therefore, the RegisterEvents method is called during both design and execution to allow the component to define the events it raises.

Il allowEventHandlers parametro il Add metodo consente di specificare se il componente consente DtsEventHandler oggetti da creare per l'evento.The allowEventHandlers parameter of the Add method specifies whether the component allows DtsEventHandler objects to be created for the event. Si noti che DtsEventHandlers sono sincroni.Note that DtsEventHandlers are synchronous. Pertanto, il componente riprende l'esecuzione solo al termine dell'esecuzione di un oggetto DtsEventHandler connesso all'evento personalizzato.Therefore the component does not resume execution until an DtsEventHandler attached to the custom event has finished executing. Se il allowEventHandlers parametro true, ogni parametro dell'evento è reso automaticamente disponibile a qualsiasi DtsEventHandler oggetti tramite le variabili che vengono creati e popolati automaticamente dal SQL ServerSQL Server Integration ServicesIntegration Services runtime.If the allowEventHandlers parameter is true, each parameter of the event is automatically made available to any DtsEventHandler objects through variables that are created and populated automatically by the SQL ServerSQL Server Integration ServicesIntegration Services runtime.

Generazione di eventi personalizzatiRaising a Custom Event

I componenti generano eventi personalizzati chiamando il metodo FireCustomEvent e fornendo il nome, il testo e i parametri dell'evento.Components raise custom events by calling the FireCustomEvent method, and providing the name, text, and parameters of the event. Se il allowEventHandlers parametro true, qualsiasi DtsEventHandlers creati per l'evento personalizzato vengono eseguiti dal SSISSSIS motore di run-time.If the allowEventHandlers parameter is true, any DtsEventHandlers that are created for the custom event are executed by the SSISSSIS run-time engine.

Esempio di evento personalizzatoCustom Event Sample

Nell'esempio di codice seguente è illustrato un componente che definisce un evento personalizzato durante il metodo RegisterEvents, quindi genera l'evento in fase di esecuzione chiamando il metodo FireCustomEvent.The following code example shows a component that defines a custom event during the RegisterEvents method, and then raises the event at run time by calling the FireCustomEvent method.

public override void RegisterEvents()  
{  
    string [] parameterNames = new string[2]{"RowCount", "StartTime"};  
    ushort [] parameterTypes = new ushort[2]{ DtsConvert.VarTypeFromTypeCode(TypeCode.Int32), DtsConvert.VarTypeFromTypeCode(TypeCode.DateTime)};  
    string [] parameterDescriptions = new string[2]{"The number of rows to sort.", "The start time of the Sort operation."};  
    EventInfos.Add("StartingSort","Fires when the component begins sorting the rows.",false,ref parameterNames, ref paramterTypes, ref parameterDescriptions);  
}  
public override void ProcessInput(int inputID, PipelineBuffer buffer)  
{  
    while (buffer.NextRow())  
    {  
       // Process buffer rows.  
    }  

    IDTSEventInfo100 eventInfo = EventInfos["StartingSort"];  
    object []arguments = new object[2]{buffer.RowCount, DateTime.Now };  
    ComponentMetaData.FireCustomEvent("StartingSort", "Beginning sort operation.", ref arguments, ComponentMetaData.Name, ref FireSortEventAgain);  
}  
Public  Overrides Sub RegisterEvents()   
  Dim parameterNames As String() = New String(2) {"RowCount", "StartTime"}   
  Dim parameterTypes As System.UInt16() = New System.UInt16(2) {DtsConvert.VarTypeFromTypeCode(TypeCode.Int32), DtsConvert.VarTypeFromTypeCode(TypeCode.DateTime)}   
  Dim parameterDescriptions As String() = New String(2) {"The number of rows to sort.", "The start time of the Sort operation."}   
  EventInfos.Add("StartingSort", "Fires when the component begins sorting the rows.", False, parameterNames, paramterTypes, parameterDescriptions)   
End Sub   

Public  Overrides Sub ProcessInput(ByVal inputID As Integer, ByVal buffer As PipelineBuffer)   
  While buffer.NextRow   
  End While   
  Dim eventInfo As IDTSEventInfo100 = EventInfos("StartingSort")   
  Dim arguments As Object() = New Object(2) {buffer.RowCount, DateTime.Now}   
  ComponentMetaData.FireCustomEvent("StartingSort", _  
    "Beginning sort operation.", arguments, _  
    ComponentMetaData.Name, FireSortEventAgain)   
End Sub  

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