Compartir a través de


Provocar y definir eventos en un componente de flujo de datos

Los programadores de componentes pueden provocar un subconjunto de los eventos definido en la interfaz IDTSComponentEvents mediante una llamada a los métodos expuestos en la propiedad ComponentMetaData. También puede definir eventos personalizados con la colección EventInfos y provocarlos durante la ejecución con el método FireCustomEvent. En esta sección se describe cómo crear y provocar un evento y se proporcionan instrucciones sobre el momento en que se deben provocar los eventos en tiempo de diseño.

Provocar eventos

Los componentes provocan eventos mediante los métodos Fire<X> de la interfaz IDTSComponentMetaData100. Puede provocar eventos durante el diseño y la ejecución de los componentes. Normalmente, en el diseño de los componentes, se llama a los métodos FireError y FireWarning durante la validación. Estos eventos muestran mensajes en el panel Lista de errores de Business Intelligence Development Studio y proporcionan información a los usuarios del componente cuando éste está incorrectamente configurado.

Los componentes también pueden provocar eventos en cualquier momento durante la ejecución. Los eventos permiten a los programadores de componentes proporcionar información a los usuarios del componente cuando éste se ejecuta. Es probable que la llamada al método FireError durante la ejecución produzca un error en el paquete.

Definir y provocar eventos personalizados

Definir un evento personalizado

Los eventos personalizados se crean mediante una llamada al método Add de la colección EventInfos. La tarea de flujo de datos establece esta colección, que se proporciona al programador de componentes a través de la clase base PipelineComponent. Esta clase contiene eventos personalizados definidos por la tarea de flujo de datos y eventos personalizados definidos por el componente durante el método RegisterEvents.

Los eventos personalizados de un componente no se conservan en el paquete XML. Por tanto, se llama al método RegisterEvents durante el diseño y la ejecución para permitir al componente definir los eventos que provoca.

El parámetro allowEventHandlers del método Add especifica si el componente permite crear objetos DtsEventHandler para el evento. Observe que los objetos DtsEventHandlers son sincrónicos. Por tanto, el componente no reanuda la ejecución hasta que ha terminado de ejecutarse un objeto DtsEventHandler asociado al evento personalizado. Si el parámetro allowEventHandlers es true, cada parámetro del evento pasa a estar disponible automáticamente para cualquier objeto DtsEventHandler a través de variables que se crean y se rellenan de forma automática en el motor en tiempo de ejecución de SQL ServerIntegration Services.

Provocar un evento personalizado

Los componentes provocan eventos personalizados mediante una llamada al método FireCustomEvent y proporcionando el nombre, texto y parámetros del evento. Si el parámetro allowEventHandlers es true, el motor en tiempo de ejecución de SSIS ejecuta los objetos DtsEventHandlers creados para el evento personalizado.

Ejemplo de evento personalizado

En el ejemplo de código siguiente se muestra un componente que define un evento personalizado durante el método RegisterEvents y, a continuación, provoca el evento en tiempo de ejecución mediante una llamada al 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
Icono de Integration Services (pequeño) Manténgase al día con Integration Services

Para obtener las más recientes descargas, artículos, ejemplos y vídeos de Microsoft, así como soluciones seleccionadas de la comunidad, visite la página de Integration Services en MSDN o TechNet:

Para recibir notificaciones automáticas de estas actualizaciones, suscríbase a las fuentes RSS disponibles en la página.