COBOL2002 ユーザーズガイド
キューからメッセージを受信するには,CBLMQRECEIVEMSGサービスルーチンを呼び出します。
- 形式
- CALL 'CBLMQRECEIVEMSG' USING 引数1 引数2
- 引数
- 引数1には,キューをオープンしたときにCBLMQOPENサービスルーチンに指定した「表29-2 MSMQアクセスサービスルーチンで使用するインタフェース領域」の名前を指定します。
- 引数2には,データパラメタ領域の名前を指定します。
- インタフェース領域に設定する項目
- 受信待ち時間
キューにメッセージが配信されるのを待つ時間をmsec単位で指定します。
-1を指定した場合,キューにメッセージが配信されるまで待ち続けます。
- データ変換フラグ
キューから受信したメッセージ本文のデータをデータ変換して,テキストデータとして格納するかどうかを指定します。
テキストデータに変換して格納する場合は1を,そのまま格納する場合は0を指定します。
- インタフェース領域の形式については,「表29-2 MSMQアクセスサービスルーチンで使用するインタフェース領域」を参照してください。
- データパラメタ領域に設定する項目
- 受信したメッセージデータ,およびメッセージのラベルが,次の形式で格納されます。
記述形式 |
内容 |
01 データ名1. |
CALL文のUSINGで指定するデータパラメタ領域の名前 |
02 データ名2 PIC S9(9) USAGE COMP. |
メッセージのラベルのデータ長 |
02 データ名3 PIC X(512). |
メッセージのラベルのパス名 |
02 データ名4 PIC S9(9) USAGE COMP. |
メッセージデータのデータ長 |
02 データ名5 PIC X(n). |
メッセージデータ |
- (凡例)
- n:メッセージデータのデータ長
- 戻り値
- 100:受信待ち時間の間にメッセージが配信されなかった。
- 2:受信メッセージを格納中に警告エラーを検出した。
- 1:メッセージを格納するデータ領域長が不足していた。
- 0:サービスルーチンは正常に終了した。
- -1:MSMQアクセスでエラーを検出した。
- -2:MSMQアクセス以外でエラーを検出した。
- また,インタフェース領域に次の項目が返されます。
- MSMQのエラーコード(戻り値が-1の場合)
- 表29-3 詳細コードの内容(戻り値が2または-2の場合)
- メッセージクラス
メッセージクラスが返されます。
通常メッセージを受信した場合は,LOW-VALUEが返されます。
それ以外のメッセージを受信した場合は,メッセージクラスのコードが返されます。詳細は,MSMQのマニュアルを参照してください。
- 優先順位
メッセージの優先順位が0〜7の範囲で返されます。
- 配信方法
メッセージの配信方法が返されます。
高速メッセージとして配信された場合は0が,回復不能メッセージとして配信された場合は1が返されます。
- ジャーナリング
受信したメッセージのジャーナリングフラグ(ジャーナリングするかどうか)の設定が返されます。
ジャーナリングフラグが設定されていた場合は1が,設定されていなかった場合は0が返されます。
- 配信不能メッセージ
受信したメッセージの配信不能メッセージフラグ(配信不能キューへ格納するかどうか)の設定が返されます。
配信不能メッセージフラグが設定されていた場合は1が,設定されていなかった場合は0が返されます。
- 規則
- データパラメタ領域のデータ名2には受信したメッセージのラベルのデータ長が,バイト数で返されます。また,データ名3には受信したメッセージのラベルが返されます。
- データパラメタ領域のデータ名4には,データ名5のメッセージデータのデータ長を指定します。指定できる最大データ長は,4,096,000バイトです。指定するデータ長には,実際にキューから受信するメッセージ本文のデータサイズ分が必要です。CBLMQSENDMSGサービスルーチンでメッセージを送信するとき,実際にキューに格納されるメッセージ本文のデータサイズについては,「29.2.5 メッセージを送信する(CBLMQSENDMSG)」の規則を参照してください。また,MSMQエクスプローラなどでメッセージ本文のデータサイズを確認することもできます。
- データパラメタ領域のデータ名5のデータ長よりキューから受信したメッセージ本文のデータサイズが短かった場合,データ名5に受信したメッセージ本文のデータが,データ名4に受信したメッセージ本文のデータサイズが,それぞれ返されます。ただし,インタフェース領域のデータ変換フラグに有効(テキストデータに変換)を指定した場合,データ名5には受信したメッセージ本文のデータがテキストデータに変換されて格納され,データ名4にはデータ名5に格納されたテキストデータのデータ長が返されます。
- データパラメタ領域のデータ名5のデータ長よりキューから受信したメッセージ本文のデータサイズが長かった場合,データ名4に受信したメッセージ本文のデータサイズが返され,サービスルーチンの戻り値が1となります。このとき,データ名2,データ名3,データ名5,およびインタフェース領域には何も返されません。
- キューから受信したメッセージのラベル,またはメッセージ本文のデータを格納中にサービスルーチンがデータエラーを検出した場合,サービスルーチンの戻り値が2となります。この場合,キューから受信したメッセージのラベル,またはメッセージ本文のデータは,テキストデータに変換されないで格納されます。
- このサービスルーチンを実行する場合,あらかじめCBLMQOPENサービスルーチンを使って,メッセージを受信するキューをRECEIVEモードでオープンしておく必要があります。
All Rights Reserved. Copyright (C) 2013, 2016, Hitachi, Ltd.
All Rights Reserved. Copyright (C) 2002, 2011, Microsoft Corporation.