View Full Version : Nachrichtenwarteschlange bis zu einem bestimmten Datum löschen ?
hallo,
gibt es eine möglichkeit nachrichten in einer msgq nur bis zu einem bestimmten datum zu löschen; nein, es handelt sich nicht um benutzermsgq's, das regeln wir über cleanup; es sind allg. msgq's ?
danke schonmal für die tipps
christian
go cleanup
Der von Ihnen eingegeben Text ist zu kurz.....
@hud
Es geht eben nicht um Benutzer/Workstation-MSGQ's.
Eigene MSGQ's müssen selber bereinigt werden.
.... und wo dort bitte wenn es sich weder um benutzer- noch um system- und datenstationsnachrichten handelt ?
Hallo,
würde es Dir evtl. nützen, wenn Du die MSGQ mit einer bestimmten Größe erstellst und den Parameter MSGQFULL auf *WRAP stellst ? Dann würden bei Erreichen einer bestimmten Größe alte Nachrichten automatisch gelöscht.
Gruß,
KM
@c.b.
Mit RCVMSG können Nachrichten entfernt werden.
In SENDER (F1-Hilfe) steht auch Datum/Zeit, so dass du wahlweise mit RMV(*NO) erst mal die Info liest und anschließend mit RMV(*YES) entfernst.
@fuerchau:
meine erste antwort war nicht auf dich bezogen sondern auf hud.
das mit dem rcvmsg hört sich interssant an; werde ich mal durchspielen.
@km:
man sollte doch häufiger f9/f10 betätigen und nicht immer alles mit standwerten machen; habe ich nicht gekannt *WRAP. problem ist aber dass man die größe/erweiterung nur bei neuen msgq's angeben kann; oder habe ich da auch was übersehen ?
danke auf alle fälle
christian
Vielleicht so, aber Angaben ohne Gewähr!
PGM
DCL VAR(&MSGQ) TYPE(*CHAR) LEN(10)
DCL VAR(&MSGQLIB) TYPE(*CHAR) LEN(10)
DCL VAR(&KEYVAR) TYPE(*CHAR) LEN(4)
DCL VAR(&SENDER) TYPE(*CHAR) LEN(80)
DCL VAR(&DATTIM) TYPE(*CHAR) LEN(13)
DCL VAR(&DATE) TYPE(*CHAR) LEN(7)
MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ENDPGM))
CHGVAR VAR(&MSGQ) VALUE(QSYSOPR)
CHGVAR VAR(&MSGQLIB) VALUE(*LIBL)
CHGVAR VAR(&DATE) VALUE('1080918') /*CYYMMTT*/
LOOP: RCVMSG MSGQ(&MSGQLIB/&MSGQ) MSGTYPE(*FIRST) +
RMV(*NO) KEYVAR(&KEYVAR) SENDER(&SENDER) +
SENDERFMT(*SHORT)
CHGVAR VAR(&DATTIM) VALUE(%SST(&SENDER 43 13))
IF COND(&DATTIM *GE &DATE *OR +
&DATTIM *EQ ' ') THEN(GOTO CMDLBL(ENDPGM))
RMVMSG MSGQ(&MSGQLIB/&MSGQ) MSGKEY(&KEYVAR) +
CLEAR(*BYKEY)
GOTO CMDLBL(LOOP)
ENDPGM: ENDPGM
..... habe ich mir zumindest die (grobe) tipperei gespart.
christian
..... was bewirkt eigentlich die MONMSG am anfang vom programm und wo genau muss diese sitzen (direkt nach den DCL) ?
ich gehe mal davon aus, dass damit alle auftretenden fehler im programm abgefangen werden, oder; und bedeutet das wirklich dass, auch wenn der fehler viel weiter hinten auftritt, der "goto" ausgeführt wird ?
haben wir bisher nicht gekannt; kann ja aber auch fatale folgen haben; wir fragen lieber nach jedem befehl explzit ab um entsprechend reagieren (sndmsg, goto, .....) zu können.
gruß
christian