-
 Zitat von loeweadolf
Kann bei RPG evtl. auch der RPG-Name ermittelt werden ?
Das ist relativ einfach. Mit dem CL-Programm kannst Du Dich durch den kompletten Call-Stack hangeln. Einfach immer das ermittelte rufende Programm als aufgerufenes Programm übergeben. Das wird solange ausgeführt, bis Du den ersten Eintrag findest, der nicht mit Q anfängt. (Wenn Deine Programm-Namen allerdings mit Q anfangen hast Du verloren!)
Falls Du auch noch Modul und Prozedur ermitteln willst, musst Du die entsprechenden Informationen im SNDPGMMSG bei TOMSGQ angeben. Das rufende Modul wird im Sender ab Stelle 355 ausgegeben und die rufende Prozedur ab Stelle 375.
Alternativ kannst Du natürlich auch den CALL-Stack über das API QWVRCSTK (Retrieve Call Stack).
Birgitta
-
Wenn du eine Datei journalisierst, stehen Programm, User und Zeitmarke im Journal.
Ansonsten per RPG in der SDS den *USER-Eintrag oder per RTVJOBA den User abfragen.
Und was den Parameterstyle angeht:
Bei SQL werden noch NULL-Flag-Zeiger und eine Status-Area übergeben, bei General eben nur die Parameter.
-
Das CL habe ich erweitert um die Ermitteln des Users. Die Stored Procedure habe ich ergänzt um einen weiteren OUT-Parameter für ds obige CL für den User. Das klappt wohl.
 Zitat von Birgitta
Das ist relativ einfach. Mit dem CL-Programm kannst Du Dich durch den kompletten Call-Stack hangeln. Einfach immer das ermittelte rufende Programm als aufgerufenes Programm übergeben. Das wird solange ausgeführt, bis Du den ersten Eintrag findest, der nicht mit Q anfängt. (Wenn Deine Programm-Namen allerdings mit Q anfangen hast Du verloren!)
Ich habe das so verstannden, dass ich eine Schleife in das CL einbauen kann, die solange durchlaufen wird, bis der ermittelte Aufruf-Name nicht mehr mit -Q- anfängt.
Den Wert aus &CALLER bringe ich dann nach &CALLED und wiederhole das SNDPGMMSG.
Bei der ersten Wiederholung des SNDPGMMSG kommt allerdings folgende Fehlermeldung:
PHP-Code:
Job 060880/LUMU/LUMU_A im Subsystem QINTER in QSYS am 03.01.06 um 01:52:11 g Nachrichtenwarteschlange LUDGER ist anderem Job zugeordnet. CPF2469 von TRIWERCL bei 2600 empfangen. (C D I R) Weitere Nachrichteninformationen Nachrichten-ID . . . . : CPA0701 Bewertung . . . . . . : 99 Nachrichtenart . . . . : Anfrage Sendedatum . . . . . . : 03.01.06 Sendezeit . . . . . . : 01:53:26 Nachricht . . . : CPF2469 von TRIWERCL bei 2600 empfangen. (C D I R) Ursache . . . . . : Das CL-Programm TRIWERCL in Bibliothek MUHSTANPGM hat einen Fehler bei Anweisung 2600 erkannt. Der Nachrichtentext für CPF2469 ist: Fehler aufgetreten beim Senden der Nachricht ..
Was könnte die Ursache sein ?
-
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 ?!
-
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:
Code:
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 !
-
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
Similar Threads
-
By Jenne in forum NEWSboard Programmierung
Antworten: 0
Letzter Beitrag: 19-01-07, 09:24
-
By FNeurieser in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 11-10-06, 14:53
-
By bigmoon in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 14-09-06, 18:26
-
By loeweadolf in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 01-06-06, 09:43
-
By GHoffmann in forum IBM i Hauptforum
Antworten: 0
Letzter Beitrag: 07-07-05, 09:18
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks