10.9.2 削除しながらの取り出し
ここでは,グループを削除しながら取り出すか決定する前に,アプリケーションでグループ内の各論理メッセージを検索する例を示します。
この例ではグループ全体の検索が終わると,最初に戻ってメッセージを削除しながら取り出します。
この例では各グループを削除するので,グループ内の最初または唯一のメッセージを検索するときには,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 /* グループ内の残りメッセージの処理 */ ... }