In S-Prozeduren kann im Gegensatz zu Nicht-S-Prozeduren eine gezielte Fehlerbehandlung durchgeführt werden, und zwar auf Kommandoebene.
Die Fehlerbehandlung in S-Prozeduren ist blockorientiert, das heißt, sie wird auf Blockebene durchgeführt. Bei geschachtelten Blöcken kann für jede Blockebene eine Fehlerbehandlung durchgeführt werden. Sie kann jedoch auch nur für übergeordnete, umgebende Blöcke aufgerufen werden. Dorthin werden dann auch die Fehler, die sich in inneren Blöcken ereigneten, durchgereicht und bearbeitet.
In SDF-P-BASYS hat man mit dem Kommando IF-BLOCK-ERROR die Möglichkeit, in einer S-Prozedur eine blockorientierte Fehlerbehandlung einzuleiten. Der so eingeleitete Kommandoblock muss mit einem END-IF-Kommando abgeschlossen werden.
Wenn eine Fehlerbehandlung angestoßen wird, wird in SDF-P-BASYS zum nächsten IF-BLOCK-ERROR-Kommando gesprungen, wobei nur im aktuellen Kommandoblock bzw. bei Blockschachtelung auch in den übergeordneten Kommandoblöcken in Richtung Prozedurdateiende gesucht wird. Wird kein IF-BLOCK-ERROR gefunden, endet die Prozedur mit Erreichen des Endes der Prozedurdatei. Der Fehler wird an den Aufrufer weitergegeben. Die Fehlersituation wird beendet mit Erreichen eines IF-BLOCK-ERROR-Blocks bzw. mit Erreichen der Prozedurstufe null.
Die Fehlersituation endet aus Gründen der Kompatibilität auch bei Erreichen eines SET-JOB-STEP-Kommandos. In Nicht-S-Prozeduren wird die Fehlerbehandlung weiterhin über den Spin-Off gesteuert (siehe Fehlerbehandlung mit dem Kommando SET-JOB-STEP).
Art der Fehlerbehandlung
Die Art der Fehlerbehandlung in einer S-Prozedur ist abhängig von der Einstellung im Operanden ERROR-MECHANISM des Kommandos SET-PROCEDURE-OPTIONS.
Ist in der Prozedur keine Vereinbarung bezüglich ERROR-MECHANISM getroffen oder ERROR-MECHANISM=*SPIN-OFF-COMPATIBLE vereinbart, so löst SDF-P die Fehlerbehandlung aus, wenn ein Kommando Spin-Off zurückliefert. Die Fehlerbehandlung ist in diesem Fall nicht abhängig von dem Kommando-Returncode.
Dieser Fehlermechanismus ist voreingestellt und bewirkt, dass S-Prozeduren ihr Fehlerverhalten nicht ändern, wenn darin enthaltene Kommandos in einer Folgeversion erstmalig einen kommandospezifischen Kommando-Returncode liefern.
Ist für die ERROR-MECHANISM=*BY-RETURNCODE vereinbart, löst SDF-P die Fehlerbehandlung aus, wenn ein Kommando einen Kommando-Returncode mit einem Subcode ungleich null zurückliefert. Die Fehlerbehandlung ist in diesem Fall nicht abhängig von dem Spin-Off-Verhalten des Kommandos.
Dieser Fehlermechanismus muss explizit vereinbart werden.