変換処理
ここでは、MQGMO_CONVERT オプションへの応答として、 キュー・マネージャーが実行する処理について説明します。
MQGMO_CONVERT オプションが MQGET 呼び出しで指定されている場合、およびアプリケーションに戻るメッセージがある場合、キュー・マネージャーは以下の処理を行います。
- 次の条件を 1 つでも満たせば、変換は不要です。
- メッセージ・データはすでに、MQGET 呼び出しを発行したアプリケーションに必要な 文字セットとエンコードで記述されています。呼び出しを発行する前に、アプリケーションは MQGET 呼び出しの MsgDesc パラメーターの CodedCharSetId および Encoding フィールドを必要な値に設定しなければなりません。
- メッセージ・データの長さがゼロ。
- MQGET 呼び出しの Buffer パラメーターの値がゼロ。
完了コード 理由コード MQCC_OK MQRC_NONE MQCC_WARNING MQRC_TRUNCATED_MSG_ACCEPTED MQCC_WARNING MQRC_TRUNCATED_MSG_FAILED 以下のステップは、メッセージ・データの文字セットまたはエンコードが、MsgDesc パラメーターにある対応する値と異なり、変換対象のデータがある場合にのみ実行されます。
- メッセージ内の制御情報にある Format フィールドに値 MQFMT_NONE がある場合、メッセージは変換されずに戻り、完了コード MQCC_WARNING と理由コード MQRC_FORMAT_ERROR が戻ります。
これ以外の場合には、処理は継続されます。
- メッセージはキューから削除され、Buffer パラメーターと同じサイズの一時バッファーに置かれます。ブラウズ操作の場合、メッセージはキューからは削除されずに、一時バッファーにコピーされます。
- メッセージをバッファーのサイズに合わせるために切り捨てる場合は、以下の処理が行われます。
- MQGMO_ACCEPT_TRUNCATED_MSG オプションを指定していない 場合、メッセージは変換されずに戻り、完了コード MQCC_WARNING と理由コード MQRC_TRUNCATED_MSG_FAILED が戻る。
- MQGMO_ACCEPT_TRUNCATED_MSG オプションを指定した 場合は、完了コードは MQCC_WARNING に、理由コードは MQRC_TRUNCATED_MSG_ACCEPTED に設定され、変換処理は続行される。
- メッセージを切り捨てずにバッファーに収容できる場合、または MQGMO_ACCEPT_TRUNCATED_MSG オプションを指定した場合は、以下の処理が行われます。
- 形式が組み込み形式の場合、バッファーはキュー・マネージャーのデータ変換サービスに渡される。
- 形式が組み込み形式ではない場合、バッファーは形式と同じ名前をもつユーザー作成出口に渡される。出口が検出できない場合、メッセージは変換されずに戻り、完了コード MQCC_WARNING と理由コード MQRC_FORMAT_ERROR が戻る。
エラーが発生しない場合は、データ変換サービスからの出力またはユーザー作成出口からの出力はメッセージに変換され、さらに完了コードおよび理由コードが MQGET 呼び出しを発行するアプリケーションに戻ります。
- 変換が成功した場合は、キュー・マネージャーは変換したメッセージをアプリケーションに戻します。この場合、MQGET 呼び出しが戻す完了コードおよび理由コードは、以下の組み合わせのいずれかです。ただし、変換がユーザー作成出口によって行われた場合、変換が正常に終了しても、これ以外の理由コードが戻される場合があります。
完了コード 理由コード MQCC_OK MQRC_NONE MQCC_WARNING MQRC_TRUNCATED_MSG_ACCEPTED 変換が失敗すると、キュー・マネージャーは未変換のメッセージをアプリケーションに戻します。その際、メッセージ内の制御情報にある値に設定された MsgDesc パラメーター内の CodedCharSetId と Encoding フィールド、および完了コード MQCC_WARNING が戻ります。
概念