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
     /* グループ内の残りメッセージの処理 */
     ...
   }