Linguagem

Levantando e definindo eventos em um componente de fluxo de dados

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

Os desenvolvedores de componentes podem gerar um subconjunto dos eventos definidos na IDTSComponentEvents interface chamando os métodos expostos na ComponentMetaData propriedade. Também pode definir eventos personalizados usando a EventInfos coleção e levantá-los durante a execução usando o FireCustomEvent método. Esta secção descreve como criar e gerar um evento, e fornece orientações sobre quando deve levantar eventos no momento do design.

Geração de Eventos

Os componentes geram eventos usando os métodos Fire<X> da IDTSComponentMetaData100 interface. Podes levantar eventos durante o design e execução dos componentes. Normalmente, durante o desenho dos componentes, os FireError métodos e FireWarning são chamados durante a validação. Estes eventos exibem mensagens no painel da Lista de Erros do SQL Server Data Tools (SSDT) e fornecem feedback aos utilizadores do componente quando um componente está configurado incorretamente.

Os componentes também podem gerar eventos em qualquer momento durante a execução. Os eventos permitem que os programadores de componentes forneçam feedback aos utilizadores do componente à medida que este é executado. Chamar o FireError método durante a execução provavelmente fará falhar o pacote.

Definição e Elevação de Eventos Personalizados

Definição de um Evento Personalizado

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

Os eventos personalizados de um componente não são preservados no XML do pacote. Portanto, o RegisterEvents método é chamado tanto durante o design como durante a execução para permitir que o componente defina os eventos que gera.

O parâmetro allowEventHandlers do Add método especifica se o componente permite DtsEventHandler a criação de objetos para o evento. Note que DtsEventHandlers são síncronos. Portanto, o componente não retoma a execução até que um DtsEventHandler evento personalizado anexado tenha terminado a execução. Se o parâmetro allowEventHandlersfor verdadeiro, cada parâmetro do evento fica automaticamente disponível para quaisquer DtsEventHandler objetos através de variáveis criadas e preenchidas automaticamente pelo runtime do SQL Server Integration Services.

Criar um Evento Personalizado

Os componentes geram eventos personalizados ao chamar o FireCustomEvent método e fornecer o nome, texto e parâmetros do evento. Se o parâmetro allowEventHandlersfor verdadeiro, quaisquer DtsEventHandlers que sejam criados para o evento personalizado são executados pelo motor de execução SSIS.

Exemplo de Evento Personalizado

O exemplo de código seguinte mostra um componente que define um evento personalizado durante o RegisterEvents método e depois eleva o evento em tempo de execução ao chamar o FireCustomEvent método.

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