Ist es möglich, Ihre Arbeit absichtlich durch ein COBOL-Programm zu beenden? Angenommen, ich habe eine Eingabedatei mit Header-, Detail- und Trailer-Datensätzen. Ich werde ein COBOL-Programm schreiben, das diese Datei liest. Wenn keine Detail-Datensätze in dieser Datei gefunden werden, möchte ich meinen Auftrag abbrechen, indem ich eine Abend-Meldung und einen Abend-Code eingebe. Ist das möglich?
Antworten
Zu viele Anzeigen?Wollen Sie Ihr Programm ABENDEN oder nur eine RETURN-CODE ?
Ich vermute, dass das Setzen eines RETURN-CODE, das Schreiben einer Nachricht zu schreiben und dann das Programm mit einer STOP RUN
o GOBACK
ist alles, was was Sie wirklich tun wollen. Ein tatsächliches ABEND zu verursachen, ist nicht unbedingt notwendig.
In einer IBM-Batch-Umgebung wird der von Ihrem Programm gesetzte RETURN-CODE zum RC für den JCL-Jobstep, unter dem das Programm ausgeführt wurde. Dies ist normalerweise das, was Sie einstellen und testen wollen.
En RETURN-CODE
wird festgelegt durch MOVE
mit einem numerischen Wert versehen. Zum Beispiel:
DISPLAY 'No Detail Records found in file.'
MOVE 16 TO RETURN-CODE
GOBACK.
Sie können auch einen Programmdump aus einem Programm heraus erstellen, das unter der Sprachumgebung (IBM Mainframe-Option) mit die Funktion CEE3DMP--Dump generieren Nutzen.
In älteren IBM-Mainframe-COBOL-Programmen kann es zu Aufrufen der ILBOABN0
Routine. Dieser Aufruf hat Ihr Programm abgebrochen und einen Dump ausgegeben. Diese Routine ist jetzt abgeschrieben zu Gunsten der oben beschriebene Technik.
Schließlich können sehr alte Programme Code enthalten, der Abends erzeugt. Dies kann auf verschiedene Arten geschehen, aber die Division durch Null war oft ein Favorit:
DIVIDE SOME-NUMBER BY ZERO GIVING SOME-NUMBER.
Funktioniert jedes Mal!
Ich persönlich empfehle die Einstellung der RETURN-CODE
über den Aufruf ILBOABN0
oder Datenausnahmetechniken.
Anmerkung: Das RETURN-CODE Spezialregister ist nicht Teil des COBOL-85 Standards. Es ist als IBM-Erweiterung für die Sprache verfügbar. Wenn Sie in einer nicht-IBM-kompatiblen Umgebung arbeiten, müssen Sie möglicherweise auf einen anderen Mechanismus zurückgreifen.
Siehe den folgenden Link, wie Sie den an einen JCL-Job-Step zurückgegebenen Return-Code einstellen und einen Abened-Code erzwingen können. http://www.tek-tips.com/viewthread.cfm?qid=1058302&page=22
Zunächst sollten Sie prüfen, welche Arbeitsstandards in Ihrem eigenen Geschäft/auf Ihrer Baustelle akzeptiert werden. Die meisten Teams haben bereits eine akzeptierte Methode, um ein Programm absichtlich aus einem "logischen" Grund abzubrechen. In einem Unternehmen, in dem ich gearbeitet habe, gibt es ein sehr einfaches Programm namens SYSABND2, das, wie ich glaube, in Assembler geschrieben ist und nur zum Abbrechen des Programms aufgerufen wird.
Das heißt, um ABEND zu machen (nicht nur den Rückgabewert zu setzen), sollten Sie das Modul CEE3ABD (oder vorherige Version ILBOABN0 (die jetzt veraltet ist).
Einzelheiten siehe:
Eine Methode, um ein abnormales Laufende zu melden, ist die Ausgabe einer Meldung an das Benutzerterminal oder an den Bediener in einem Großrechnerzentrum und gegebenenfalls an einen Drucker, je nachdem, auf welchem Computertyp das Programm ausgeführt werden soll. In cobol ist es möglich, DISPLAY UPON .. zu verwenden und eine Kennung für das Terminal, die Bedienerkonsole oder den Drucker zu verwenden, die in einem Eintrag im Abschnitt SPECIAL-NAMES der ENVIRONMENT DIVISION definiert ist. Ein Beispiel könnte ähnlich lauten, wobei die richtigen Gerätenamen für Ihren Fall verwendet werden OPERATOR-CONSOLE IS OUT-OP2 in special-names mit DISPLAY "RUN ERROR - NO DETAIL RECORDS, ABORTING" UPON OUT-OP2 und DISPLAY "REPORT TO OPERATIONS MANAGER" UPON OUT-OP2 und STOP RUN. in der Verfahrensabteilung. Ein Hinweis auf diesen Umstand müsste in jeden Job oder jedes Makro und jede Betriebsanleitung aufgenommen werden.