Compartir a través de


Provocar y definir eventos en un componente de flujo de datos

Se aplica a: SQL Server SSIS Integration Runtime en Azure Data Factory

Los desarrolladores de componentes pueden producir 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 SQL Server Data Tools (SSDT) y proporcionan información a los usuarios del componente cuando este está configurado incorrectamente.

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 adjuntado 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 el tiempo de ejecución de SQL Server Integration Services crea y rellena de forma automática.

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 entorno de ejecución de SSIS ejecuta los elementos de 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 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  

Consulte también

Controladores de eventos de Integration Services (SSIS)
Agregar un controlador de eventos a un paquete