ここでは,グループを削除しながら取り出すか決定する前に,アプリケーションでグループ内の各論理メッセージを検索する例を示します。
この例ではグループ全体の検索が終わると,最初に戻ってメッセージを削除しながら取り出します。
この例では各グループを削除するので,グループ内の最初または唯一のメッセージを検索するときには,MQGMO_LOGICAL_ORDERは使用できません。
検索と削除しながらの取り出しの例について,次に示します。
GMO.Options = MQGMO_BROWSE_NEXT | MQGMO_COMPLETE_MSG
| MQGMO_LOGICAL_ORDER
| MQGMO_ALL_MSGS_AVAILABLE | MQGMO_WAIT
while ( GroupStatus == MQGS_MSG_IN_GROUP ) {
MQGET
/* グループ内の残りのメッセージを調査
(または削除しながら取り出すか決定するのに
必要なだけ調査)*/
...
}
if ( 削除しながらグループを取り出す )
if ( GroupStatus == ' ' )
/* グループ化されないメッセージの取り出し */
GMO.Options = MQGMO_MSG_UNDER_CURSOR | MQGMO_SYNCPOINT
MQGET GMO.MatchOptions = 0
/* メッセージの処理 */
...
else
/* 一つ以上のメッセージを取り出しました。検索カーソルは通常は
グループの最初にはありません。そのため,GroupIdを設定し,
MsgSeqNumberに1を設定します。
グループ化の有無に影響されないほかの方法では,検索時に
最初のメッセージのMsgIdを保存し,それを設定します。 */
GMO.Options = MQGMO_COMPLETE_MSG | MQGMO_SYNCPOINT
MQGET GMO.MatchOptions = MQMO_MATCH_GROUP_ID
| MQMO_MATCH_MSG_SEQ_NUMBER,
(MQMD.GroupId = メッセージ記述子に既存の値)
MQMD.MsgSeqNumber = 1
/* 最初または唯一のメッセージの処理 */
...
GMO.Options = MQGMO_COMPLETE_MSG | MQGMO_SYNCPOINT
| MQGMO_LOGICAL_ORDER
while ( GroupStatus == MQGS_MSG_IN_GROUP ) {
MQGET
/* グループ内の残りメッセージの処理 */
...
}