Gerando e definindo eventos em um componente de fluxo de dados
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 qualquer DtsEventHandler objeto por meio de variáveis criadas e preenchidas automaticamente pelo tempo de execução 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
, todos os DtsEventHandlers 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
Mantenha-se atualizado com o Integration Services
Para obter os downloads, artigos, exemplos e vídeos mais recentes da Microsoft, bem como soluções selecionadas da comunidade, visite a página do Integration Services no MSDN:
Visite a página do Integration Services no MSDN
Para receber uma notificação automática dessas atualizações, assine os RSS feeds disponíveis na página.
Confira também
Os manipuladores deeventos do SSIS (Integration Services) adicionam um manipulador de eventos a um pacote