PDA

View Full Version : Nachrichtenwarteschlange bis zu einem bestimmten Datum löschen ?



Seiten : [1] 2

c.b.
18-09-08, 08:47
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

h_u_d
18-09-08, 10:32
go cleanup



Der von Ihnen eingegeben Text ist zu kurz.....

Fuerchau
18-09-08, 10:40
@hud
Es geht eben nicht um Benutzer/Workstation-MSGQ's.

Eigene MSGQ's müssen selber bereinigt werden.

c.b.
18-09-08, 10:48
.... und wo dort bitte wenn es sich weder um benutzer- noch um system- und datenstationsnachrichten handelt ?

KM
18-09-08, 11:25
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

Fuerchau
18-09-08, 12:16
@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.

c.b.
18-09-08, 12:37
@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

Pikachu
18-09-08, 13:29
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

c.b.
18-09-08, 13:35
..... habe ich mir zumindest die (grobe) tipperei gespart.


christian

c.b.
19-09-08, 06:44
..... 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