Compartilhar via


Gerando e definindo eventos em um componente de fluxo de dados

Desenvolvedores de componente podem gerar um subconjunto dos eventos definidos na interface IDTSComponentEvents chamando os 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.

Gerando eventos

Os componentes geram 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 Business Intelligence Development Studio 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 continuará 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 qualquer objeto DtsEventHandler através de variáveis que são criadas e preenchidas pelo tempo de execução 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 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 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
Ícone do Integration Services (pequeno) Fique atualizado com o Integration Services

Para obter os mais recentes downloads, artigos, exemplos e vídeos da Microsoft, bem como soluções selecionadas da comunidade, visite a página do Integration Services no MSDN ou TechNet:

Para receber uma notificação automática das atualizações, assine os feeds RSS disponíveis na página.