Return to the CL Tips
What program triggered the trigger? / Call stack
Here it goes, This is a low tech solution and can be made into Procedures using Message API's if you want to make it real fancy. But as is, it will also work for the average
Joe/Jane programmer too.
For trigger's
In your *INZSR subroutine repeatedly call a CLP to retrieve the program name of the caller. You can "walk up the Stack" past the programs(OS/400's
that begin with "Q") to the program you're looking for.
Just call the below program repeatedly(in a loop in your *INZSR), First time pass your trigger program name(the program who's *inzsr you are currently in that is) as the
&CALLED, and who ever called your trigger will be returned in the &CALLER variable. This will undoubtedly be a "Q" OS/400 program. Call the CLP again this time pass what was
returned the first time to find out who called him, and so on. up the stack till *EXT.
Stop at the first program name(&CALLER) doesn't begin with a "Q". That's the application program that kicked off the trigger.
PGM &CALLER &CALLED DCL &CALLER *CHAR 10 DCL &CALLED *CHAR 10 DCL &M1KEY *CHAR 4 DCL &M1MDTA *CHAR 80 SNDPGMMSG MSG('TEST') TOPGMQ(*PRV &CALLED) MSGTYPE(*RQS) KEYVAR(&M1KEY) RCVMSG PGMQ(*PRV &CALLED) MSGKEY(&M1KEY) SENDER(&M1MDTA) CHGVAR &CALLER %SST(&M1MDTA 56 10) ENDPGM
So, Just call it with a program name(&CALLED) and it will tell you who called that program(&CALLER), next time pass it what was returned the previous time to find out who called him, and so on up the stack. Look at the name returned (&CALLER) if the first position of the name is a "Q" it's an OS/400 program. (Unless you are, hmm shall we we say, Dumb enough to start your program names with the letter Q ?)
[report a broken link by clicking here]