PDA

View Full Version : RPGLE Programm bewust "abstürtzen lassen"



Xanas
03-05-07, 09:03
Hallo,

gibt es eine Möglichkeit, ein Programm bewust "abstürtzen" zu lassen?

Hintergrund ist, dass ich in sehen möchte ob das Programm, wenn es per SBMJOB übergben wird auch abnormal beendet wurde. Ich hab das mal über ein CL, das dann ein SNDPGMMSG *ESCAPE aufruft probiert, dann muss ich allerdings eine Nachricht eingeben. Finde ich aber auch nicht so glücklich, kann man dem Programm nicht einfach ein Status setzen bevor es beendet wird.

Gruß
Xanas

BenderD
03-05-07, 09:39
Hallo,

wer ist schon glücklich, SNDPGMMSG oder QMHSNDPM ist der AS400 typische Weg, als Message kann man da die CPF9898 verwenden, der kann man einen Text mitgeben.
Der C Weg mit Rückgabe eines Return Codes beim Aufruf von exit() müsste in ILE auch verwendbar sein, ebenfalls abort(), dafür ist allerdings RPG besser geeignet und man muss sich den passenden Prototyp schreiben (oder MR.Google fragen, oder gleich bei Thomas Raddatz auf Tools400 nachsehen). Wenn da noch ein CL drumherum ist, dann darf da kein MONMSG ziehen, dann rattert der Fehler durch. Ganz abgebrühte dividieren durch 0, oder rufen das Programm gibdednet auf, das funzt auch, aber macht mich wiederum nicht glücklich.

mfg

Dieter Bender


Hallo,

gibt es eine Möglichkeit, ein Programm bewust "abstürtzen" zu lassen?

Hintergrund ist, dass ich in sehen möchte ob das Programm, wenn es per SBMJOB übergben wird auch abnormal beendet wurde. Ich hab das mal über ein CL, das dann ein SNDPGMMSG *ESCAPE aufruft probiert, dann muss ich allerdings eine Nachricht eingeben. Finde ich aber auch nicht so glücklich, kann man dem Programm nicht einfach ein Status setzen bevor es beendet wird.

Gruß
Xanas

Fuerchau
03-05-07, 10:00
Aus (ILE)RPG hilft ggf. nur das API QMHSNDPM.
Dabei ist die korrekte Aufrufebene zu berücksichtigen.

Aber es gibt da noch eine seltenere Funktion:


Halt Indicators (H1-H9)

You can use the halt indicators (H1 through H9) to indicate errors that occur
during the running of a program. The halt indicators can be set on as record
identifying indicators, field indicators, or resulting indicators.
The halt indicators are tested at the *GETIN step of the RPG IV cycle (see
Chapter 3, “Program Cycle” on page 21). If a halt indicator is on, a message is
issued to the user. The following responses are valid:

v Set off the halt indicator and continue the program.

v Issue a dump and end the program.

v End the program with no dump.
If a halt indicator is on when a RETURN operation inside a main procedure is
processed, or when the LR indicator is on, the called program ends abnormally.
The calling program is informed that the called program ended with a halt
indicator on.

Note: If the keyword NOMAIN is specified on a control specification, then any
halt indicators are ignored except as conditioning indicators.

Damit nicht auf Antwort gewartet werden muss, sollte der Job per CHGJOB INQMSGRPY(*DFT/*SYSRPYLE) geändert sein.

harkne
03-05-07, 12:15
Also wenn ich ein Programm abstürzen lassen will mach ich einfach eine Division durch 0

sebschm
25-05-07, 12:04
Also wenn ich ein Programm abstürzen lassen will mach ich einfach eine Division durch 0

Es soll auch Leute geben, die gegen den Baum fahren, wenn sie bremsen wollen. Die Variante mit *INHx hat den Vorteil, daß man so gleich sehen kann, welcher Haltanzeiger gesetzt wurde und dann gleich weiß, wieso das Programm stehenblieb (vorausgesetzt, man nimmt H1 für den einen Fehler, H2 für den anderen, etc.).
Die Methode mit den Nachrichten ist zweifellos die eleganteste. Leider läßt sich QMHSNDPM ein bißchen hakelig bedienen, da kann aber auch selber eine kleine Prozedur schreiben. Vorteil davon wäre, daß man sein RPG-Programm aus einem CL aufrufen kann und dann wie gewohnt mit MONMSG rangehen...

harkne
01-06-07, 09:36
Ich möche mich hier nicht in eine Diskussion reinsteigern, aber wenn ich die Sicherheit des Autos testen will muß es an den Baum ;)