Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

IF-BLOCK-ERROR

&pagelevel(3)&pagelevel

IF-BLOCK-ERROR-Block einleiten

Komponente:

SDF-P-BASYS

Funktionsbereich:

Prozeduren

Anwendungsbereich:

PROCEDURE                                                                                                      

Privilegierung:

STD-PROCESSING
OPERATING
HARDWARE-MAINTENANCE
SECURITY-ADMINISTRATION
SAT-FILE-MANAGEMENT
SAT-FILE-EVALUATION

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).