Språk

Höja och definiera händelser i en dataflödeskomponent

Gäller för:SQL Server SSIS Integration Runtime i Azure Data Factory

Komponentutvecklare kan skapa en delmängd av de händelser som definieras i gränssnittet IDTSComponentEvents genom att anropa de metoder som exponerats på egenskapen ComponentMetaData . Du kan också definiera egna händelser genom att använda samlingen EventInfos och höja dem under körningen genom att använda metoden FireCustomEvent . Detta avsnitt beskriver hur man skapar och höjer ett evenemang, och ger riktlinjer för när man bör ta upp evenemang vid designtillfället.

Generering av händelser

Komponenter höjer händelser genom att använda Fire<X-metoderna> i gränssnittet IDTSComponentMetaData100 . Du kan skapa händelser under komponentdesign och körning. Vanligtvis, under komponentdesign, anropas och FireWarning metoderna FireError under valideringen. Dessa händelser visar meddelanden i Fellista-panelen i SQL Server Data Tools (SSDT) och ger feedback till användare av komponenten när en komponent är felkonfigurerad.

Komponenter kan också skapa händelser när som helst under körningen. Händelser gör det möjligt för komponentutvecklare att ge feedback till användare av komponenten medan den körs. Att anropa FireError metoden under körningen leder sannolikt till att paketet misslyckas.

Definiera och skapa anpassade evenemang

Definiera en anpassad händelse

Anpassade händelser skapas genom att anropa Add samlingens metod EventInfos . Denna samling sätts av dataflödesuppgiften och tillhandahålls som en egenskap till komponentutvecklaren via PipelineComponent basklassen. Denna klass innehåller anpassade händelser definierade av dataflödesuppgiften och anpassade händelser som definieras av komponenten under metoden RegisterEvents .

De anpassade händelserna för en komponent sparas inte i paketets XML. Därför anropas RegisterEvents metoden både under design och körning för att låta komponenten definiera de händelser den genererar.

Parametern allowEventHandlers för Add metoden specificerar om komponenten tillåter DtsEventHandler att objekt skapas för händelsen. Observera att DtsEventHandlers de är synkrona. Därför återupptar komponenten inte exekveringen förrän en DtsEventHandler kopplad till den anpassade händelsen har avslutat exekveringen. Om parametern allowEventHandlers är sann, görs varje parameter i händelsen automatiskt tillgänglig för alla DtsEventHandler objekt genom variabler som skapas och fylls automatiskt i služba SSIS-runtime.

Att höja en anpassad händelse

Komponenter anropar anpassade händelser genom att anropa FireCustomEvent metoden och ange namn, text och parametrar för händelsen. Om parametern allowEventHandlers är sann, körs alla DtsEventHandlers som skapas för den anpassade händelsen av SSIS-körningsmotorn.

Exempel på anpassat händelse

Följande kodexempel visar en komponent som definierar en anpassad händelse under metoden RegisterEvents , och sedan höjer händelsen vid körning genom att anropa metoden 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