Freigeben über


Erstellen von Skripts für Workflowereignisse für SQL Server

Die integrierte Funktionalität von Workflowereignissen kann mithilfe von Microsoft® Visual Basic® Scripting Edition (VBScript) erweitert werden. Da die Skripts eines Workflowprozesses auf dem Server ausgeführt werden, stellt die Kompatibilität von VBScript mit Webbrowsern kein Problem dar.

Innerhalb jedes Ereignisses können Sie Skriptanweisungen hinzufügen, die die Anforderungen der Workflowanwendung umsetzen. Die Funktionen des Workflows lassen sich über die Skriptsprache hinaus erweitern, indem Sie gespeicherte Prozeduren in einem Skript aufrufen. Beispielsweise können Sie eine gespeicherte Prozedur aufrufen, die die ADO-Verbindung (Microsoft® ActiveX® Data Objects) und das Session-Objekt zum Arbeiten mit Daten verwendet.

Die Skripterstellung in Workflow Designer erfolgt im Code-Editor. Er unterstützt die automatische Vervollständigung von Anweisungen, Drag & Drop, Farbcodierung, Microsoft® IntelliMouse®, Skriptüberprüfung und andere Erweiterungen.

Zum Erstellen von Skripts für einen Workflowprozess müssen Sie mit den verfügbaren Ereignissen und ihrer Ausführungsreihenfolge vertraut sein. Darüber hinaus ist es unbedingt erforderlich, über Kenntnisse bzgl. des Ausführens von Ereignissen in einer Schleife und über mögliche Folgen einer Namensänderung von Skriptprozeduren zu verfügen.

Thema Abschnitt
Formatierung von Skripts im Code-Editor Skriptprozeduren
Auslösen von Skripts Workflowereignisse
Reihenfolge des Auftretens von Workflowereignissen Ereignisreihenfolge
Automatisches Unterbrechen von Schleifen im Workflowprozess Unterdrücken von Schleifen
Benennung von Skriptprozeduren Namen von Skriptprozeduren

Skriptprozeduren

Eine einzige Aktion, wie z. B. der Übergang von einem Status im Workflowprozess in einen anderen, kann mehrere unterschiedliche Ereignisse auslösen, die in einer bestimmten Reihenfolge auftreten. Jedem Workflowereignis sind zwei Skriptprozeduren zugeordnet: eine Gültigkeitsprüfungs-Skriptprozedur und eine Ereignisskriptprozedur. Jede Prozedur ist im Code-Editor als gesonderter Skriptblock verfügbar. Sie können beispielsweise vier Skriptprozeduren schreiben, die zu Status zugeordnet sind: OnEnter, OnEnterValidate, OnExit und OnExitValidate. Die Gültigkeitsprüfungs-Skriptprozedur muss den Wert True zurückgeben, damit das zugeordnete Ereignis und die zugeordnete Ereignisskriptprozedur ausgeführt werden.

Workflowereignisse

Es gibt sechs Ereignisse: OnCreate, OnDelete, OnEnter, OnExit, OnChange und OnExpire. Diese Ereignisse haben zwei Aufgaben: Sie repräsentieren gültige Ereignisse im Workflowprozess, und sie werden verwendet, um Skripts auszulösen. Alle Ereignisse außer OnExpire werden beim Speichern von Datensätzen ausgelöst.

Wenn Sie z. B. einen Workflowprozess entwerfen möchten, bei dem ein neuer Datensatz auf einen Status Neu oder Überprüfen festgelegt werden kann, muss jeder dieser Status einen Übergang von der Form Element erstellt aufweisen, der standardmäßig ein OnCreate-Ereignis enthält. Entsprechend müssen Sie zu jedem Status des Workflowprozesses einen Übergang zur Form Element gelöscht hinzufügen, der das OnDelete-Ereignis enthält, wenn es möglich sein soll, einen Datensatz unabhängig vom aktuellen Status zu löschen.

OnExpire-Ereignisse werden durch den SQL Server-Agent gesteuert und zu einer bestimmten, durch diesen Agent definierten Zeit ausgeführt. Alle anderen Ereignisse werden durch Benutzerinteraktion mit den Daten ausgelöst.

Anmerkung   Jedes Ereignis kann verwendet werden, um mit einem Skript eine Statusänderung zu generieren.

Für jedes dieser Ereignisse gibt es eine Gültigkeitsprüfungs-Skriptprozedur und eine Ereignisskriptprozedur. Nur wenn die Gültigkeitsprüfungs-Skriptprozedur den Wert True zurückgibt, wird die Ereignisskriptprozedur ausgeführt. Bei Übergängen müssen darüber hinaus alle definierten Gültigkeitsprüfungs-Skriptprozeduren True zurückgeben, damit eine Ereignisskriptprozedur ausgeführt werden kann.

Nehmen Sie z. B. den Fall eines Statusübergangs von Geöffnet nach Gelöst. Wenn OnExit- und OnEnter-Ereignisse für Geöffnet bzw. Gelöst definiert sind, müssen die Gültigkeitsprüfungs-Skriptprozeduren für OnExit von Geöffnet, für OnChange zwischen Geöffnet und Gelöst und schließlich für OnEnter von Gelöst alle True zurückgeben, damit die entsprechenden Ereignisskriptprozeduren ausgeführt werden. Erst nachdem für alle Gültigkeitsprüfungs-Skriptprozeduren True zurückgegeben wurde, werden die Ereignisskriptprozeduren in der gleichen Reihenfolge ausgeführt: OnExit von Geöffnet, OnChange zwischen Geöffnet und Gelöst und schließlich OnEnter von Gelöst.

Anmerkung   Die Ereignisse OnEnter und OnExit werden bei jedem Eintritt in einen Status bzw. Austritt aus einem Status ausgelöst, unabhängig vom Übergang, der den Eintritt oder Austritt verursacht hat.

Standardmäßig gibt jede Gültigkeitsprüfungs-Skriptprozedur True zurück. Beispiel:

Function State1_OnEnterValidate()
    State1_OnEnterValidate = True
End Function

Sie können die Gültigkeitsprüfungs-Skriptprozedur ändern, um eine Bedingung zu integrieren. Beispiel:

Function State1_OnEnterValidate()
   If CheckValue = 1 then
       State1_OnEnterValidate = True
   End if 
End Function

Wenn die CheckValue-Variable nicht gleich 1 ist, wird die Ereignisskriptprozedur nicht ausgeführt. CheckValue kann in Gültigkeitsprüfungs-Skriptprozeduren eine Variable, ein Element des Session-Objekts oder ein Aufruf einer Funktion sein.

Das folgende Beispiel verwendet das Session.Item-Objekt, um das Datumsfeld DateModified zu überprüfen. Ist das Feld identisch mit dem heutigen Datum, gibt das Gültigkeitsprüfungsskript den Wert True zurück.

Function State1_OnEnterValidate()
     If session.item("DateModified") = now Then
        State1_OnEnterValidate = True
     Else
        State1_OnEnterValidate = False
    End If
End Function

Ereignisreihenfolge

Für jedes der drei Übergangsereignisse, OnCreate, OnChange und OnDelete, werden weitere Ereignisse in einer bestimmten Reihenfolge ausgeführt. (Weitere Informationen finden Sie unter Reihenfolge der Workflowereignisse.)

OnCreate

  • OnCreate Þ OnEnter

Das OnCreate-Ereignis wird ausgeführt, wenn der Benutzer einen Datensatz in die Datenbank einfügt, gefolgt vom OnEnter-Ereignis des ausgewählten ersten Workflowstatus.

OnChange

  • OnExit (Status A) Þ OnChange (Status A nach Status B) Þ OnEnter (Status B)

Wenn der Benutzer einen Übergang von einem Status in einen anderen oder von einem Status zurück in denselben Status verursacht, werden drei Ereignisse ausgelöst: OnExit vom ersten Status, OnChange für den Übergang und OnEnter des nächsten Status.

OnDelete

  • OnExit (Status B) Þ OnDelete

Wenn ein Benutzer einen Datensatz aus der Datenbank löscht, wird das OnExit-Ereignis des Endstatus ausgeführt, gefolgt von OnDelete.

Unterdrücken von Schleifen

Wenn Sie einen Übergang von einem Status in einen anderen verursachen, werden die zugeordneten Ereignisse OnExit, OnChange und OnEnter ausgewertet. Schleifen können auftreten, wenn durch Code innerhalb des OnEnter-Ereignisses des nächsten Status eine Bedingung ausgewertet und in einen wiederum anderen Status übergegangen wird. Da Endlosschleifen dazu führen können, dass Microsoft® SQL Server™ nicht mehr reagiert oder abstürzt, unterdrückt Workflow Designer für SQL Server das Entstehen von Schleifen, indem alle Status, in die der Datensatz während des aktuellen Transaktionskontextes überführt wurde, zwischengespeichert werden. Wird erkannt, dass ein Status bereits vorher durchlaufen wurde, wird zwar der Übergang in diesen Status ermöglicht, aber die Schleife wird unterbrochen, da alle nachfolgenden OnExit-, OnChange- und OnEnter-Ereignisse nicht ausgeführt werden.

Ein Beispiel ist ein Workflowprozess, der die folgenden Übergänge erzwingt:

Status A Þ Status B Þ Status C

  • Eine Aufgabe in Status A wird in Status B überführt.
  • Das OnEnter-Ereignis von Status B löst Code aus, der eine Bedingung auswertet und zu Status C wechselt.
  • Das OnEnter-Ereignis von Status C löst Code aus, der eine Bedingung auswertet und wieder zu Status A wechselt.
  • Das OnEnter-Ereignis von Status A löst Code aus, der eine Bedingung auswertet und zu Status B wechselt. Damit wurde eine Schleife zurück zum Ausgangspunkt ausgeführt.
  • Obwohl der Datensatz während des Transaktionskontextes bereits vorher in den Status B eingetreten ist, wird der Eintritt ermöglicht und das OnEnter-Ereignis ausgeführt. Das OnEnter-Ereignis von Status B wird ausgewertet, und es wird wieder zu Status C gewechselt.

Die Schleife wird an dieser Stelle unterbrochen. Das OnExit-Ereignis von Status B, das OnChange-Ereignis von B nach C und das OnEnter-Ereignis von Status C werden nicht ausgeführt.

Es werden also alle Ereignisse der Schleife vollständig ausgeführt, und nur das erste Ereignis wird zweimal ausgeführt.

Namen von Skriptprozeduren

Für Skriptprozedurnamen im Code-Editor gilt die Konvention, dass an die Name-Eigenschaft des Workflowobjekts ein Unterstrich und der Ereignisname angefügt wird. Bei Gültigkeitsprüfungs-Skriptprozeduren wird Validate am Ende des Namens angefügt. Die Ereignisskriptprozedur für das OnExit-Ereignis eines Status Status1 hat beispielsweise den Namen Status1_OnExit. Die Gültigkeitsprüfungs-Skriptprozedur hat den Namen Status1_OnExitValidate.

Siehe auch

Entwickeln von Workflowanwendungen für SQL Server | Erstellen von Skripts für Ereignisse in Workflow Designer für SQL Server | Verwendungszweck der Ereignisse | Datenbearbeitung mithilfe von Workflowskripts | Fehlerbehandlung für Workflowskripts | Testen und Debuggen in Workflow Designer für SQL Server | Skriptbeispiele für SQL Server | Workflowereignisse