IF-BLOCK-ERROR-Block einleiten
Komponente: | SDF-P-BASYS |
Funktionsbereich: | Prozeduren |
Anwendungsbereich: | PROCEDURE |
Privilegierung: | STD-PROCESSING |
Funktionsbeschreibung
IF-BLOCK-ERROR ist ein SDF-P-Kontrollflusskommando.
Das Kommando IF-BLOCK-ERROR leitet in einer S-Prozedur eine blockorientierte Fehlerbehandlung ein. Der so eingeleitete Kommandoblock muss mit einem END-IF-Kommando abgeschlossen werden.
Einschränkungen
Benutzer mit den Privilegien SECURITY-ADMINISTRATION, SAT-FILE-EVALUATION und SAT-FILE-MANAGEMENT können das Kommando nur in Prozeduren nutzen.
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 (wurde vorher von SDF anlog zum Spin-Off gebildet).
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 1 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.
SDF-P-Fehlerbehandlung
Die Kommandoverarbeitung wird bei dem nächsten IF-BLOCK-ERROR-Kommando fortgesetzt, 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.
Hinweis
Mit dem Kommando IF-CMD-ERROR (Bestandteil des kostenpflichtigen SDF-P) kann eine Fehlerbehandlung gezielt für das unmittelbar vergehende Kommando durchgeführt werden.
In Nicht-S-Prozeduren wird die Fehlerbehandlung weiterhin über den Spin-Off gesteuert (siehe Fehlerbehandlung mit dem Kommando SET-JOB-STEP).
Format
IF-BLOCK-ERROR |
Kommando-Returncode
(SC2) | SC1 | Maincode | Bedeutung |
---|---|---|---|
0 | CMD0001 | Ohne Fehler | |
1 | CMD0202 | Syntaxfehler | |
1 | SDP0118 | Kommando im falschen Kontext | |
1 | SDP0223 | Falsche Umgebung | |
3 | CMD2203 | Falsche Syntaxdatei | |
32 | CMD0221 | Systemfehler (interner Fehler) | |
130 | SDP0099 | Kein Adressraum mehr verfügbar |
Beispiel
Anhand der Prozedur PROC.SORT2 soll die Fehlerbehandlung in einer S-Prozedur demonstriert werden.
Inhalt der Prozedur PROC.SORT2:
/BEG-PAR-DECL / DECL-PAR INPUT-FILE-1 (INIT = *PROMPT) / DECL-PAR OUTPUT-FILE-1 (INIT = *PROMPT) /END-PAR-DECL /INPUT-FILE-EXIST: SHOW-FILE-ATTRIBUTES &(INPUT-FILE-1) /COND-1: IF ( INPUT-FILE-1 = OUTPUT-FILE-1 ) / WRITE-TEXT 'Eingabedatei = Ausgabedatei !!!' / WRITE-TEXT 'Ausgabedatei mit Suffix COPY.<tsn>' / SET-VAR OUTPUT-FILE-1 = '&(OUTPUT-FILE-1).COPY.&(TSN())' / CREATE-FILE &(OUTPUT-FILE-1) /ERR-1: IF-BLOCK-ERROR / WRITE-TEXT 'Neue Ausgabedatei nicht moeglich!' / HELP-MSG &(MC) / EXIT-PROC ERROR=*YES / ELSE / WRITE-TEXT 'Neue Ausgabedatei &(OUTPUT-FILE-1) erzeugt' /ERR-1-END: END-IF / ELSE "Eingabedatei ungleich Ausgabedatei" / SHOW-FILE-ATTRIBUTES &(OUTPUT-FILE-1) /ERR-2: IF-BLOCK-ERROR / WRITE-TEXT 'Ausgabedatei wird neu erstellt' / CREATE-FILE &(OUTPUT-FILE-1) / ELSE / WRITE-TEXT 'Ausgabedatei existiert bereits! Abbruch' / EXIT-PROC ERROR=*YES /ERR-2-END: END-IF /COND-1-END: END-IF /WORK-1: "Sortieren der Datei 1" / ADD-FILE-LINK LINK=SORTIN, - / FILE-NAME= &(INPUT-FILE-1) / ADD-FILE-LINK LINK=SORTOUT, - / FILE-NAME= &(OUTPUT-FILE-1) / SORT-FILE /WORK-1-ERROR: IF-BLOCK-ERROR / WRITE-TEXT 'Eingabedatei existiert nicht oder' / WRITE-TEXT 'Fehler bei WORK-1: SC1 = &(SC1)' / HELP-MSG &(MC) / ELSE / WRITE-TEXT 'WORK-1 ohne Fehler beendet!' / END-IF
Fall 1:
/call-proc alf.proc.sort2,log=*yes
% 1 1 /BEG-PAR-DECL % 2 1 /DECL-PAR INPUT-FILE-1 (INIT = *PROMPT) % 3 1 /DECL-PAR OUTPUT-FILE-1 (INIT = *PROMPT) % 4 1 /END-PAR-DECL %INPUT-FILE-1: abk.v110 % 5 1 /INPUT-FILE-EXIST: % 5 1 / SHOW-FILE-ATTRIBUTES ABK.V110 % 99 :2OSG:$USER1.ABK.V110 %:2OSG: PUBLIC: 1 FILE RES= 99 FRE= 1 REL= 0 PAGES % 6 1 /COND-1: % 6 1 / IF ( INPUT-FILE-1 = OUTPUT-FILE-1 ) %OUTPUT-FILE-1: abk.v110 % 7 1 /WRITE-TEXT 'Eingabedatei = Ausgabedatei !!!' Eingabedatei = Ausgabedatei !!! % 8 1 /WRITE-TEXT 'Ausgabedatei mit Suffix COPY.<tsn>' Ausgabedatei mit Suffix COPY.<tsn> % 9 1 /SET-VAR OUTPUT-FILE-1 = 'ABK.V110.COPY.3ZAA' % 10 1 /CREATE-FILE ABK.V110.COPY.3ZAA % 11 1 /ERR-1: % 11 1 / IF-BLOCK-ERROR % 15 1 /ELSE % 16 1 /WRITE-TEXT 'Neue Ausgabedatei ABK.V110.COPY.3ZAA erzeugt' Neue Ausgabedatei ABK.V110.COPY.3ZAA erzeugt % 17 1 /ERR-1-END: % 17 1 / END-IF % 27 1 /COND-1-END: % 27 1 / END-IF % 28 1 /WORK-1: % 29 1 /ADD-FILE-LINK LINK=SORTIN, FILE-NAME = ABK.V110 % 31 1 /ADD-FILE-LINK LINK=SORTOUT, FILE-NAM E= ABK.V110.COPY.3ZAA % 33 1 /SORT-FILE % BLS0523 ELEMENT 'SRT80', VERSION '080', TYPE 'L' FROM LIBRARY ':1OSH:$TSOS.SYSLNK.SORT.080' IN PROCESS % BLS0524 LLM 'SRT80', VERSION '08.0A00' OF '2015-02-03 13:07:17' LOADED % BLS0551 COPYRIGHT (C) 2014 FUJITSU TECHNOLOGY SOLUTIONS GMBH. ALL RIGHTS RESE RVED % SRT1001 2017-03-03/18:19:43/000000.00 SORT/MERGE STARTED, VERSION 08.0A00/BS 2000V20.0 % SRT1130 PLEASE ENTER SORT STATEMENTS % SRT1016 SORT/MERGE INPUT RECORDS:............................2.924 (FROM 01) % SRT1030 SORT/MERGE OUTPUT RECORDS:...........................2.924 % SRT1002 2017-03-03/18:19:43/000000.43 SORT/MERGE COMPLETED % 34 1 /WORK-1-ERROR: % 34 1 / IF-BLOCK-ERROR % 38 1 /ELSE % 39 1 /WRITE-TEXT 'WORK-1 ohne Fehler beendet!' WORK-1 ohne Fehler beendet! % 40 1 /END-IF % 1 /EXIT-PROCEDURE ERROR=*NO
Da die Eingabedatei auch als Ausgabedatei angegeben wurde, wird eine neue Ausgabedatei erzeugt. Fehler bei der Verarbeitung treten nicht auf, d.h. bei Erreichen eines Fehlerbehandlungsblockes wird jeweils der ELSE-Zweig durchlaufen.
Fall 2:
/call-proc proc.sort2,log=*yes
% 1 1 /BEG-PAR-DECL % 2 1 /DECL-PAR INPUT-FILE-1 (INIT = *PROMPT) % 3 1 /DECL-PAR OUTPUT-FILE-1 (INIT = *PROMPT) % 4 1 /END-PAR-DECL %INPUT-FILE-1: abk.v111 % 5 1 /INPUT-FILE-EXIST: % 5 1 / SHOW-FILE-ATTRIBUTES ABK.V111 % DMS0533 REQUESTED FILE NOT CATALOGED IN PUBSET '2OSG'. COMMAND TERMINATED % SDP0004 ERROR DETECTED AT COMMAND LINE: 5 IN PROCEDURE ':2OSG:$USER 1.ALF.PROC.SORT2' % 34 1 /WORK-1-ERROR: % 34 1 / IF-BLOCK-ERROR % 35 1 /WRITE-TEXT 'Eingabedatei existiert nicht oder' Eingabedatei existiert nicht oder % 36 1 /WRITE-TEXT 'Fehler bei WORK-1: SC1 = 64' Fehler bei WORK-1: SC1 = 64 % 37 1 /HELP-MSG DMS0533 % DMS0533 REQUESTED FILE NOT CATALOGED IN PUBSET '(&00)'. COMMAND TERMINATED % ? This message is issued by DMS commands. The requested file is not % cataloged in the requested pubset. % RESPONSE : NONE % 40 1 /END-IF % 1 /EXIT-PROCEDURE ERROR=*NO
Die Eingabedatei ABK.V111 existiert nicht und löst bei SHOW-FILE-ATTRIBUTES einen Fehler aus. Es wird zum nächsten Fehlerbehandlungsblock verzweigt. In diesem Fall ist das der Kommandoblock, der mit der Marke WORK-1-ERROR eingeleitet wird. Die Fehlerbehandlungsblöcke im untergeordneten IF-Block (IF-Zweig und auch ELSE-Zweig) werden nicht beachtet! Da der Fehler „behandelt“ wurde, wird die Prozedur implizit mit ERROR= *NO beendet.
Fall 3:
/call-proc proc.sort2,log=*yes
% 1 1 /BEG-PAR-DECL % 2 1 /DECL-PAR INPUT-FILE-1 (INIT = *PROMPT) % 3 1 /DECL-PAR OUTPUT-FILE-1 (INIT = *PROMPT) % 4 1 /END-PAR-DECL %INPUT-FILE-1: abk.v110 % 5 1 /INPUT-FILE-EXIST: % 5 1 / SHOW-FILE-ATTRIBUTES ABK.V110 % 99 :2OSG:$USER1.ABK.V110 %:2OSG: PUBLIC: 1 FILE RES= 99 FRE= 1 REL= 0 PAGES % 6 1 /COND-1: % 6 1 / IF ( INPUT-FILE-1 = OUTPUT-FILE-1 ) %OUTPUT-FILE-1: abk.v110.sort % 18 1 /ELSE "Eingabedatei ungleich Ausgabedatei" % 19 1 /SHOW-FILE-ATTRIBUTES ABK.V110.SORT % 138 :2OSG:$USER1.ABK.V110.SORT %:2OSG: PUBLIC: 1 FILE RES= 138 FRE= 40 REL= 39 PAGES % 20 1 /ERR-2: % 20 1 / IF-BLOCK-ERROR % 23 1 /ELSE % 24 1 /WRITE-TEXT 'Ausgabedatei existiert bereits! Abbruch' Ausgabedatei existiert bereits! Abbruch % 25 1 /EXIT-PROC ERROR=*YES
Die Ausgabedatei existiert bereits. Das Kommando SHOW-FILE-ATTRIBUTES für die Datei ABK.V110.SORT löst keinen Fehler aus. Im nachfolgenden Fehlerbehandlungsblock (Marke ERR-2) wird deshalb der ELSE-Zweig abgearbeitet (explizit EXIT-PROCEDURE mit ERROR=*YES).