Taal

Gebeurtenissen oproepen en definiëren in een aangepaste taak

Van toepassing op:SQL Server SSIS Integration Runtime in Azure Data Factory

De Integration Services runtime-engine levert een verzameling gebeurtenissen die de status geven van de voortgang van een taak terwijl de taak wordt gevalideerd en uitgevoerd. De IDTSComponentEvents interface definieert deze gebeurtenissen en wordt aan taken gegeven als een parameter voor de Validate en Execute methoden.

Er is een andere set gebeurtenissen, die in de IDTSEvents interface zijn gedefinieerd, die namens de taak worden opgewekt door de TaskHost. De TaskHost taak roept gebeurtenissen op die plaatsvinden vóór en na validatie en uitvoering, terwijl de taak gebeurtenissen oproept die tijdens uitvoering en validatie plaatsvinden.

Aangepaste Events Aanmaken

Aangepaste taakontwikkelaars kunnen nieuwe, aangepaste gebeurtenissen definiëren door een nieuwe EventInfo aan te maken in hun overschreven implementatie van de InitializeTask methode. Nadat de is EventInfo aangemaakt, wordt deze toegevoegd aan de EventInfos-collectie door de Add methode te gebruiken. De methodesignatuur van de Add methode is als volgt:

public void Add(string eventName, string description, bool allowEventHandlers, string[] parameterNames, TypeCode[] parameterTypes, string[] parameterDescriptions);

Het volgende codevoorbeeld toont de InitializeTask-methode van een aangepaste taak, waarbij twee aangepaste gebeurtenissen worden aangemaakt en hun eigenschappen worden ingesteld. De nieuwe evenementen worden vervolgens aan de EventInfos collectie toegevoegd.

Het eerste aangepaste event heeft een gebeurtenisnaam "OnBeforeIncrement" en de beschrijving "Fires nadat de initiële waarde is bijgewerkt." De volgende parameter, de werkelijke waarde, geeft aan dat dit event het mogelijk zou moeten maken om een event handler-container te creëren om het event te verwerken. De event handler is een container die structuur biedt in een pakket en diensten levert aan taken, zoals andere containers zoals het pakket, Sequence, ForLoop en ForEachLoop. Wanneer de allowEventHandlers-parameterwaar is, DtsEventHandler worden objecten aangemaakt voor het evenement. Alle parameters die voor het evenement waren gedefinieerd, zijn nu beschikbaar voor de DtsEventHandler in de variabelenverzameling van de 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  

Aantekenen van Custom Events

Aangepaste gebeurtenissen worden opgeroepen door de methode aan te FireCustomEvent roepen. De volgende regel code genereert een aangepaste gebeurtenis.

componentEvents.FireCustomEvent(this.onBeforeIncrement.Name,  
   this.onBeforeIncrement.Description, ref arguments,  
   null, ref bFireOnBeforeIncrement);  
componentEvents.FireCustomEvent(Me.onBeforeIncrement.Name, _  
Me.onBeforeIncrement.Description, arguments, _  
Nothing,  bFireOnBeforeIncrement)  

Sample

Het volgende voorbeeld toont een taak die een aangepaste gebeurtenis definieert in de InitializeTask-methode , het aangepaste evenement aan de EventInfos collectie toevoegt en vervolgens het aangepaste evenement oproept tijdens zijn Execute-methode door de methode aan te FireCustomEvent roepen.

[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