Udostępnij za pośrednictwem


Obsługa zdarzenia programowe

The SSIS runtime provides a kolekcja of events that occur before, during, and after the validation and execution of a pakiet. Zdarzenia te mogą być przechwytywane na dwa sposoby.Pierwsza metoda polega na realizacji IDTSEvents Interfejs w klasie i dostarczanie klasę jako parametr Execute i Validate metody pakiet. Druga metoda polega na tworzenie DtsEventHandler obiekty, które mogą zawierać inne SSIS obiekty, takie jak zadania i pętli, które są wykonywane, gdy zdarzenie IDTSEvents występuje. W tej sekcji opisano te dwie metody oraz przykłady kodu do wykazania, ich zastosowania.

Odbieranie wywołania zwrotne IDTSEvents

Deweloperzy, którzy budowanie i programowo wykonać pakietów może odbierać zdarzenie powiadomienia podczas sprawdzania poprawności i wykonać procesu przy użyciu IDTSEvents interfejs. Można to zrobić, tworząc klasę, która implementuje IDTSEvents interfejs i dostarczenie tej klasy jako parametr Validate i Execute metody pakiet. Metody klasy są następnie wywoływane przez uruchomienie-czas silnika po wystąpieniu zdarzenia.

The DefaultEvents class is a class that already implements the IDTSEvents interfejs; therefore, another alternative to implementing IDTSEvents directly is to derive from DefaultEvents and override the specific events that you want to respond to. Następnie podaj klasy jako parametr Validate i Execute metody Package Aby odbierać zdarzenie wywołania zwrotne.

Poniższy przykład kodu demonstruje klasy, która wynika z DefaultEventsi zastępuje OnPreExecute(Executable, Boolean%) Metoda. The class is then provided as aparameter to the Validate and Execute methods of the package.

using System;
using Microsoft.SqlServer.Dts.Runtime;

namespace Microsoft.SqlServer.Dts.Samples
{
  class Program
  {
    static void Main(string[] args)
    {
      Package p = new Package();
      MyEventsClass eventsClass = new MyEventsClass();

      p.Validate(null, null, eventsClass, null);
      p.Execute(null, null, eventsClass, null, null);

      Console.Read();
    }
  }
  class MyEventsClass : DefaultEvents
  {
    public override void OnPreExecute(Executable exec, ref bool fireAgain)
    {
      // TODO: Add custom code to handle the event.
      Console.WriteLine("The PreExecute event of the " +
        exec.ToString() + " has been raised.");
    }
  }
}
Imports Microsoft.SqlServer.Dts.Runtime

Module Module1

  Sub Main()

    Dim p As Package = New Package()
    Dim eventsClass As MyEventsClass = New MyEventsClass()

    p.Validate(Nothing, Nothing, eventsClass, Nothing)
    p.Execute(Nothing, Nothing, eventsClass, Nothing, Nothing)

    Console.Read()

  End Sub

End Module

Class MyEventsClass
  Inherits DefaultEvents

  Public Overrides Sub OnPreExecute(ByVal exec As Executable, ByRef fireAgain As Boolean)

    ' TODO: Add custom code to handle the event.
    Console.WriteLine("The PreExecute event of the " & _
      exec.ToString() & " has been raised.")

  End Sub

End Class

Tworzenie obiektów DtsEventHandler

Uruchom-czas aparat zapewnia niezawodne, bardzo elastyczne zdarzeń system obsługi i powiadomienie za pośrednictwem DtsEventHandler obiekt. Obiekty te pozwalają projektować całego przepływy pracy w ramach obsługa zdarzeń, które wykonywać tylko wtedy, gdy wystąpi zdarzenie należącej do obsługa zdarzeń.The DtsEventHandler object is a kontener that is executed when the corresponding zdarzenie on its parent object fires. Ta architektura umożliwia tworzenie izolowane przepływy pracy, które są wykonywane w odpowiedzi na zdarzenia występujące w kontenerze.Ponieważ DtsEventHandler obiekty są synchroniczne, wykonanie nie wznawia aż do chwili, kiedy obsługi zdarzeń, które są dołączone do zdarzenie zostały zwrócone.

Poniższy kod demonstruje sposób tworzenia DtsEventHandler obiekt. Dodaje kod FileSystemTask Aby Executables() Kolekcja pakiet, a następnie tworzy DtsEventHandler obiekt o OnError(DtsObject, Int32, String, String, String, Int32, String) zdarzenie tego zadania. A FileSystemTask zostanie dodany do programu obsługa zdarzeń, który jest wykonywany, kiedy OnError(DtsObject, Int32, String, String, String, Int32, String) w pierwszym wystąpieniu zdarzenie FileSystemTask. W tym przykładzie założono, że istnieje plik o nazwie C:\Windows\Temp\DemoFile.txt do testowania.Pierwszy czas uruchomić próbki, jeśli kopiuje plik pomyślnie i obsługa zdarzeń nie jest wywoływana.Po raz drugi uruchomić próbki, pierwszy FileSystemTask Nie można skopiować pliku (ponieważ wartość OverwriteDestinationFile() jest false), obsługa zdarzeń jest nazywany, drugi FileSystemTask Usuwa plik źródłowy i niepowodzeń raportów pakiet z powodu błędu, który wystąpił.

Przykład

using System;
using System.IO;
using Microsoft.SqlServer.Dts.Runtime;
using Microsoft.SqlServer.Dts.Tasks.FileSystemTask;

namespace Microsoft.SqlServer.Dts.Samples
{
  class Program
  {
    static void Main(string[] args)
    {
      string f = "DemoFile.txt";
      Executable e;
      TaskHost th;
      FileSystemTask fst;

      Package p = new Package();

      p.Variables.Add("sourceFile", true, String.Empty,
        @"C:\Windows\Temp\" + f);
      p.Variables.Add("destinationFile", true, String.Empty,
        Path.Combine(Directory.GetCurrentDirectory(), f));

      // Create a first File System task and add it to the package.
      // This task tries to copy a file from one folder to another.
      e = p.Executables.Add("STOCK:FileSystemTask");
      th = e as TaskHost;
      th.Name = "FileSystemTask1";
      fst = th.InnerObject as FileSystemTask;

      fst.Operation = DTSFileSystemOperation.CopyFile;
      fst.OverwriteDestinationFile = false;
      fst.Source = "sourceFile";
      fst.IsSourcePathVariable = true;
      fst.Destination = "destinationFile";
      fst.IsDestinationPathVariable = true;

      // Add an event handler for the FileSystemTask's OnError event.
      DtsEventHandler ehOnError = (DtsEventHandler)th.EventHandlers.Add("OnError");

      // Create a second File System task and add it to the event handler.
      // This task deletes the source file if the event handler is called.
      e = ehOnError.Executables.Add("STOCK:FileSystemTask");
      th = e as TaskHost;
      th.Name = "FileSystemTask2";
      fst = th.InnerObject as FileSystemTask;

      fst.Operation = DTSFileSystemOperation.DeleteFile;
      fst.Source = "sourceFile";
      fst.IsSourcePathVariable = true;

      DTSExecResult vr = p.Validate(null, null, null, null);
      Console.WriteLine("ValidationResult = " + vr.ToString());
      if (vr == DTSExecResult.Success)
      {
        DTSExecResult er = p.Execute(null, null, null, null, null);
        Console.WriteLine("ExecutionResult = " + er.ToString());
        if (er == DTSExecResult.Failure)
          if (!File.Exists(@"C:\Windows\Temp\" + f))
            Console.WriteLine("Source file has been deleted by the event handler.");
      }
      Console.Read();
    }
  }
}
Imports System.IO
Imports Microsoft.SqlServer.Dts.Runtime
Imports Microsoft.SqlServer.Dts.Tasks.FileSystemTask

Module Module1

  Sub Main()

    Dim f As String = "DemoFile.txt"
    Dim e As Executable
    Dim th As TaskHost
    Dim fst As FileSystemTask

    Dim p As Package = New Package()

    p.Variables.Add("sourceFile", True, String.Empty, _
      "C:\Windows\Temp\" & f)
    p.Variables.Add("destinationFile", True, String.Empty, _
      Path.Combine(Directory.GetCurrentDirectory(), f))

    ' Create a first File System task and add it to the package.
    ' This task tries to copy a file from one folder to another.
    e = p.Executables.Add("STOCK:FileSystemTask")
    th = CType(e, TaskHost)
    th.Name = "FileSystemTask1"
    fst = CType(th.InnerObject, FileSystemTask)

    fst.Operation = DTSFileSystemOperation.CopyFile
    fst.OverwriteDestinationFile = False
    fst.Source = "sourceFile"
    fst.IsSourcePathVariable = True
    fst.Destination = "destinationFile"
    fst.IsDestinationPathVariable = True

    ' Add an event handler for the FileSystemTask's OnError event.
    Dim ehOnError As DtsEventHandler = CType(th.EventHandlers.Add("OnError"), DtsEventHandler)

    ' Create a second File System task and add it to the event handler.
    ' This task deletes the source file if the event handler is called.
    e = ehOnError.Executables.Add("STOCK:FileSystemTask")
    th = CType(e, TaskHost)
    th.Name = "FileSystemTask1"
    fst = CType(th.InnerObject, FileSystemTask)

    fst.Operation = DTSFileSystemOperation.DeleteFile
    fst.Source = "sourceFile"
    fst.IsSourcePathVariable = True

    Dim vr As DTSExecResult = p.Validate(Nothing, Nothing, Nothing, Nothing)
    Console.WriteLine("ValidationResult = " + vr.ToString())
    If vr = DTSExecResult.Success Then
      Dim er As DTSExecResult = p.Execute(Nothing, Nothing, Nothing, Nothing, Nothing)
      Console.WriteLine("ExecutionResult = " + er.ToString())
      If er = DTSExecResult.Failure Then
        If Not File.Exists("C:\Windows\Temp\" + f) Then
          Console.WriteLine("Source file has been deleted by the event handler.")
        End If
      End If
    End If
    Console.Read()

  End Sub

End Module
Integration Services icon (small) Konfiguracja w aktualizacji z usług integracja Services pobytu

Najnowsze pliki do pobrania, artykuły, próbki, i pliki wideo firmy Microsoft, jak również wybranego rozwiązania od Wspólnoty, odwiedź witrynę Integration Services strona w witrynie MSDN lub TechNet:

Automatycznego powiadomienie tych aktualizacji należy subskrybować źródła danych RSS, które jest dostępne strona.