PDA

View Full Version : QMHRCVPM in *SRVPGM



dabeda
10-07-09, 10:55
Hallo!

Hab ein Problem mit der ProgramMsgQ.

Wenn ich in einem Serviceprogramm ein Chain mache und dort auf einen Lock auflaufe, möchte ich diese Nachricht mit QMHRCVPM, welches in einem anderen Serviceprogramm läuft, empfangen und dann an das aufrufende Programm schicken. Ich bekomm aber keine Nachricht. :-( Im Joblog steht genau was ich will. Habs mit CallStack '*' verucht, mit dem Programmnamen usw. aber immer ohne Erfolg.
Was mach ich bitte falsch??

Lg Peter

Fuerchau
10-07-09, 11:08
Du kannst nur Nachrichten der aktiven und übergeordneten Programmebenen abrufen.
Ein Abrufen von inaktiven Programmebenen ist nicht möglich.

Also muss dein Service-Programm, dass den Lock empfängt auch die Nachricht lesen bzw. selber dein Service-Programm aufrufen, dass die Nachricht ausliest.

Beispiel:

PGMA -> CALL PGMB
PGMB -> CALL PGMC
PGMC -> Nachrichten von PGMC, PGMB, PGMA

Was nicht geht:

PGMA -> CALL PGMB
PGMB -> CALL PGMD (return) -> CALL PGMC
PGMC -> Nachrichten von PGMC, PGMB, PGMA

Nachrichten von PGMD sind nicht erreichbar, da es nicht im Callstack ist.

Hier musst du die Joblog-API's bemühen, um das Joblog auszulesen.

dabeda
10-07-09, 11:42
Ja so mach ich das auch.
PGMA ruft PGMB in dem das Chain passiert, dieses ruft PGMC das die PgmMsgQ auslesen soll.
Wenn ich den Namen von PGMB übergebe, wird diese Eintrag im Callstack nicht gefunden. Ich seh ihn aber im Joblog. Mach ich eine 1 im CallstackCounter bringts auch nix.

Kann das sooo schwer sein?

Lg Peter

Fuerchau
10-07-09, 11:52
Da hilft nur der Debugger um im Programm an der Stelle anzuhalten und den Callstack zu betrachten.
Manchmal sind da noch Callebenen dazwischen.

dabeda
10-07-09, 12:10
So, jetzt hab ich den Fehler!

Durch das faule Kopieren der Sourcen hab ich übersehen das die Aktivierungsgruppe nicht die selbe war. :o

Jetzt gehts ...