Generazione e definizione di eventi in un componente del flusso di dati

Si applica a: SQL Server SSIS Integration Runtime in Azure Data Factory

Gli sviluppatori di componenti possono generare un subset degli eventi definiti nell'interfaccia IDTSComponentEvents chiamando i metodi esposti sulla proprietà ComponentMetaData. È anche possibile definire eventi personalizzati tramite la raccolta EventInfos e generarli durante l'esecuzione utilizzando il metodo FireCustomEvent. 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.

Generazione di eventi

I componenti generano eventi usando i metodi Fire<X> dell'interfaccia IDTSComponentMetaData100. È possibile generare eventi durante la progettazione e l'esecuzione di componenti. In genere, durante la progettazione di componenti, i metodi FireError e FireWarning vengono chiamati durante la convalida. Questi eventi visualizzano messaggi nel riquadro Elenco errori di SQL Server Data Tools e forniscono feedback agli utenti di un componente non correttamente configurato.

I componenti possono inoltre generare eventi in qualsiasi momento durante l'esecuzione. Gli eventi consentono agli sviluppatori di componenti di fornire feedback agli utenti del componente durante la relativa esecuzione. Se viene chiamato il metodo FireError durante l'esecuzione, è probabile che il pacchetto non riesca.

Definizione e generazione di eventi personalizzati

Definizione di eventi personalizzati.

Gli eventi personalizzati vengono creati chiamando il metodo Add della raccolta EventInfos. Questa raccolta viene impostata dall'attività Flusso di dati e viene fornita come proprietà allo sviluppatore di componenti tramite la classe di base PipelineComponent. Questa classe contiene eventi personalizzati definiti dall'attività Flusso di dati ed eventi personalizzati definiti dal componente durante il metodo RegisterEvents.

Gli eventi personalizzati di un componente non sono persistenti nel codice XML del pacchetto. Pertanto, il metodo RegisterEvents viene chiamato sia durante la progettazione che durante l'esecuzione per consentire al componente di definire gli eventi che genera.

Il parametro allowEventHandlers del metodo Add specifica se il componente consente la creazione di oggetti DtsEventHandler per l'evento. Si noti che DtsEventHandlers sono sincroni. Pertanto, il componente riprende l'esecuzione solo al termine dell'esecuzione di un oggetto DtsEventHandler connesso all'evento personalizzato. Se il parametro allowEventHandlers è true, ogni parametro dell'evento viene automaticamente reso disponibile per tutti gli oggetti DtsEventHandler tramite variabili create e popolate automaticamente dal runtime di SQL Server Integration Services.

Generazione di eventi personalizzati

I componenti generano eventi personalizzati chiamando il metodo FireCustomEvent e fornendo il nome, il testo e i parametri dell'evento. Se il parametro allowEventHandlers è true, tutti gli oggetti DtsEventHandlers creati per l'evento personalizzato vengono eseguiti dal motore di runtime di SSIS.

Esempio di evento personalizzato

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.

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 parameterTypes, 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, parameterTypes, 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  

Vedi anche

Gestori eventi di Integration Services (SSIS)
Aggiunta di un gestore eventi a un pacchetto