On 12/08/2008, at 1:45 AM, Lim Hock-Chai wrote:
I've always assumed each program/service program on the call stack has
its own program message queue. I guess I'm wrong on the service
program
part.
OPM: Only things in the call stack are *PGM objects. Send a message
to a program name and things work as expected.
ILE: Call stack is no-longer *PGM based but procedure-based. Each
procedure gets a call stack entry. Notice that parameter 6 for
QMHSNDPM says "You can specify a call stack entry by providing the
name of the OPM program or ILE procedure running in the entry".
You may encounter the same problem (of no call stack entry) when
using ILE *PGM objects. You're probably not getting this error more
by luck than design. If the entry module of your ILE *PGM is the same
name as the *PGM then things will appear to work as you expect but
it's not quite the same as sending the message to an OPM program.
That's because the call stack entry for OPM **IS** the name of the
program. However for ILE it is the name of the procedure. For RPG IV
that can result in a number of call-stack entries:
1) The entry point program message queue of an RPGLE program is
_QRNP_PEP_ concatenated with the entry module name thus to
successfully send a message to (or relative to) an ILE RPG program
named FRED with an entry module named NURK you must specify the To
program queue as '_QRNP_PEP_NURK' if you want the same target level
as you would get in OPM.
2) The entry module message queue is the same name as the entry
module. In the above example it is NURK.
3) Various program message queues for each procedure invoked by the
program.
Thus the call stack for an ILE RPG program named FRED may look like:
QUOCMD (where CALL FRED was processed)
_QRNP_PEP_NURK (derived program entry point)
NURK (main module)
DO_STUFF (procedure in *PGM or *SRVPGM)
DO_MORE_STUFF
ETC
In your case you are probably sending the message to 1 call stack
level below where you think you are sending it. Whether that causes a
problem for you is difficult to say. I know in my interactive program
code I always send messages to the derived entry-point name to get
similar message handling behaviour to OPM.
Regards,
Simon Coulter.
--------------------------------------------------------------------
FlyByNight Software OS/400, i5/OS Technical Specialists
http://www.flybynight.com.au/
Phone: +61 2 6657 8251 Mobile: +61 0411 091 400 /"\
Fax: +61 2 6657 8251 \ /
X
ASCII Ribbon campaign against HTML E-Mail / \
--------------------------------------------------------------------
As an Amazon Associate we earn from qualifying purchases.