Wie auch in anderen BS2000-Kommandofolgen führt in einer S-Prozedur ein fehlerhaftes Kommando dazu, dass die nachfolgenden Kommandos nicht mehr ausgeführt werden. Dies wird in Nicht-S-Prozeduren als „Spinoff“, in S-Prozeduren als „SDF-P-Fehlerbehandlung“ bezeichnet. Sind keine weiteren Vorkehrungen getroffen, wird der Prozedurablauf dadurch beendet und an den Aufrufer ein Fehler zurückgemeldet. Dadurch wird auch in einer rufenden Prozedur wiederum der Spinoff bzw. die SDF-P-Fehlerbehandlung ausgelöst; letztlich führt dies zum Abbruch eines Stapelauftrags bzw. im Dialogbetrieb zu einer neuen Eingabeaufforderung am Terminal.
Wenn in einer S-Prozedur nach einem Kommandofehler noch sinnvoll weitergearbeitet werden kann (oder sogar muss), ist der Fehler an einer geeigneten Stelle durch einen Fehlerbehandlungsblock aufzufangen:
/DELETE-FILE DATEI.A /DELETE-FILE DATEI.B /DELETE-FILE DATEI.C /IF-BLOCK-ERROR / WRITE-TEXT 'Mindestens eine der Dateien liess sich nicht loeschen.' /END-IF /"Fortsetzung der Verarbeitung"
Die durch IF-BLOCK-ERROR eingeleitete Kommandofolge wird nur ausgeführt, wenn von einem der vorhergehenden Kommandos die SDF-P-Fehlerbehandlung ausgelöst wurde. Es darf auch, analog zum IF-Block, ein ELSE-Zweig vorhanden sein, der im Nicht-Fehlerfall zur Ausführung kommt. Anschließend ist der Spinoff aufgehoben, und die Prozedurbearbeitung wird (nach dem zugehörigen END-IF) normal fortgesetzt.
Um über die einfache Aussage „ok“ bzw. „nicht ok“ der SDF-P-Fehlerbehandlung hinaus eine differenziertere Auswertung zu ermöglichen, meldet jedes Kommando das Ergebnis seiner Ausführung über einen standardisierten Returncode zurück, der aus den Komponenten Maincode, Subcode1 und Subcode2 besteht. Diese werden von SDF-P im Fehlerfall
automatisch gesichert. Wenn keine Fehlerbedingung gesetzt ist, kann das Kommando SAVE-RETURNCODE benutzt werden, um den Returncode des zuletzt ausgeführten Kommandos zu sichern. Die vordefinierten Funktionen MAINCODE, SUBCODE1 und SUBCODE2 machen die gesicherten Werte zur Benutzung in SDF-P-Ausdrücken verfügbar.
Standardmäßig wird die SDF-P-Fehlerbehandlung durch die gleichen Situationen ausgelöst, die in Nicht-S-Prozeduren zum Spinoff führen. Mit der Einstellung ERROR-MECHANISM=*BY-RETURNCODE (Kommando SET-PROCEDURE-OPTIONS) kann die Fehlerbehandlung auch abhängig vom Returncode erfolgen (Fehler, wenn Subcode1 ungleich 0 ist). Siehe auch Abschnitt „Fehlerbehandlung“.
Der Kommandoname IF-BLOCK-ERROR soll darauf hinweisen, dass die dadurch eingeleitete Fehlerbehandlung blockorientiert ist: Sie tritt nur in Kraft, wenn der Fehler im selben Block oder einem darin eingeschachtelten Block auftrat. Im Fehlerfall wird jeder neu beginnende Block samt darin enthaltener Fehlerbehandlungen vollständig ignoriert:
/DELETE-FILE DATEI.A /BEGIN-BLOCK / DELETE-FILE #TEMP.B / DELETE-FILE #TEMP.C / IF-BLOCK-ERROR / WRITE-TEXT 'Fehler beim Loeschen von temporaeren Dateien' / END-IF /END-BLOCK
In diesem Beispiel wird im Falle eines Fehlers beim Löschen von DATEI.A der folgende BEGIN-Block komplett übersprungen; die Fehlerbehandlung wirkt daher nur auf die blockinternen DELETE-FILE-Kommandos für die Dateien #TEMP.B und #TEMP.C.
Damit eine Fehlerbehandlung gezielt auf ein einzelnes Kommando wirken kann, ohne dass dieses in einen eigenen BEGIN-Block eingeschlossen werden muss, bietet SDF-P das Kommando IF-CMD-ERROR. Es leitet einen Block ein, der nur bei Fehlern im unmittelbar davor stehenden Kommando ausgeführt wird.