Service Pack 2 verhindert das automatische Starten eines Änderungsworkflows

Hallo zusammen, Stephen ist zurück. Ich bin ein Autor für SharePoint Designer. Ich möchte Sie über einen Fix informieren, der in Service Pack 2 für Office SharePoint Server 2007 und Windows SharePoint Services 3.0 enthalten war. Dieser Fix betrifft in SharePoint Designer 2007 entworfene Workflows. Anschließend werde ich Ihnen zeigen, wie Sie absichtlich eine Workflowschleife verursachen, indem Sie zwei Workflows anstelle eines Workflows verwenden.

Vor Service Pack 2 war es ganz einfach, versehentlich einen Workflow zu erstellen, der sich selbst und in der Folge eine Endlosschleife auslöste. Stellen Sie sich z. B. folgendes Szenario vor:

1) Ein Workflow wird gestartet, wenn ein Element geändert wird.

2) Der Workflow aktualisiert (oder ändert) das aktuelle Element (z. B. mithilfe der Aktion Feld im aktuellen Element festlegen).

3) Da das Element vom Workflow geändert wird, löst sich der Workflow selbst aus.

Wenn also ein Änderungsworkflow vorläge, mit dem Ihnen eine E-Mail gesendet und anschließend das aktuelle Element aktualisiert wird, könnten schnell Hunderte von E-Mails in Ihrem Posteingang eintreffen.

Nach der Installation von Service Pack  2 auf dem Server ist es nicht mehr möglich, dass ein Workflow, der bei der Änderung eines Elements gestartet wird, sich selbst auslöst, indem das aktuelle Element geändert/aktualisiert wird. Dieses Endlosschleifenszenario ist nicht möglich:

clip_image002

Viele Benutzer haben jedoch Workflows entworfen, die eine Endlosschleife verursachen. Beispielsweise könnten Sie einen Änderungsworkflow entwerfen, der für eine Aufgabe eine Endlosschleife auslöst und solange täglich eine Erinnerung sendet, bis die Aufgabe als abgeschlossen markiert wird. Der Workflow löst sich selbst aus, indem eine Spalte Counter aktualisiert wird, die der Liste nur zu diesem Zweck hinzugefügt wurde. Und der Workflow weist eine Regel auf, die den Workflow beendet oder "kurzschließt", wenn eine bestimmte Bedingung erfüllt ist. In diesem Fall wird der Workflow beendet, ohne dass das aktuelle Element geändert wird, falls der Aufgabenstatus "Abgeschlossen" lautet. Nach SP2 wird dieser Workflow unterbrochen, weil er sich nicht selbst auslösen kann.

Mit SP2 werden Endlosschleifen, die durchaus hilfreich sein können, nicht blockiert. Um aber wiederherzustellen, was vorher funktionierte, müssen Sie zwei (oder mehr) Änderungsworkflows erstellen, die sich gegenseitig auslösen. Zwei Änderungsworkflows, die sich gegenseitig auslösen, indem das aktuelle Element aktualisiert/geändert wird, stellen ein "Korekursionsszenario" dar:

clip_image004

Darüber hinaus ist es gängige Praxis, einen statusbasierten Workflow mithilfe mehrerer kürzerer Workflows, die sich gegenseitig auslösen, zu implementieren. Angenommen, Sie haben eine Liste mit einem Statusfeld, der mehrere Änderungsworkflows hinzugefügt sind. Alle diese Workflows enthalten am Ende einen Schritt, mit dem das Statusfeld aktualisiert wird. Ein Workflow löst also durch Aktualisierung des Status mehrere andere Workflows aus, und diese Workflows bestimmen dann anhand des Werts im Statusfeld, ob sie weiterhin ausgeführt oder beendet werden sollen. Dieser statusbasierte Workflow ist ebenfalls ein "Korekursionsszenario", da ein Workflow viele andere Änderungsworkflows startet, indem das aktuelle Element geändert/aktualisiert wird. Mit Service Pack 2 wird diese Art von statusbasiertem Workflow, der auf der Korekursion basiert, nicht blockiert.

Zusammenfassung

· Vor SP2 konnte ein einzelner Änderungsworkflow durch Aktualisieren des aktuellen Elements eine Endlosschleife auslösen, wodurch er sich selbst auslöst.

· Nach SP2 kann ein Änderungsworkflow durch Aktualisieren des aktuellen Elements andere Änderungsworkflows auslösen, aber ein Änderungsworkflow kann sich nicht selbst auslösen. Deshalb werden Korekursionsszenarien – einschließlich Szenarien, in denen ein statusbasierter Workflow mithilfe vieler kleinerer Änderungsworkflows implementiert wird – nicht blockiert.

· Beachten Sie, dass es niemals möglich war, eine Endlosschleife auszulösen, indem ein Erstellungsworkflow ein Element in der aktuellen Liste erstellt. Jeder Workflow weist eine Eigenschaft mit den "Workflows, die ich nicht starten kann" auf. Mit dieser Eigenschaft werden Endlosschleifen für Workflows verhindert, die beim Erstellen eines Elements gestartet werden.

· Weiterhin sollten Sie beachten, dass alle oben beschriebenen Szenarien nur Workflows beinhalten, die einer einzelnen Liste oder Bibliothek hinzugefügt sind. Endlosschleifen in listenübergreifenden Szenarien wurden für Änderungs- oder Erstellungsworkflows niemals blockiert.

Endlosschleifen vor Service Pack 2

Dieser Abschnitt enthält ein Beispiel dafür, wie vor SP2 ein einzelner Änderungsworkflow eine Endlosschleife verursachen konnte. Nach SP2 löst sich dieser Workflow nicht selbst aus, weshalb Sie im nächsten Abschnitt ein Beispiel finden, wie Sie mit zwei separaten Workflows eine Endlosschleife verursachen.

Angenommen, Sie haben eine Aufgabenliste mit dem Namen Team Tasks und möchten einen Workflow erstellen, mit dem solange täglich eine Erinnerung gesendet wird, bis die Aufgabe als abgeschlossen markiert wird.

Fügen Sie zunächst der Liste die Spalte Counter mit dem Standardwert 0 hinzu.

clip_image006

Sie müssen die Zählerspalten in den Listenformularen (Formular für neuen Eintrag, Formular zum Ändern eines Eintrags) ausblenden, damit nur der Workflow darauf zugreifen oder sie aktualisieren kann. Klicken Sie zunächst auf der Seite Listeneinstellungen auf Erweiterte Einstellungen, und lassen Sie die Verwaltung von Inhaltstypen zu.

clip_image008

Klicken Sie auf der Seite Listeneinstellungen auf jeden Inhaltstyp, und klicken Sie auf der nächsten Seite auf die Spalte Counter. Blenden Sie die Spalte Counter aus. Führen Sie diese Schritte für jeden Inhaltstyp in der Liste aus.

clip_image010

Nachdem Sie die Spalte Counter erstellt und ausgeblendet haben, sodass sie nicht in Formularen angezeigt wird, können Sie den Workflow entwerfen.

Der Daily Reminder-Workflow sollte gestartet werden, sobald ein Element erstellt oder geändert wird.

clip_image012

Im ersten Schritt werden die folgenden beiden Dinge überprüft: (1) Wenn die Aufgabe bereits als abgeschlossen markiert wurde, wird der Workflow beendet. Mit dieser Regel wird die Schleife "kurzgeschlossen", wenn die Aufgabe endgültig als abgeschlossen markiert wird. (2) Wenn die Aufgabe nicht abgeschlossen ist, wird mit dem Workflow überprüft, ob das Fälligkeitsdatum in der Zukunft liegt (Datum nach heute). Trifft dies zu, wird der Workflow bis zum Fälligkeitsdatum angehalten, da Sie keine Erinnerungen bis zum Erreichen des Fälligkeitsdatums senden möchten.

clip_image014

Im zweiten Schritt wird erneut überprüft, ob die Aufgabe abgeschlossen ist (falls der Workflow im vorherigen Schritt bis zum Erreichen des Fälligkeitsdatums angehalten wurde und die Aufgabe in der Zwischenzeit abgeschlossen wurde). Wenn die Aufgabe immer noch nicht abgeschlossen ist, wird der Workflow für einen Tag angehalten.

clip_image016

Im dritten Schritt wird erneut überprüft, ob die Aufgabe abgeschlossen wurde, während der Workflow angehalten war. Trifft dies zu, wird der Workflow beendet.

Wenn die Aufgabe nicht abgeschlossen wurde, wird vom Workflow (1) die E-Mail-Erinnerung gesendet; (2) die CurrentCount-Variable wird durch einen Nachschlagevorgang im Feld Aktuelles Element/Counter festgelegt; (3) der Wert "1" wird CurrentCount hinzugefügt und in der NewCount-Variablen gespeichert; und (4) die Spalte Counter wird auf den in der NewCount-Variablen gespeicherten Wert festgelegt.

Im Grunde wird durch diesen Schritt die Spalte Counter bei jeder Ausführung des Workflows um den Wert "1" erhöht. Anhand der Spalte Counter können Sie also erkennen, wie viele Erinnerungen gesendet wurden. Und am wichtigsten ist, dass mit der Aktion Feld im aktuellen Element festlegen am Ende dieses Schritts das aktuelle Element "geändert" wird, wodurch sich der Workflow selbst auslöst und die Schleife verursacht wird.

clip_image018

Endlosschleifen nach Service Pack 2

Nach SP2 ist dieser Schleifeneffekt weiterhin möglich. Sie müssen jedoch anstelle eines einzelnen Workflows, der sich selbst auslöst, zwei Workflows entwerfen, die sich gegenseitig auslösen (Korekursion).

In diesem Beispiel verwenden Sie den (1) Counter-Workflow, mit dem der Zähler erhöht wird, und den (2) Worker-Workflow, mit dem die E-Mail-Erinnerung gesendet wird.

Erster Workflow – Counter-Workflow

Wie weiter oben müssen Sie die Spalte Counter in der Liste mit dem Standardwert 0 erstellen, die Verwaltung von Inhaltstypen zulassen und dieses Feld für jeden Inhaltstyp in der Liste ausblenden.

clip_image006[1]

Dieser Entwurf mit zwei Workflows erfordert eine zweite Spalte, SendMail, die als Kennzeichen für den Worker-Workflow dient. Der Standardwert muss Nein lauten, da andernfalls Änderungen an einem Aufgabenelement dazu führen würden, dass die E-Mail-Erinnerung gesendet wird.

clip_image020

Der Counter-Workflow wird gestartet, sobald ein Element erstellt oder geändert wird.

clip_image022

Im ersten Schritt wird der Aufgabenstatus überprüft. Wenn die Aufgabe abgeschlossen ist, wird der Counter-Workflow beendet.

clip_image024

Wenn das Fälligkeitsdatum der Aufgabe in der Zukunft liegt (Datum nach heute), wird der zweite Schritt bis zum Fälligkeitsdatum angehalten, da Sie keine Erinnerungen bis zum Erreichen des Fälligkeitsdatums senden möchten.

clip_image026

Im dritten Schritt wird erneut überprüft, ob die Aufgabe abgeschlossen wurde, während der Workflow im vorherigen Schritt angehalten war. Wenn die Aufgabe immer noch nicht abgeschlossen ist, wird der Workflow für einen Tag angehalten.

clip_image028

Im letzten Schritt wird der Status erneut überprüft, um festzustellen, ob die Aufgabe während der vorherigen eintägigen Pause abgeschlossen wurde. Wenn dies nicht der Fall ist, wird das aktuelle Element vom Workflow aktualisiert, indem (1) der Wert der Spalte Counter um den Wert "1" erhöht wird und (2) das SendMail-Kennzeichen auf Ja festgelegt wird (der Standardwert ist Nein).

clip_image030

Zweiter Workflow – Worker-Workflow

Der obige Counter-Workflow endet mit dem Aktualisieren (Ändern) des aktuellen Elements. Durch diese Aktualisierungen wird der Worker-Workflow ausgelöst, der so konfiguriert ist, dass er beim Ändern eines Elements gestartet wird.

clip_image032

Der Worker-Workflow überprüft einfach, ob das SendMail-Kennzeichen auf Ja festgelegt ist. Trifft dies zu, sendet der Workflow die E-Mail-Erinnerung und setzt das Kennzeichen auf Nein zurück.

Das Festlegen des SendMail-Kennzeichens auf Nein ist die Änderung, durch die der obige Counter-Workflow ausgelöst wird. Die Counter- und Worker-Workflows lösen sich gegenseitig aus, und es werden tägliche Erinnerungen gesendet, bis die Aufgabe als abgeschlossen markiert ist.

clip_image034

Alternativ kann anstelle einer Endlosschleife der Worker-Workflow die Aufgabenbenachrichtigung eskalieren, wenn die Spalte Counter einen bestimmten Wert erreicht, wie z. B. 5 Erinnerungen. Im folgenden Schritt werden in Abhängigkeit vom Erinnerungszähler unterschiedliche Verzweigungen ausgeführt. Wenn der Zähler den Wert "5" erreicht, sendet der Workflow eine Meldung an einen Manager, dessen E-Mail-Adresse Sie entweder in die Aktion E-Mail senden "hartcodieren" oder mithilfe eines Workflow-Nachschlagevorgangs in einer Liste abrufen können.

clip_image036

Mit dem Worker-Workflow könnte die Aufgabe auch einer anderen Person oder Gruppe erneut zugewiesen werden, nachdem eine bestimmte Anzahl von Erinnerungen gesendet wurde. Für diesen Schritt wird mit dem Workflow die Aufgabe einer SharePoint-Gruppe bestehend aus Teammitgliedern, die für die Nachverfolgung solcher eskalierter Aufgaben zuständig sind, erneut zugewiesen.

clip_image038

Wenn die Schleife beim Erreichen einer bestimmten Anzahl beendet werden soll, müssen Sie auch dem ersten Schritt des Counter-Workflows (und nicht des Worker-Workflows) eine Verzweigung hinzufügen. Mit dieser Verzweigung wird die Schleife beendet, wenn die Spalte Counter den Wert "6" erreicht.

clip_image040

Ich hoffe, Sie finden diese Informationen hilfreich.

Stephen

Es handelt sich hierbei um einen übersetzten Blogbeitrag. Sie finden den Originalartikel unter Service Pack 2 prevents an on-change workflow from starting itself