Podnoszenie i definiowanie zdarzenia w niestandardowego zadania
The Integration Services run-czas engine provides a kolekcja of events that provide status on the progress of a task as the task is validated and executed. The IDTSComponentEvents interfejs defines these events, and is provided to tasks as a parameter to the Validate(Connections, Variables, IDTSEvents, IDTSLogging) and Execute(Connections, Variables, IDTSEvents, IDTSLogging, Object) methods.
Istnieje inny zestaw zdarzeń, które są zdefiniowane w IDTSEvents interfejs, który jest uruchamiany w imieniu zadań przez TaskHost. The TaskHost raises events that occur before and after validation and execution, whereas the task raises the events that occur during execution and validation.
Tworzenie zdarzenia niestandardowego
Deweloperzy zadanie niestandardowe można definiować nowe, niestandardowych zdarzeń przez utworzenie nowego EventInfo w celu ich wykonania zastąpiona InitializeTask(Connections, VariableDispenser, IDTSInfoEvents, IDTSLogging, EventInfos, LogEntryInfos, ObjectReferenceTracker) Metoda. Po EventInfo jest tworzony, który jest dodawany do EventInfos Kolekcja przy użyciu Add(String, String, Boolean, array<String[], array<TypeCode[], array<String[]) Metoda. Podpis metody Add(String, String, Boolean, array<String[], array<TypeCode[], array<String[]) Metoda jest w następujący sposób:
public void Add(string eventName, string description, bool allowEventHandlers, string[] parameterNames, TypeCode[] parameterTypes, string[] parameterDescriptions);
Następujący kod przykładowy pokazuje InitializeTask Ustawianie ich właściwości i metoda zadanie niestandardowe tworzone są dwa zdarzenia niestandardowego. Nowe zdarzenia są następnie dodany do EventInfos Kolekcja.
Pierwsze zdarzenie niestandardowe ma eventName"OnBeforeIncrement" and description"Uruchamiany po początkowa wartość pola jest aktualizowana. "Następny parametr true wartość, wskazuje, że to zdarzenie powinno umożliwić kontener programu obsługa zdarzeń ma zostać utworzony w celu obsługi zdarzenia. Obsługa zdarzeń jest kontener, który zawiera strukturę w pakiecie i usług do zadań, takich jak inne kontenery, takich jak pakiet, kolejność, ForLoop i ForEachLoop.Gdy allowEventHandlers parametr jest true, DtsEventHandler obiekty są tworzone dla zdarzenie. Wszystkie parametry, które zostały zdefiniowane dla zdarzenie są teraz dostępne do DtsEventHandler w zbiorze zmiennych DtsEventHandler.
public override void InitializeTask(Connections connections,
VariableDispenser variables, IDTSInfoEvents events,
IDTSLogging log, EventInfos eventInfos,
LogEntryInfos logEntryInfos, ObjectReferenceTracker refTracker)
{
this.eventInfos = eventInfos;
string[] paramNames = new string[1];
TypeCode[] paramTypes = new TypeCode[1]{TypeCode.Int32};
string[] paramDescriptions = new string[1];
paramNames[0] = "InitialValue";
paramDescriptions[0] = "The value before it is incremented.";
this.eventInfos.Add("OnBeforeIncrement",
"Fires before the task increments the value.",
true,paramNames,paramTypes,paramDescriptions);
this.onBeforeIncrement = this.eventInfos["OnBeforeIncrement"];
paramDescriptions[0] = "The value after it has been incremented.";
this.eventInfos.Add("OnAfterIncrement",
"Fires after the initial value is updated.",
true,paramNames, paramTypes,paramDescriptions);
this.onAfterIncrement = this.eventInfos["OnAfterIncrement"];
}
Public Overrides Sub InitializeTask(ByVal connections As Connections, _
ByVal variables As VariableDispenser, ByVal events As IDTSInfoEvents, _
ByVal log As IDTSLogging, ByVal eventInfos As EventInfos, _
ByVal logEntryInfos As LogEntryInfos, ByVal refTracker As ObjectReferenceTracker)
Dim paramNames(0) As String
Dim paramTypes(0) As TypeCode = {TypeCode.Int32}
Dim paramDescriptions(0) As String
Me.eventInfos = eventInfos
paramNames(0) = "InitialValue"
paramDescriptions(0) = "The value before it is incremented."
Me.eventInfos.Add("OnBeforeIncrement", _
"Fires before the task increments the value.", _
True, paramNames, paramTypes, paramDescriptions)
Me.onBeforeIncrement = Me.eventInfos("OnBeforeIncrement")
paramDescriptions(0) = "The value after it has been incremented."
Me.eventInfos.Add("OnAfterIncrement", _
"Fires after the initial value is updated.", True, _
paramNames, paramTypes, paramDescriptions)
Me.onAfterIncrement = Me.eventInfos("OnAfterIncrement")
End Sub
Podnoszenie zdarzenia niestandardowego
Zdarzenia niestandardowe są wywoływane przez wywołanie FireCustomEvent(String, String, array<Object[]%, String, Boolean%) Metoda. Poniższy wiersz kodu wywołuje zdarzenie niestandardowego.
componentEvents.FireCustomEvent(this.onBeforeIncrement.Name,
this.onBeforeIncrement.Description, ref arguments,
null, ref bFireOnBeforeIncrement);
componentEvents.FireCustomEvent(Me.onBeforeIncrement.Name, _
Me.onBeforeIncrement.Description, arguments, _
Nothing, bFireOnBeforeIncrement)
Przykład
W poniższym przykładzie przedstawiono zadania, które definiuje zdarzenia niestandardowego w InitializeTask Metoda, dodaje niestandardowe zdarzenie EventInfos Kolekcja, a następnie wywołuje zdarzenia niestandardowego w trakcie jego Execute Metoda, wywołując FireCustomEvent(String, String, array<Object[]%, String, Boolean%) Metoda.
[DtsTask(DisplayName = "CustomEventTask")]
public class CustomEventTask : Task
{
public override DTSExecResult Execute(Connections connections,
VariableDispenser variableDispenser, IDTSComponentEvents componentEvents,
IDTSLogging log, object transaction)
{
bool fireAgain;
object[] args = new object[1] { "The value of the parameter." };
componentEvents.FireCustomEvent( "MyCustomEvent",
"Firing the custom event.", ref args,
"CustomEventTask" , ref fireAgain );
return DTSExecResult.Success;
}
public override void InitializeTask(Connections connections,
VariableDispenser variableDispenser, IDTSInfoEvents events,
IDTSLogging log, EventInfos eventInfos,
LogEntryInfos logEntryInfos, ObjectReferenceTracker refTracker)
{
string[] names = new string[1] {"Parameter1"};
TypeCode[] types = new TypeCode[1] {TypeCode.String};
string[] descriptions = new string[1] {"Parameter description." };
eventInfos.Add("MyCustomEvent",
"Fires when my interesting event happens.",
true, names, types, descriptions);
}
}
<DtsTask(DisplayName = "CustomEventTask")> _
Public Class CustomEventTask
Inherits Task
Public Overrides Function Execute(ByVal connections As Connections, _
ByVal variableDispenser As VariableDispenser, _
ByVal componentEvents As IDTSComponentEvents, _
ByVal log As IDTSLogging, ByVal transaction As Object) _
As DTSExecResult
Dim fireAgain As Boolean
Dim args() As Object = New Object(1) {"The value of the parameter."}
componentEvents.FireCustomEvent("MyCustomEvent", _
"Firing the custom event.", args, _
"CustomEventTask" , fireAgain)
Return DTSExecResult.Success
End Function
Public Overrides Sub InitializeTask(ByVal connections As Connections, _
ByVal variableDispenser As VariableDispenser,
ByVal events As IDTSInfoEvents,
ByVal log As IDTSLogging, ByVal eventInfos As EventInfos, ByVal logEnTryInfos As LogEnTryInfos, ByVal refTracker As ObjectReferenceTracker)
Dim names() As String = New String(1) {"Parameter1"}
Dim types() As TypeCode = New TypeCode(1) {TypeCode.String}
Dim descriptions() As String = New String(1) {"Parameter description."}
eventInfos.Add("MyCustomEvent", _
"Fires when my interesting event happens.", _
True, names, types, descriptions)
End Sub
End Class
|
See Also
Konfiguracja w aktualizacji z usług integracja Services pobytu