Page 1 sur 1
Trigger
Posté : ven. 11 mai 2007, 16:51:36
par cimmelé
Bonjour,

J'aimerais pouvoir retrouver dans un programme RPG utilisé comme trigger, le nom du programme ayant effectué la transaction BD et déclenché l'appel au trigger...
Est ce que cette possibilité existe ?
Merci
retrouver le nom du pgm
Posté : lun. 21 mai 2007, 08:01:15
par cmasse
la technique est la suivante, envoyer un message au pgm en indiquant un niveau dans la liste d'invocation et récupérer le nom de celui qui l'a recu.
API QMHSNDPM = SNDPGMMSG en CL, QMHRCVPM = RCVMSG en CL.
dans le cas d'un trigger il faut ajouter 1 (donc 3 et non 2 dans STACK) afin de tenir compte de DB2 qui a lui même lancé le trigger.
Code : Tout sélectionner
H nomain
* prototype de la fonction
*
/copy prototypes,quiappel
* corps de la fonction
Pquiappel B export
D PI 10
D niveau 10I 0 const
* variables locales
Dbinaire S 10I 0
DLENTXT S like(binaire)
DSTACK S like(binaire)
DKEY S like(binaire)
DATTENTE S like(binaire)
DCODERR DS
D LGCOD like(binaire) INZ(16)
D LGUTIL like(binaire)
D MSGID 7
D RESERV 1
*
* on envoi un message au programme au-dessus (stack=empilement)
* et on le relit.
* (dans les infos retournées il y a le nom du pgm en 111)
*
* on rajoute 2 pour tenir compte de la place occupée par le pgm
* utilisant lui même la fonction ET de la place du PEP (entry point)
c eval stack = niveau + 2
C CALL 'QMHSNDPM'
C PARM ID 7
C PARM MSGFL 20
C PARM 'peu importe' MSGTXT 10
C PARM 10 LENTXT
C PARM '*INFO ' MSGTYP 10
C PARM '*' PGMQ 10
C PARM STACK
C PARM KEY
C PARM CODERR
C CALL 'QMHRCVPM'
C PARM retour 120
C PARM 120 lentxt
C PARM 'RCVM0200' format 8
C PARM '*' PGMQ 10
C PARM STACK
C PARM '*ANY' MSGTYP
C PARM KEY
C PARM 0 ATTENTE
C PARM '*REMOVE' ACTION 10
C PARM CODERR
c return %subst(retour:111:10)
Pquiappel E