Język

Podnoszenie i definiowanie zdarzeń w składniku przepływu danych

Dotyczy:SQL Server Środowisko SSIS Integration Runtime w usłudze Azure Data Factory

Deweloperzy komponentów mogą wywołać podzbiór zdarzeń zdefiniowanych w interfejsie, wywołując metody udostępnione IDTSComponentEvents na właściwości ComponentMetaData . Możesz też zdefiniować niestandardowe zdarzenia za pomocą EventInfos kolekcji i wywoływać je podczas wykonywania za pomocą tej metody FireCustomEvent . Ta sekcja opisuje, jak stworzyć i zorganizować wydarzenie oraz zawiera wskazówki, kiedy należy zgłaszać wydarzenia w czasie projektowania.

Wywoływanie zdarzeń

Komponenty generują zdarzenia za pomocą metod interfejsu IDTSComponentMetaData100Fire<X>. Możesz zgłaszać zdarzenia podczas projektowania i realizacji komponentów. Zazwyczaj podczas projektowania komponentów, FireError metody i FireWarning są wywoływane podczas walidacji. Zdarzenia te wyświetlają komunikaty w panelu Listy błędów w SQL Server Data Tools (SSDT) i dostarczają użytkownikom informacji zwrotnej, gdy komponent jest nieprawidłowo skonfigurowany.

Komponenty mogą również podnieść wydarzenia w dowolnym momencie wykonywania. Zdarzenia pozwalają deweloperom komponentów przekazywać użytkownikom informacje zwrotne podczas jego działania. Wywołanie FireError metody podczas wykonania prawdopodobnie zakończy się niepowodzeniem pakietu.

Definiowanie i podnoszenie zdarzeń niestandardowych

Definiowanie niestandardowego zdarzenia

Niestandardowe zdarzenia tworzone są przez wywołanie Add metody kolekcji EventInfos . Ta kolekcja jest ustalana przez zadanie przepływu danych i udostępniana jako własność twórcy komponentów poprzez klasę PipelineComponent bazową. Ta klasa zawiera niestandardowe zdarzenia zdefiniowane przez zadanie przepływu danych oraz niestandardowe zdarzenia zdefiniowane przez komponent podczas metody RegisterEvents .

Niestandardowe zdarzenia komponentu nie są utrzymywane w XML pakietu. Dlatego metoda jest RegisterEvents wywoływana zarówno podczas projektowania, jak i wykonywania, aby umożliwić komponentowi zdefiniowanie wywołanych przez siebie zdarzeń.

Parametr AddallowEventHandlers metody określa, czy komponent pozwala DtsEventHandler na tworzenie obiektów dla danego zdarzenia. Zwróć uwagę, że DtsEventHandlers są synchroniczne. Dlatego komponent nie wznawia wykonywania, dopóki dołączone DtsEventHandler do niestandardowego zdarzenia nie zakończy się działanie. Jeśli parametr allowEventHandlers jest prawdziwy, każdy parametr zdarzenia jest automatycznie udostępniany dowolnym obiektom DtsEventHandler poprzez zmienne tworzone i wypełniane automatycznie przez środowisko uruchomieniowe SQL Server Integration Services.

Tworzenie Wydarzenia Niestandardowego

Komponenty generują niestandardowe zdarzenia, wywołując metodę FireCustomEvent i podając nazwę, tekst oraz parametry zdarzenia. Jeśli parametr allowEventHandlers jest prawdziwy, wszystkie DtsEventHandlers utworzone dla niestandardowego zdarzenia są wykonywane przez silnik wykonawczy SSIS.

Przykładowy niestandardowy event

Poniższy przykład kodu pokazuje komponent, który definiuje niestandardowe zdarzenie podczas metody RegisterEvents , a następnie podnosi to zdarzenie w czasie działania, wywołując metodę 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