Anmelden

View Full Version : MONMSG: Inhalt abfragen



JoergHamacher
03-02-16, 09:06
Hallo,

wir haben in zahlreichen CL-Programmen MONMSG-Abfragen, unter anderem fragen wir CPF3773 ab (&1 Objekte zurückgespeichert. &2 nicht in &4 zurückgespeichert).
Gibt es eine Möglichkeit, hier (und in diversen ähnlichen CPF-MONMSG-Konstrukten) eine inhaltliche Prüfung durchzuführen - z.B. um zu prüfen, ob es tatsächlich Objekte gibt, die nicht zurückgespeichert wurden?
Momentan laufen die Programme auch in die Fehlerroutine MONMSG MSGID(CPF3773), wenn die Meldung lautet:
"14 Objekte zurückgespeichert, 0 nicht in Biblitohek zurückgespeichert".

Vielen Dank im Voraus,
Jörg Hamacher

AG1965_2
03-02-16, 09:28
Natürlich; man kann mit RCVMSG die Nachricht empfangen und somit auch die Nachrichtendaten. Bei CPF3773 interessiert Dich &2, das ist eine 4 Byte lange Zahl, ab Stelle 5 in den Nachrichtendaten. Wenn Dich die Zahl selber nicht interessiert, kann man die 4 Bytes auch mit der Zeichenfolge x'00000000' vergleichen.


DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(512)
DCL VAR(&HEX004) TYPE(*CHAR) LEN(4) VALUE(X'00000000')
...
MONMSG MSGID(CPF3773) EXEC(DO)
RCVMSG MSGQ(*PGMQ) MSGTYPE(*LAST) RMV(*NO) +
MSGDTA(&MSGDTA)
IF COND(%SST(&MSGDTA 5 4) *NE &HEX004) THEN(DO)
/* Hier ist klar, dass mind. 1 Objekt nicht zurückgespeichert wurde. */
ENDDO
ENDDO

Pikachu
03-02-16, 09:49
Mit DSPMSGD CPF3773 sieht man die Nachrichtendetails und unter "Felddaten anzeigen" sieht man weitere Informationen zu den einzelnen Feldern der Nachricht.

Fuerchau
03-02-16, 11:07
Statt Hex kann man auch %bin(%sst(&msgdta 5 4)) verwenden.

B.Hauser
03-02-16, 11:47
Statt Hex kann man auch %bin(%sst(&msgdta 5 4)) verwenden.
... Und mit %INT() oder %UINT() kann man gleich den Integer-Wert ermitteln.

Birgitta