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