View Full Version : SQL-Trigger
Du kannst deinen Triger auch ganz normal debuggen (mittels STRDBG und Umwandlungsoption) um den Inhalt deiner Variablen anzusehen.
Irgendwie kommst du auf die MSGQ LUDGER und nicht auf die Job-MSGQ !
Ggf. zerstörst du die die Variablen mit dem User-Namen ?!
loeweadolf
04-01-06, 11:09
Es wird jetzt die JOB-MSGQ verwendet.
Da immer noch derselbe Fehler kam, habe ich die Schleife
aus dem CL rausgenommen und als Schleife jeweils ein 2. CL
aufgerufen, um den Namen zu ermittel, jeweils mit Übergabe
des zuluetzt ermitteln "CALLER"
Immer derselbe Fehler, auch ein DUMP bringt mich nicht weiter.
Vielleicht fehlen mir auch die kenntnisse bzgl. Nachrichtenschlangen.
Da ich mich jetzt anderen Dingen widmen muss, gebe ich zunächst mal auf.
mfg. Ludger
Vielleicht hilft dir ja folgendes CLP ein wenig:
PGM PARM(&START &PROG)
DCL VAR(&START) TYPE(*CHAR) LEN(10)
DCL VAR(&PROG) TYPE(*CHAR) LEN(10)
/* API-FELDER */
DCL VAR(&RCV) TYPE(*CHAR) LEN(9999)
DCL VAR(&RCVLEN) TYPE(*CHAR) LEN(4)
DCL VAR(&RCVFMT) TYPE(*CHAR) LEN(8) VALUE(CSTK0100)
DCL VAR(&JOBID) TYPE(*CHAR) LEN(56)
DCL VAR(&JOBFMT) TYPE(*CHAR) LEN(8) VALUE(JIDF0100)
DCL VAR(&ERRCD) TYPE(*CHAR) LEN(128)
/* ARBEITSFELDER */
DCL VAR(&NOCENT) TYPE(*DEC) LEN(9)
DCL VAR(&OFFSET) TYPE(*DEC) LEN(9)
DCL VAR(&ENTRY) TYPE(*DEC) LEN(9)
DCL VAR(&ENTLEN) TYPE(*DEC) LEN(9)
DCL VAR(&POS) TYPE(*DEC) LEN(9)
DCL VAR(&PGM) TYPE(*CHAR) LEN(10)
DCL VAR(&LIB) TYPE(*CHAR) LEN(10)
/* INIT'S */
CHGVAR VAR(%BIN(&RCVLEN)) VALUE(9999)
CHGVAR VAR(%BIN(&ERRCD 1 4)) VALUE(128)
CHGVAR VAR(%BIN(&ERRCD 5 4)) VALUE(0)
CHGVAR VAR(%SST(&JOBID 1 10)) VALUE('*')
CHGVAR VAR(%SST(&JOBID 43 2)) VALUE(X'0000')
CHGVAR VAR(%BIN(&JOBID 45 4)) VALUE(1)
CHGVAR VAR(%SST(&JOBID 49 8)) +
VALUE(X'0000000000000000')
/* AUFRUF */
CALL PGM(QWVRCSTK) PARM(&RCV &RCVLEN &RCVFMT +
&JOBID &JOBFMT &ERRCD)
IF COND(%BIN(&ERRCD 5 4) > 0) THEN(DO)
SNDPGMMSG MSGID(%SST(&ERRCD 9 7)) MSGF(QCPFMSG) +
MSGDTA(%SST(&ERRCD 17 112)) TOPGMQ(*PRV) +
MSGTYPE(*ESCAPE)
ENDDO
/* ALLES OK */
CHGVAR VAR(&NOCENT) VALUE(%BIN(&RCV 17 4))
CHGVAR VAR(&OFFSET) VALUE(%BIN(&RCV 13 4) + 1)
/* SCHLEIFE ÜBER EINTRÄGE */
STACK:
CHGVAR VAR(&NOCENT) VALUE(&NOCENT - 1)
IF COND(&NOCENT >= 0) THEN(DO)
CHGVAR VAR(&ENTLEN) VALUE(%BIN(&RCV &OFFSET 4))
CHGVAR VAR(&POS) VALUE(&OFFSET + 24)
CHGVAR VAR(&PGM) VALUE(%SST(&RCV &POS 10))
CHGVAR VAR(&POS) VALUE(&POS + 10)
CHGVAR VAR(&LIB) VALUE(%SST(&RCV &POS 10))
/* TESTAUSGABE */
SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&PGM +
*CAT &LIB) TOPGMQ(*PRV) MSGTYPE(*INFO)
CHGVAR VAR(&OFFSET) VALUE(&OFFSET + &ENTLEN)
GOTO CMDLBL(STACK)
ENDDO
ENDPGM
Anstelle der Testausgabe kannst du ja PROG und LIB entsprechend auswerten und abfragen.
Zu beachten ist lediglich, dass der 1. Stackeintrag das eigene Programm ist !
loeweadolf
07-01-06, 20:00
Hallo Baldur, das CL hat mir sehr geholfen.
Jetzt konnte ich gut die Reihenfolge der Aufruf-Programme erkennen.
Nach entspr. Modifikation habe ich das CL jetzt eingesetzt.
Danke für de Unterstützung. Ludger