PDA

View Full Version : sndpgmmsg als API



Robi
29-11-04, 13:24
Hi *all
Wir machen per CLP ein sbmrmtcmt auf ein CLP, das ein sndpgmmsg *escape macht.

SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) MSGDTA('Test') TOPGMQ(*PRV) MSGTYPE(*ESCAPE)

Diese CPF kann vom Rufenden System abgefragt und somit beachtet werden.

Anstatt eines CLP Programms will ich aber ein RPG rufen.
Alle versuche mit dem API QMHSNDPM die CPFMSG an den remoten Job zu bekommen schlugen bisher fehl.

Wer kann helfen?

C EVAL QMHMSGID = 'CPF9898'
C EVAL %SUBST(QMHMSGF:1:10) = 'MI_MSGMS '
C EVAL QMHMSGDTA = ##DATA
C EVAL QMHMSGLEN = %LEN(%TRIM(QMHMSGDTA))
C EVAL QMHMSGTYP = '*ESCAPE'
C EVAL QMHMSGENT = '*'
C EVAL QMHMSGCTR = 0
C CLEAR QUSEC
C CALL(E) 'QMHSNDPM'
* ==== ============
C PARM QMHMSGID
C PARM QMHMSGF
C PARM QMHMSGDTA
C PARM QMHMSGLEN
C PARM QMHMSGTYP
C PARM QMHMSGENT
C PARM QMHMSGCTR
C PARM QMHMSGKEY
C PARM QUSEC
*

Gruß Robi

BenderD
29-11-04, 13:40
Hallo Robi,

wenn ich das so mit bloßem Auge sehe, müsste statt an * 0 (MSGENT MSGCNTR) an *PGMBNDY 1 gesendet werden. Ich habe da auch ein Beispiel (CRTCPP) auf meiner Open Source Seite.

mfg

Dieter Bender


Hi *all
Wir machen per CLP ein sbmrmtcmt auf ein CLP, das ein sndpgmmsg *escape macht.

SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) MSGDTA('Test') TOPGMQ(*PRV) MSGTYPE(*ESCAPE)

Diese CPF kann vom Rufenden System abgefragt und somit beachtet werden.

Anstatt eines CLP Programms will ich aber ein RPG rufen.
Alle versuche mit dem API QMHSNDPM die CPFMSG an den remoten Job zu bekommen schlugen bisher fehl.

Wer kann helfen?

C EVAL QMHMSGID = 'CPF9898'
C EVAL %SUBST(QMHMSGF:1:10) = 'MI_MSGMS '
C EVAL QMHMSGDTA = ##DATA
C EVAL QMHMSGLEN = %LEN(%TRIM(QMHMSGDTA))
C EVAL QMHMSGTYP = '*ESCAPE'
C EVAL QMHMSGENT = '*'
C EVAL QMHMSGCTR = 0
C CLEAR QUSEC
C CALL(E) 'QMHSNDPM'
* ==== ============
C PARM QMHMSGID
C PARM QMHMSGF
C PARM QMHMSGDTA
C PARM QMHMSGLEN
C PARM QMHMSGTYP
C PARM QMHMSGENT
C PARM QMHMSGCTR
C PARM QMHMSGKEY
C PARM QUSEC
*

Gruß Robi

B.Hauser
29-11-04, 13:40
Hallo Robi,

versuch's mal mit call stack counter 1. (QMHMSGCTR = 1)
Wenn Du den Call Stack Counter auf 0 lässt, wird die Meldung an das rufende Programm geschickt.
Die 1 bewirkt, dass die Meldung an das im Call Stack vorgelagerte Programm (oder Prozedur) geschickt wird.

Birgitta

Robi
14-12-04, 10:01
Vielen dank für eure Antworten,
wir haben nun folgende Lösung

AS400_1 :
----------
CLLE PGM
__pgmstack holen
__sbmrmtcmd call callprog parm(..., ..., Pgmstack)

AS400_2 :
----------
RPGPGM callprog
__ruft CLLEPGM callprog1
________________stellt Fehler fest und sendet per
________________sndpgmmsg eine *excape msg
__ruft API wie unten

AS400_1 :
----------
wertet per monmsg die fehlermeldung aus

Callprog muß zwingend gerufen werden, da das die Libblist setzt.

C EVAL QMHMSGID = 'CPF9898'
C EVAL %SUBST(QMHMSGF:1:10) = 'MI_MSGMS '
C EVAL QMHMSGDTA = %substr(##DATA:4)
C EVAL QMHMSGLEN = %LEN(%TRIM(QMHMSGDTA))
C EVAL QMHMSGTYP = '*ESCAPE'
C EVAL QMHMSGENT = '*'
C EVAL QMHMSGCTR = PStackCtr
C CLEAR QUSEC
C CALL(E) 'QMHSNDPM'
* ==== ============
C PARM QMHMSGID
C PARM QMHMSGF
C PARM QMHMSGDTA
C PARM QMHMSGLEN
C PARM QMHMSGTYP
C PARM QMHMSGENT
C PARM QMHMSGCTR
C PARM QMHMSGKEY
C PARM QUSEC
*
Robi