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 ServerIntegration 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
|
Consulte também