View Full Version : MSG vom Drucker
Hallo *all,
da jetzt alles neu ist versuche ich es nochmal:
Ich arbeite gerade an einer Anwendung die den Befehl
WRKSPLF ersetzten soll.
Dabei habe ich folgendes Problem :
Wenn im WRKSPLF eine Liste auf MSGW steht kann man mit der Auswahl 7 die Nachricht sehen und beantworten.
Genau diese Funktionalität möchte ich in meinem Programm nachbauen.
Ich habe über die API's die Infos
SPLFNAME,JOB,USER;JOBNR,SPLFNR und über das API QSPRWTR den Druckernamen, Jobnamen etc. u.a. auch ein Feld MSGKEY. Das Feld ist lt.Doku 4 A definiert. Der Inhalt scheint aber binär zu sein.
Hat jemand eine Idee wie ich per Programm an die
Druckernachricht komme und wie man diese per Programm beantworten kann ?
Danke an alle
Gruss Michael
Bruno Jakob
31-03-04, 12:46
Im CL-Befehl RCVMSG bzw. im API QMHRCVM kann man mit dem Feld MSGKEY was anfangen.
Und zum Beantworten ist API QMHSNDRM das richtige Werkzeug.
Gruß
Bruno
Mittels RCVMSG ... MSGKEY(&KEYVAR) kann die Nachricht abgefragt werden.
Mittels SNDRPY kann bezogen auf den Schlüssel die Antwort gesendet werden.
Hallo,
danke für die Info's.
Ich bin auch jetzt ein Stückchen weitergekommen.
Ich bekomme mit dem MSG Key die CPF Nachricht.
Da bei dem Drucker allerdings die MSQ QSYSOPR
eingetragen ist und der QSYSOPR angemeldet ist
schlägt mein RCVMSG mit folgender Meldung fehl.
Nachrichtenwarteschlange QSYSOPR ist anderem Job zugeordnet.
Habt Ihr noch andere Ideen ?
Danke und Gruss Michael
Bruno Jakob
31-03-04, 14:47
Parameter RMV (Nachricht entfernen) auf *NO setzen. *YES geht nur, wenn die MSGQ exclusiv zugeordnet werden kann.
Gruß
Bruno
Hallo Bruno,
RCVMSG MSGQ(QSYS/QSYSOPR) MSGTYPE(*ANY) MSGKEY(X'0000BA30') RMV(*NO) MSG(&MSG) MSGLEN(&MSGLEN) MSGDTA(&MSGDTA) MSGDTALEN(&MSGDTALEN)
MSGID(&MSGID)
Nachrichtenwarteschlange QSYSOPR ist anderem Job zugeordnet.
Der Parameter RMV ist auf (*NO) eingestellt.
Irgendwie will es nicht klappen.
Noch eine Idee ?
Gruss Michael
Bruno Jakob
01-04-04, 07:34
Hallo Michael,
sorry, Fehler von mir. Parameter RMV(*KEEPEXCP) ist besser. Damit bleibt die Nachricht als neue Nachricht stehen. Und das muss so sein, wenn die MSGQ einem anderen Job zugeordnet ist.
Gruß
Bruno
Hallo Bruno,
das war es leider auch nicht. Auch mit dem Parameter
bekomme ich die Meldung:
Nachrichtenwarteschlange QSYSOPR ist anderem Job zugeordnet.
Es liegt daran das der User QSYSOPR die MSGQ QSYSOPR
exclusiv ( Breakmodus ) zugeordnet hat.
Bei dem WRKSPLF kann man allerdings auch wenn die QSYSOPR
MSGQ jemandem zugeordnet ist die Nachricht ganz normal
sehen und beantworten.
Irgendwie muss es doch einen Trick geben
diese Funktionalität zu programieren.
der verzweifelte
Michael
Bruno Jakob
01-04-04, 08:50
Hallo Michael,
wie das mit dem Breakmodus ist, weiss ich nicht. Bei uns ist die QSYSOPR-MSGQ von einem Batch-Job gesperrt:
QSYSOPR QSYSOPR *EXCL HELD *THREAD 00000001
Folgende REXX-Procedur liest dann von einem interakt. Job die letzten paar Nachrichten aus der MSGQ aus. Habe die Procedur auch getestet und geht:
mkey = d2c(0,4)
text1 = copies(" ",50)
"RCVMSG MSGQ(QSYSOPR) MSGTYPE(*last) RMV(*KEEPEXCP)",
"MSG(&TEXT1) SECLVL(&TEXT2) MSGDTA(&DATEN)",
"MSGID(&MSGID)"
SAY msgid text1
do 5
"RCVMSG MSGTYPE(*PRV) MSGKEY(&MKEY) RMV(*KEEPEXCP) KEYVAR(&MKEY)",
"MSG(&TEXT1) SECLVL(&TEXT2) MSGDTA(&DATEN)",
"MSGID(&MSGID) msgq(Qsysopr)"
SAY msgid text1
end
exit
Vergleiche doch mal Dein RCVMSG mit meinem oder probiere die REXX-Procedur auch mal aus.
Gruß
Bruno
Hi Bruno,
ich habe deine Prozedur mal ausprobiert.
Wenn man die MSGQ bei einem Bildschirmjob auf break
stellt bringt deine Prozedur nur einen Screen mit dem Text
Die Eingabetaste drücken, um die Terminalsitzung zu beenden.
Damit ist zumindest klar das die REXX Prozedur auch die Daten
nicht erhält.
( Ist zwar schön zu wissen...... nur nützt mir das nichts )
Ich will es einfach nicht glauben das eine simple Sache
wie ( Auswahl 7 WRKSPLF ) auch per Programm zu lösen ist.
Das muss doch irgendwie gehen ............
Sind noch Vorschläge da ?
gruss Michael