PDA

View Full Version : MSG vom Drucker



Seiten : [1] 2 3

mkasmika
31-03-04, 09:36
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, 13: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

Fuerchau
31-03-04, 14:35
Mittels RCVMSG ... MSGKEY(&KEYVAR) kann die Nachricht abgefragt werden.
Mittels SNDRPY kann bezogen auf den Schlüssel die Antwort gesendet werden.

mkasmika
31-03-04, 15:17
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, 15:47
Parameter RMV (Nachricht entfernen) auf *NO setzen. *YES geht nur, wenn die MSGQ exclusiv zugeordnet werden kann.

Gruß
Bruno

mkasmika
31-03-04, 15:53
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, 08: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

mkasmika
01-04-04, 09:31
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, 09: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

mkasmika
01-04-04, 10:27
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