On 16-Jan-2014 05:30 -0800, John Allen wrote:
I am using QMHRCVM API to read through a message Queue, this works
fine
I am also using QMHRMVM to remove some of the messages this works
fine except...
I want to make sure I do not attempt to remove an Inquiry message
that is waiting for a response.
I receive the message type from QMHRCVM but I do not see any type of
Message Status field in the QMHRCVM API results.
How can I make sure I do not attempt to remove a message that is
awaiting a response.
There is no specific messages I am trying to remove or skip. I just
need to be able to read all messages in a message queue and skip
those waiting a response
The use of [those] APIs is not specific to the RPG language; i.e.
probably more appropriate on midrange-l. Regardless...
Seems the intent is to effect the same as "F16=Remove all except
unanswered" from the Display Messages panel.?
When a message of type *INQ is located, the message key associated
with [received for] that Inquiry message can be used on an additional
invocation of the Receive Nonprogram Message (QMHRCVM) API [or RCVMSG]
to ask explicitly for the *RPY message associated with that key. If the
API indicates nothing is returned [blanks returned for RCVMSG] for the
requested message, then that inquiry message is unanswered; i.e. the
inquiry with no reply is awaiting a reply.
To delete messages other than unanswered inquiries, just skip all
inquiries [in the remove message processing], and only delete the reply
messages. By deleting the reply message, the inquiry to which the reply
was applied is deleted implicitly.
While probably not the best code [e.g. may be able to code without
any concern for a CPF2410 and using a DoWhile], the following code
snippet should be sufficient to show how the reply message associated
with the inquiry message can be received. The article does not point
out that the replies will be encountered again as *NEXT messages, in the
coded loop:
http://www.mcpressonline.com/tips-techniques/system-administration/techtalk-receiving-messages-and-their-replies.html
TechTalk: Receiving Messages and Their Replies
Tips & Techniques - System Administration
Written by MC Press Contributing Author
Sunday, 28 February 1993 18:00
From: Mark Read To: All
"I was wondering if anyone could help me with the Receive Message
(RCVMSG) command. I have set up a CL program with the following command:
RCVMSG MSGQ(&MSGQ) MSGTYPE(*NEXT) MSGKEY(*TOP) +
MSG(&MSGTXT) SENDER(&MSGSNDR)
This CL program is called from another program that will print the
message data that is passed back via the parameters. Here's the problem
that I'm having: if an inquiry message is in the message queue, I cannot
seem to get the reply information.
...
DCL VAR(&MSGTYPE) TYPE(*CHAR) LEN(2)
DCL VAR(&MSGKEY) TYPE(*CHAR) LEN(4)
DCL VAR(&MSGTXT) TYPE(*CHAR) LEN(80)
DCL VAR(&RPYTXT) TYPE(*CHAR) LEN(80)
RCVMSG MSGQ(...) MSGTYPE(*NEXT) MSGKEY(*TOP) RMV(*NO) +
KEYVAR(&MSGKEY) MSG(&MSGTXT) RTNTYPE(&MSGTYPE)
LOOP: +
IF COND(&MSGTYPE *EQ '05') THEN(DO)
RCVMSG MSGQ(...) MSGTYPE(*RPY) MSGKEY(&MSGKEY) +
RMV(*NO) MSG(&RPYTXT)
MONMSG MSGID(CPF2410)
GOTO CMDLBL(ENDLOOP)
ENDDO
RCVMSG MSGQ(...) MSGTYPE(*NEXT) MSGKEY(&MSGKEY) +
RMV(*NO) KEYVAR(&MSGKEY) MSG(&MSGTXT) RTNTYPE(&MSGTYPE)
MONMSG MSGID(CPF2410) EXEC(GOTO CMDLBL(ENDLOOP))
Goto cmdlbl(loop)
ENDLOOP:
/* &MSGTXT will contain *INQ message if one exists in the message queue.*/
/* &RPYTXT will contain reply data if a reply was given. */
As an Amazon Associate we earn from qualifying purchases.