PDA

View Full Version : QMHSNDPM



roko
25-02-03, 10:49
hallo,
ich zeige die fehlernachrichten mittels msgsfl an und bis jetzt habe ich mit einem cl unter verwendung von sndpgmmsg die nachrichten in die programm-msgq gesendet un es hat super funktioniert. wenn ich das allerdings mit qmhsndpm probiere,haut's nicht hin. woran kann es liegen? hat das jemand in verwendung?
vielen dank
rk

Bruno Jakob
26-02-03, 07:05
Hallo Roko,

hast du überprüft, ob die Parameter

Message Type
Program message queue
Program stack counter

richtig gefüllt sind?

Gruß
Bruno

roko
26-02-03, 07:43
vielen dank bruno,
ich bin zwar bereits gestern darauf gekommen, dass ich irrtümlicherweise msg-type *status verwende (ob wohl ich im meinem alten cl-programm bei sndpgmmsg *diag verwendet habe)

zu beachten bei qpmsndpm & qpmrcvpm sind die zwei parameter Call Stack Entry und Call Stack counter - es ist nicht so logisch und einfach wie bei rcvmsg und sndpgmmsg.
noch mal vielen dank
mfg roko

tarkusch
21-01-17, 22:01
Hallo,

ich hätte vor in ein Programm, das im Batch läuft, diverse Dateioperationen mittels Sql abzulösen.
Im Programm wird ja bei einem Write, bei einem doppelten Schlüssel, eine Nachricht an den Sysopr geschickt.

Ich hätte nun versucht beim Insert den Sqlstate abzufragen und mit Hilfe der API QMHSNDPM eine Msg zu schicken.

Ich bekomme aber keine Nachricht auf den SYSOPR.



Der Aufruf an *LIBL/QMHSNDPM wurde fehlerhaft beendet (C G D F).
SBMJOB CMD(CALL PGM(EDAVJS235R) PARM(' '))


DQMHSNDPM PR ExtPgm('QMHSNDPM')
D MsgID 7A Const
D MsgFile 20A Const
D MsgData 256A Const
D MsgDtaLen 10I 0 Const
D MsgType 10A Const
D StackEntry 10A Const
D StackCount 10I 0 Const
D MsgKey 4A Const
D ErrorCode 16A Const
D
D$MsgId S 10A Inz('CPF9898 ')
D$MsgFile S 20A Inz('QCPFMSG QSYS ')
D$MsgDta S 80A Inz
D$MsgDtaLen S 10I 0 Inz
D
D ErrorCode ds
D BytesProv 10I 0 inz(0)
D BytesAvail 10I 0






$MsgDta = 'SQL ERROR: '
+ %trimr(SDSPGM)
+ ' Fehler beim Import aufgetreten';

QMHSNDPM( $MsgId
: $MsgFile
: $MsgDta
: %len( %trimr($MsgDta))
: '*ESCAPE'
: '*'
: 2
: *blanks
: ErrorCode );


Das Programm hat einen *ENTRY Parameter.
Was mache ich falsch?

Kann ich eleganter eine exception auf den Sysopr werfen?

Dank im Voraus

Tarki

Fuerchau
22-01-17, 17:09
Warum postest du deine Frage mehrfach?
Der CALL-Stack "*" sendet eine Nachricht an dich selber.
Du musst da als Ziel denn doch eine höhere Ebene angeben.
Außerdem wird nicht automatisch auch an QSYSOPR gesendet, das macht ggf. das Empfänger-Programm mit einem SNDMSG (ggf. mit Antwort) statt SNDPGMMSG.

Wenn ich im CLP einen MONMSG verwende, erwarte ich ja auch eine Abbruchnachricht an mein Programm und nicht erst an eine MSGQ. Dies ist dann eher unüblich.

tarkusch
23-01-17, 07:29
Morgen,

Verzeihung den doppelten Post, dachte mir beim Forum Programmierung trifft das eher zu.

Danke für die Antwort.