Compartilhar via


Gerando e definindo eventos em um componente de fluxo de dados

Aplica-se a: SQL Server SSIS Integration Runtime no Azure Data Factory

Desenvolvedores de componente podem gerar um subconjunto dos eventos definidos na interface IDTSComponentEvents por meio de chamada dos métodos expostos na propriedade ComponentMetaData. Você também pode definir eventos personalizados usando a coleção EventInfos e gerá-los durante a execução usando o método FireCustomEvent. Esta seção descreve como criar e gerar um evento, e fornece diretrizes sobre quando você deve gerar eventos em tempo de design.

Acionar eventos

Os componentes acionam eventos usando os métodos Fire<X> da interface IDTSComponentMetaData100. Você pode gerar eventos durante o design e a execução do componente. Em geral, durante o design do componente, os métodos FireError e FireWarning são chamados durante a validação. Esses eventos exibem mensagens no painel Lista de Erros do SSDT (SQL Server Data Tools) e fornecem comentários a usuários do componente quando um componente é configurado incorretamente.

Os componentes também podem gerar eventos a qualquer momento durante a execução. Eventos permitem aos desenvolvedores de componentes fornecer comentários a usuários do componente durante sua execução. É provável que a chamada do método FireError durante a execução leve à falha do pacote.

Definindo e gerando eventos personalizados

Definindo um evento personalizado

Eventos personalizados são criados chamando o método Add da coleção EventInfos. Esta coleção é definida pela tarefa de fluxo de dados e fornecida como uma propriedade para o desenvolvedor de componente através da classe base PipelineComponent. Esta classe contém eventos personalizados definidos pela tarefa de fluxo de dados e eventos personalizados definidos pelo componente durante o método RegisterEvents.

Os eventos personalizados de um componente não persistem no pacote XML. Portanto, o método RegisterEvents é chamado durante o design e a execução para permitir que o componente defina os eventos gerados por ele.

O parâmetro allowEventHandlers do método Add especifica se o componente permite criar objetos DtsEventHandler para o evento. Observe que DtsEventHandlers são síncronos. Portanto, o componente não retomará a execução até que um DtsEventHandler anexado ao evento personalizado termine a execução. Se o parâmetro allowEventHandlers for true, cada parâmetro do evento será automaticamente disponibilizado para os objetos DtsEventHandler por meio de variáveis que são criadas e populadas automaticamente pelo runtime do SQL Server Integration Services.

Gerando um evento personalizado

Componentes geram eventos personalizados chamando o método FireCustomEvent e fornecendo o nome, texto e parâmetros do evento. Se o parâmetro allowEventHandlers for true, quaisquer DtsEventHandlers que forem criados para o evento personalizado serão executados pelo mecanismo de tempo de execução do SSIS.

Exemplo de evento personalizado

O exemplo de código a seguir mostra um componente que define um texto personalizado durante o método RegisterEvents e, depois, gera o evento em tempo de execução chamando o método 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  

Consulte Também

Manipuladores de eventos do SSIS (Integration Services)
Adicionar um manipulador de eventos a um pacote