OpenTP1 メッセージキューイング機能 TP1/Message Queue プログラム作成リファレンス
MQPUT1命令 − 1メッセージの登録
機能
MQPUT1命令で,一つのメッセージをキューへ登録できます。キューはオープンされている必要がありません。
形式
C言語の場合
MQPUT1(MQHCONN Hconn, PMQVOID ObjDesc, PMQVOID MsgDesc, PMQVOID PutMsgOpts,MQLONG BufferLength, PMQVOID Buffer, PMQLONG CompCode, PMQLONG Reason)
COBOL言語の場合
CALL 'MQPUT1' USING HCONN, OBJDESC, MSGDESC, PUTMSGOPTS, BUFFERLENGTH, BUFFER, COMPCODE, REASON.
引数
コネクションハンドルです。
キューマネジャへの接続を示すハンドルです。MQCONN命令の戻り値を指定してください。
オブジェクト記述子です。
登録するキューを識別する構造体です。詳細については,「1. データタイプ」の「MQOD構造体 − オブジェクト記述子」を参照してください。
モデルキューは指定できません。
● MsgDesc(MQMD構造体) −input/output
メッセージ記述子です。
送信するメッセージの属性を記述する構造体です。また,登録後のメッセージに関する情報が返されます。
詳細については,「1. データタイプ」の「MQMD構造体 − メッセージ記述子」を参照してください。
アプリケーションがバージョン1のMQMD構造体を指定すると,返却されるメッセージは,バージョン2のMQMD構造体にだけ存在するフィールドの値を指定するために,アプリケーションメッセージデータの前にMQMDE構造体を付加できます。そのとき,MQMDE構造体が存在することを示すために,MQMD構造体のFormatフィールドには,MQFMT_MD_EXTENSIONを設定しなければなりません。
詳細については,「1. データタイプ」の「MQMDE構造体 − メッセージ記述子の拡張」を参照してください。
● PutMsgOpts(MQPMO構造体) −input/output
メッセージ登録オプションです。
詳細については,「1. データタイプ」の「MQPMO構造体 − メッセージ登録オプション」を参照してください。
● BufferLength(MQLONG型) −input
メッセージデータを格納したバッファのバイト長です。
0も指定できます。このとき,アプリケーションデータのないメッセージを登録するものとみなされます。
あて先キューがローカルキューの場合,またはローカルキューの別名を使用している場合は,ローカルキューまたはキューマネジャのMaxMsgLength属性のうち,小さい方の値を超えて指定できません。
あて先キューがリモートキューの場合,またはリモートキューの別名を使用している場合は,次に示すローカルキューまたはキューマネジャのMaxMsgLength属性のうち,小さい方の値を超えて指定できません。
なお,メッセージが転送キューに格納されるとき,メッセージに付加情報が追加されます。このため,送信できるアプリケーションデータの量が少なくなります。BufferLength引数の値を決めるときは,転送キューのMaxMsgLength属性の値からMQ_MSG_HEADER_LENGTHのバイト数を引いた値を参考にしてください。
● Buffer(MQBYTE型×BufferLength) −input
メッセージデータを格納したバッファです。バッファには,メッセージ中のデータに適したバウンダリ調整が必要です。多くのメッセージ(MQヘッダ構造体のあるメッセージを含む)には4バイト単位の調整が適していますが,より厳しい調整が必要なメッセージもあります。例えば,64ビット2進整数を含めるメッセージには8バイト単位のバウンダリ調整が必要です。
バッファ内に文字または数値がある場合,MsgDesc引数のCodedCharSetIdフィールドとEncodingフィールドに,適切な値を指定してください。これらの値によって,受信側でデータを適切な文字セットとマシンコード形式に変換できます。
C言語では,この引数をvoid型のポインタとして指定します。したがって,どんなデータタイプのアドレスでも,引数として指定できます。
BufferLength引数で0を指定した場合,Buffer引数は参照されません。したがって,C言語のプログラムでは,この引数のアドレスとしてヌルを指定できます。
完了コードです。
次のどれかが返されます。
理由コードです。
CompCode引数がMQCC_OKの場合
| 理由コード | 数値 | 意味 |
|---|---|---|
| MQRC_NONE | 0 | 理由コードはありません。 |
CompCode引数がMQCC_WARNINGの場合
| 理由コード | 数値 | 意味 |
|---|---|---|
| MQRC_MULTIPLE_REASONS | 2136 | 複数の理由コードが返されました。 |
| MQRC_PRIORITY_EXCEEDS_MAXIMUM | 2049 | メッセージ優先度が最大値を超えています。 |
| MQRC_UNKNOWN_REPORT_OPTION | 2104 | メッセージ記述子中の報告オプションを認識できません。 |
CompCode引数がMQCC_FAILEDの場合
| 理由コード | 数値 | 意味 |
|---|---|---|
| MQRC_ALIAS_BASE_Q_TYPE_ERROR | 2001 | 別名キューのベースキューのタイプが不正です。 |
| MQRC_BUFFER_ERROR | 2004 | バッファの引数が不正です。 |
| MQRC_BUFFER_LENGTH_ERROR | 2005 | バッファ長の引数が不正です。 |
| MQRC_CLUSTER_PUT_INHIBITED | 2268 | クラスタ内のすべてのキューに対して登録が禁止されています。 |
| MQRC_CLUSTER_RESOLUTION_ERROR | 2189 | クラスタ名称の解決に失敗しました。 |
| MQRC_CLUSTER_RESOURCE_ERROR | 2269 | クラスタリソースのエラーです。 |
| MQRC_CONTEXT_HANDLE_ERROR | 2097 | 参照先のキューハンドルにコンテキストが保存されていません。 |
| MQRC_CONTEXT_NOT_AVAILABLE | 2098 | 参照先のキューハンドルのコンテキストが不正です。 |
| MQRC_DEF_XMIT_Q_TYPE_ERROR | 2198 | 省略時の転送キューがローカルキューではありません。 |
| MQRC_DEF_XMIT_Q_USAGE_ERROR | 2199 | 省略時の転送キューの使用方法に誤りがあります。 |
| MQRC_DH_ERROR | 2135 | 配布リスト構造体が不正です。 |
| MQRC_EXPIRY_ERROR | 2013 | メッセージ保持時間が不正です。 |
| MQRC_FEEDBACK_ERROR | 2014 | 報告メッセージ返答コードが不正です。 |
| MQRC_HANDLE_NOT_AVAILABLE | 2017 | 現在そのハンドルは有効ではありません。 |
| MQRC_HCONN_ERROR | 2018 | コネクションハンドルが不正です。 |
| MQRC_MD_ERROR | 2026 | メッセージ記述子が不正です。 |
| MQRC_MDE_ERROR | 2248 | メッセージ記述子の拡張子が不正です。 |
| MQRC_MISSING_REPLY_TO_Q | 2027 | 応答キューがありません。 |
| MQRC_MSG_FLAGS_ERROR | 2249 | メッセージフラグが不正です。 |
| MQRC_MSG_SEQ_NUMBER_ERROR | 2250 | メッセージシーケンス番号が不正です。 |
| MQRC_MSG_TOO_BIG_FOR_Q | 2030 | メッセージ長がキューに定義された最大値を超えています。 |
| MQRC_MSG_TYPE_ERROR | 2029 | メッセージ記述子中のメッセージタイプが不正です。 |
| MQRC_MULTIPLE_REASONS | 2136 | 複数の理由コードが返されます。 |
| MQRC_NO_DESTINATIONS_AVAILABLE | 2270 | 利用可能なあて先キューが存在しません。 |
| MQRC_OBJECT_DAMAGED | 2101 | オブジェクトが破損しています。 |
| MQRC_OBJECT_NAME_ERROR | 2152 | オブジェクト名が不正です。 |
| MQRC_OBJECT_Q_MGR_NAME_ERROR | 2153 | オブジェクトキューマネジャ名が不正です。 |
| MQRC_OBJECT_RECORDS_ERROR | 2155 | オブジェクトレコードが不正です。 |
| MQRC_OBJECT_TYPE_ERROR | 2043 | オブジェクトタイプが不正です。 |
| MQRC_OD_ERROR | 2044 | オブジェクト記述子の構造体が不正です。 |
| MQRC_OFFSET_ERROR | 2251 | メッセージセグメントのオフセットが不正です。 |
| MQRC_OPTIONS_ERROR | 2046 | オプションが不正です。または,指定されていません。 |
| MQRC_ORIGINAL_LENGTH_ERROR | 2252 | 元の長さが不正です。 |
| MQRC_PERSISTENCE_ERROR | 2047 | メッセージ永続性が不正です。 |
| MQRC_PERSISTENT_NOT_ALLOWED | 2048 | キューは永続メッセージをサポートしていません。 |
| MQRC_PMO_ERROR | 2173 | メッセージ登録オプションの構造体が不正です。 |
| MQRC_PMO_RECORD_FLAGS_ERROR | 2158 | 登録メッセージレコードのフラグが不正です。 |
| MQRC_PRIORITY_ERROR | 2050 | メッセージ優先度が不正です。 |
| MQRC_PUT_INHIBITED | 2051 | 指定されたキューへの登録は禁止されています。 |
| MQRC_PUT_MSG_RECORDS_ERROR | 2159 | 登録メッセージレコードが不正です。 |
| MQRC_Q_DELETED | 2052 | キューが削除されています。 |
| MQRC_Q_FULL | 2053 | キューが満杯です。 |
| MQRC_Q_SPACE_NOT_AVAILABLE | 2056 | キューに対応するディスクに空き領域がありません。 |
| MQRC_Q_TYPE_ERROR | 2057 | キュータイプが不正です。 |
| MQRC_RECS_PRESENT_ERROR | 2154 | 存在するレコード数が不正です。 |
| MQRC_REMOTE_Q_NAME_ERROR | 2184 | リモートキュー名が不正です。 |
| MQRC_REPORT_OPTIONS_ERROR | 2061 | メッセージ記述子中の報告オプションが不正です。 |
| MQRC_RESOURCE_PROBLEM | 2102 | システム資源が不足しています。 |
| MQRC_RESPONSE_RECORDS_ERROR | 2156 | 応答レコードが不正です。 |
| MQRC_SEGMENT_LENGTH_ZERO | 2253 | メッセージセグメントのデータ長が0です。 |
| MQRC_STORAGE_NOT_AVAILABLE | 2071 | 記憶容量が不足しています。 |
| MQRC_SYNCPOINT_NOT_AVAILABLE | 2072 | 同期点処理はできません。 |
| MQRC_UNEXPECTED_ERROR | 2195 | 予期しないエラーが発生しました。 |
| MQRC_UNKNOWN_ALIAS_BASE_Q | 2082 | 別名キューのベースキューを認識できません。 |
| MQRC_UNKNOWN_DEF_XMIT_Q | 2197 | 省略時の転送キューを認識できません。 |
| MQRC_UNKNOWN_OBJECT_NAME | 2085 | オブジェクト名を認識できません。 |
| MQRC_UNKNOWN_OBJECT_Q_MGR | 2086 | オブジェクトのキューマネジャを認識できません。 |
| MQRC_UNKNOWN_REMOTE_Q_MGR | 2087 | リモートキューマネジャを認識できません。 |
| MQRC_UNKNOWN_XMIT_Q | 2196 | 転送キューを認識できません。 |
| MQRC_UOW_NOT_AVAILABLE | 2255 | コミット単位でキューマネジャを使用できません。 |
| MQRC_WRONG_MD_VERSION | 2257 | MQMD構造体に指定されたバージョンが不正です。 |
| MQRC_XMIT_Q_TYPE_ERROR | 2091 | 転送キューがローカルキューではありません。 |
| MQRC_XMIT_Q_USAGE_ERROR | 2092 | 転送キューの使用方法に誤りがあります。 |
詳細は,「付録B.2 理由コード」を参照してください。
注意事項
All Rights Reserved. Copyright (C) 2006, 2011, Hitachi, Ltd.
(C) Copyright International Business Machines Corporation 1994, 2003. All rights reserved.