Fehlerbehandlung in Prozessen

Beim Modellieren der Fehlerbehandlung als Teil Ihres Prozesses können Sie Fehler mithilfe von Fehlerzwischenereignissen oder Ereignisunterprozessen abfangen und mithilfe von Fehlerendereignissen Fehler auslösen.
Tabelle 1. Fehlerereignisse in Prozessen verwenden
Ereignis Beschreibung
Fehlerzwischenereignis Diese Abbildung zeigt, wie man eine Ausnahme modelliert, indem man auf tw.system.step.error im Abschnitt "Post-Assignments" des Boundary-Intermediate-Exception-Events zugreift. an der Grenze einer Aktivität (Fehlergrenzereignis)
  • Fängt bestimmte Fehler oder alle Fehler ab.
  • Stellt Fehlerbehandlungslogik für Fehler bereit, die von der verknüpften Aktivität ausgelöst werden.
Fehlerereignisunterprozess, der mit einem Fehlerstartereignis beginnt Symbol
  • Fängt bestimmte oder alle Fehler ab.
  • Stellt Fehlerbehandlungslogik für Fehler bereit, die von Aktivitäten in dem Prozess, Unterprozess oder Ereignisunterprozess ausgelöst werden, in dem der Fehlerereignisunterprozess direkt enthalten ist.
Fehlerendereignis Symbol Löst einen Fehler aus.

Fehler mithilfe von Fehlerzwischenereignissen abfangen

Bei Prozessen können Sie einer Aktivität ein Fehlerzwischenereignis zuordnen (anhängen) und dieses Ereignis mit einem Fehlerbehandlungsablauf oder einer Aktivität verbinden. Das angehängte Fehlerereignis wird als Fehlergrenzereignis bezeichnet.

Berücksichtigen Sie bei der Entscheidung für bzw. gegen die Verwendung von Fehlerzwischenereignissen die folgenden Punkte:

  • Tritt ein Fehler auf, während ein Prozess eine Aktivität mit einem an die Aktivitätsgrenze angehängten Fehlerereignis ausführt, läuft der Prozess entlang der an das Fehlerereignis angehängten Sequenzlinie ab. Fehler werden in dem Ablauf behandelt, und anschließend wird die normale Verarbeitung fortgesetzt.
  • Fehlerzwischenereignisse müssen an eine Aktivität angehängt sein.
  • Eine Aktivität kann mehrere Fehlerereignisse enthalten, aber nur eines dieser Ereignisse fängt den Fehler ab.
  • Ziehen Sie in Betracht, die Fehlerdaten anzugeben, um bestimmte Fehler abzufangen, den Fehlercode nach den abgefangenen Fehlertypen zu filtern und die abgefangenen Fehler einer Variablen zuzuordnen. Wenn alle Fehler abgefangen werden oder wenn nur ein Fehlercode angegeben ist, werden die Fehlerdaten in einem Element XMLElement in der Variablen tw.system.step.error erfasst.
  • Fangen Sie, um Gültigkeitsfehler in einem Speicherservice für gemeinsam genutzte Geschäftsobjekte zu verarbeiten, den Fehler BPMBOSaveFailedError ab, der in der Liste der speziellen Fehler verfügbar ist. Dieser Fehler ist nur auf Knoten verfügbar, die den Ausführungskontext speichern, entweder automatisch (beispielsweise Coaches) oder explizit durch Aktivieren der Option Ausführungskontext speichern. Weitere Informationen finden Sie unter Services für gemeinsam genutzte Geschäftsobjekte speichern.

Fehler mithilfe von Fehlerereignis-Unterprozessen abfangen

Ein Ereignisunterprozess ist ein spezialisierter Typ von Unterprozess, der nicht Teil des regulären Sequenzablaufs des ihm übergeordneten Prozesses ist. Ein Fehlerereignis-Unterprozess ist ein Ereignisunterprozess, der ein Fehlerstartereignis enthält. Der Ereignisunterprozess ist durch keinen Sequenzablauf verbunden und wird nur ausgeführt, wenn das Startereignis in dem Ereignisunterprozess ausgelöst wird. Sie können Fehlerereignis-Unterprozesse verwenden, um Fehler in Ihrem Prozess zu behandeln.

Beachten Sie die folgenden Punkte bei der Entscheidung für bzw. gegen die Verwendung von Fehlerereignis-Unterprozessen:
  • Erstellen Sie einen lesbaren Prozess, indem Sie das Fehlerereignis im Ereignisunterprozess platzieren, anstatt es im Prozess zu definieren.
  • Verwenden Sie Ereignisunterprozesse, um den Fehlerbehandlungsablauf für mehrere Tasks in Ihrem Prozess wiederzuverwenden. Um einen Fehlerbehandlungsablauf mit angehängten Ereignissen wiederzuverwenden, müssen Sie für jede der Tasks ein Zwischenereignis anhängen und diese Ereignisse anschließend mit dem Fehlerbehandlungsablauf verbinden.
  • Definieren Sie Datenobjekte, auf die Sie Zugriff haben, nur innerhalb des Ereignisunterprozesses. Sie können nur solche Datenobjekte definieren, die zu einem Unterprozess gehören. Die Übersichtlichkeit des übergeordneten Prozesses wird nicht durch unnötige Variablen beeinträchtigt.

Weitere Informationen zu Ereignisunterprozessen finden Sie unter Ereignisunterprozesse modellieren.

Beispiel einer Ausnahmebedingungsbehandlung auf Prozessebene

Mit der schreibgeschützten Systemvariablen tw.system.step.error können Sie auf die Informationen zugreifen, die zu einer Ausnahmebedingung gespeichert sind, die in einem Prozess aufgetreten ist.

Die Variable ist in einem Geltungsbereich zu einem Schritt und nicht in einem Prozess vorhanden. Sie kann daher im nächsten Schritt nicht abgerufen werden. Sie müssen sie stattdessen im Abschnitt der Nachzuweisungen zugreifen, der das Grenzzwischenausnahmebedingungsereignis enthält.

In der folgenden Abbildung wird dargestellt, wie eine Ausnahmebedingung modelliert und bearbeitet wird:

Diese Abbildung zeigt, wie eine Ausnahmebedingung in einem Prozessdiagramm modelliert wird.

Führen Sie die folgenden Schritte aus, um die Ausnahmedaten abzurufen:
  1. Deklarieren Sie eine private Variable des Typs XMLElement, zum Beispiel tw.local.error. Weisen Sie ihr einen neuen Wert zu, zum Beispiel tw.object.XMLElement("abc").
  2. Erstellen Sie eine Nachzuweisung für das angehängte temporäre Ausnahmebedingungsereignis. Weisen Sie der Systemvariable der in Schritt 1 erstellten Variable zu. Beispiel: tw.local.error = tw.system.step.error.

    Sie können den Wert in der lokalen Variable in den nächsten Schritten Ihres Prozess verwenden.

Fehler auslösen

Sie können ein Fehlerendereignis in Ihrem Prozess verwenden, um einen Fehlercode anzugeben und einen Fehlertyp für Fehler zuzuordnen, die von dem Ablauf eines Prozesses oder Service ausgelöst werden.

Berücksichtigen Sie beim Arbeiten mit Fehlerereignissen bzw. Ereignisunterprozessen auch, ob Fehler sofort behandelt werden können und danach die normale Verarbeitung fortgesetzt werden kann, oder ob ein anderer Fehler auf einer anderen Ebene ausgelöst werden kann. Implementieren Sie anschließend die Fehlerbehandlung von unten nach oben. In anderen Fällen kann es effizienter und übersichtlicher sein, wenn Unterprozesse wiederverwendet werden können. Legen Sie jeden verlinkten Prozess und Service so an, dass Fehler erfasst und behoben werden können. Ist auf der niedrigsten Ebene der Implementierung keine Korrektur möglich, können Sie zulassen, dass der Fehler um eine Ebene eskaliert wird, indem Sie entweder kein Fehlerereignis einfügen oder ein Fehlerereignis, das den Fehler in dem aufrufenden Service oder Prozess erneut auslöst, wie im folgenden Abschnitt gezeigt.

Wenn Sie beispielsweise sicherstellen möchten, dass jeder während der Laufzeit des Prozesses auftretende Fehler erfasst wird, können Sie einen übergeordneten Prozess erstellen, der eine Aktivität zum Aufrufen des Hauptprozesses als verlinkten Prozess enthält, und dann eine weitere Aktivität mit einem zugrunde liegenden Service zum Implementieren der Fehlerbehandlung, wie in der folgenden Abbildung dargestellt:

Dieser Screenshot zeigt ein Diagramm des im vorherigen Abschnitt beschriebenen Prozesses.

Dieser Designtyp stellt sicher, dass alle durch zugrunde liegende Prozesse und Services ausgelösten Fehler nach oben weitergegeben und entsprechend behandelt werden.