Condition Handler einsetzen

EXEC TAA {

  ON <Severity> {

RESUME NEXT                       |

DEFAULT                           |

PERFORM <Prozedurname1> [THRU | THROUGH <Prozedurname2>     |

EXIT [MODULE [WITH <Zustand>]]    |

EXIT WITH <Zustand>               |

EXIT ARBG                         }

END-EXEC
Ab V7.04 auch:

Diese Funktionalität ist nicht auf allen Plattformen unterstützt.

EXEC TAA {

  ON CONDITIONCLASS <Name> {

RESUME NEXT                       |

DEFAULT                           |

PERFORM <Prozedurname1> [THRU | THROUGH <Prozedurname2>     |

EXIT [MODULE [WITH <Zustand>]]    |

EXIT WITH <Zustand>               |

EXIT ARBG                         }

END-EXEC

Ein Condition Handler wird jeweils für eine Severity oder (ab V7.04) eine Meldungsklasse eingesetzt (auch: „installiert“).

Das Einsetzen eines Condition Handlers gilt jeweils für den aktuellen Baustein; wenn der Baustein verlassen wird, werden automatisch die vom Aufrufer eingesetzten Condition Handlers wieder zuständig.

<Severity> muss einer der vordefinierten Severity Codes sein. Für den Severity Code SysFatal kann kein Condition Handler eingesetzt werden; eine solche Anweisung würde ignoriert werden.

<Name> muss der Name einer bestehenden Meldungsklasse sein.

<Zustand> muss ein in der Schnittstelle des Moduls definierter Zustand sein. <Zustand> darf nicht in Anführungsstrichen stehen.

Ein Severity Handler ist ab seiner Installation zuständig für alle Laufzeitzustände, die aufgeworfen werden und diese Severity haben. Wenn für den Severity Code bereits ein Condition Handler eingesetzt war, wird er durch den neuen ersetzt.

Ein Class-Handler ist ab seiner Installation zuständig für alle Laufzeitzustände, die aufgeworfen werden und einer Meldungsgruppe angehören, die zu der angegebenen Meldungsklasse gehört. Wenn für eine Meldungsgruppe eine Klasse definiert ist, werden diese Meldungen immer von einem Class-Handler bearbeitet, nie von einem Severity-Handler. Die TAA stellt einen Default-Class-Handler zur Verfügung, der aufgerufen wird, wenn für die Klasse einer aufgeworfenen Condition kein Class-Handler installiert ist.

Wenn in einem Baustein für eine Severity kein Condition Handler eingesetzt wurde, stellt die TAA Infrastruktur zunächst fest, ob in dem Baustein für eine niedrigere Severity ein Condition Handler eingesetzt wurde. Wenn ja, wird dieser für evtl. aufgeworfene Laufzeitzustände der betreffenden Severity benutzt. Wenn im aktuellen Baustein weder für die betreffende noch für eine niedrigere Severity ein Condition Handler eingesetzt ist, beendet die Infrastruktur den aktuellen Baustein und benutzt den zuständigen Condition Handler des aufrufenden Programms.

In COBOL-Programmen ist ein Condition Handler entweder eine Unterroutine in einem COBOL-Programm, oder in der Anweisung EXEC TAA ON … selbst enthalten:

Wirkung von RESUME NEXT:

Wenn ein Laufzeitzustand dieser Severity bzw. Klasse aufgeworfen wird und von diesem Modul behandelt werden soll, wird die Verarbeitung bei der auf den RAISE folgenden Anweisung fortgesetzt, als wenn nichts geschehen wäre.

Beispiel:

  EXEC TAA ON LOG RESUME NEXT END-EXEC

Wirkung von DEFAULT:

Hat dieselbe Wirkung wie das Absetzen des Condition Handlers (CLEAR) für diese Severity bzw. Klasse: Wenn ein Laufzeitzustand dieser Severity bzw. Klasse aufgeworfen wird und von diesem Modul behandelt werden soll, findet eine Default-Behandlung statt. Dies kann bedeuten, dass die Behandlung durch einen anderen Condition Handler im selben Modul erfolgt, oder durch einen Condition Handler im aufrufenden Programm.

Beispiel:

  EXEC TAA ON INFO DEFAULT END-EXEC

Wirkung von PERFORM …:

Wenn ein Laufzeitzustand dieser Severity bzw. Klasse aufgeworfen wird und von diesem Modul behandelt werden soll, wird <Prozedurname1> bzw. <Prozedurname1> bis <Prozedurname2> ausgeführt (die PERFORM-Syntax entspricht Standard COBOL).

Die Prozedur kann die definierten Bedingungsnamen (TC-CND-ACTION-…) benutzen, um das Ergebnis der Behandlung anzuzeigen. Wenn keiner dieser Bedingungsnamen auf „True“ gesetzt wird, wird TC-CND-ACTION-RESUME angenommen.

Die TAA-Infrastruktur stellt fest, wie das Ergebnis des Condition Handlers war; bei jedem anderen Ergebnis als TC-CND-ACTION-RESUME übernimmt sie die Kontrolle und beendet das Modul oder den Geschäftsvorfall. Wenn das Ergebnis TC-CND-ACTION-CALLERHDL lautet, beendet die Infrastruktur das aktuelle Modul und übergibt die Kontrolle an das nächsthöhere Programm in der Aufrufhierarchie. Dort wird automatisch sofort der Laufzeitzustand neu aufgeworfen, sodass ein evtl. in dem Aufrufer vorhandener Condition Handler den Laufzeitzustand behandeln kann.

Beispiel:

  EXEC TAA ON WARNING PERFORM MY-ERROR END-EXEC
  
  EXEC TAA ON CONDITIONCLASS PRIVAT PERFORM PRIVAT-HANDLER END-EXEC

Wirkung von EXIT …:

Wenn ein Laufzeitzustand dieser Severity bzw. Klasse aufgeworfen wird und von diesem Modul behandelt werden soll, wird das aktuelle Modul bei der Infrastruktur abgemeldet (UNREGISTER). Bei EXIT MODULE geht die Kontrolle an den Aufrufer zurück. Alle Parameterobjekte das aktuellen Moduls werden gemäß ihrer Rolle behandelt. Wenn ein <Zustand> angegeben wurde, wird dieser als Rückkehrzustand des Moduls benutzt.

Im Falle eines EXIT ARBG geht die Kontrolle nicht an den Aufrufer zurück, sondern der Arbeitsgang wird abgebrochen.

Beispiel:

  EXEC TAA ON ERROR EXIT MODULE WITH NOTFOUND END-EXEC