MQMD構造体 - メッセージ記述子
MQMD構造体は,次のフィールドから構成されます。
フィールド(データタイプ) | 内容 | 初期値 |
---|---|---|
StrucId(MQCHAR4型) | 構造体識別子 | MQMD_STRUC_ID |
Version(MQLONG型) | 構造体バージョン番号 | MQMD_VERSION_1 |
Report(MQLONG型) | 報告メッセージオプション | MQRO_NONE |
MsgType(MQLONG型) | メッセージタイプ | MQMT_DATAGRAM |
Expiry(MQLONG型) | メッセージ保持時間 | MQEI_UNLIMITED |
Feedback(MQLONG型) | 報告メッセージ返答コード | MQFB_NONE |
Encoding(MQLONG型) | メッセージデータのマシンコード形式 | MQENC_NATIVE |
CodedCharSetId(MQLONG型) | メッセージデータの文字セット識別子 | MQCCSI_Q_MGR |
Format(MQCHAR8型) | メッセージデータのフォーマット名 | MQFMT_NONE |
Priority(MQLONG型) | メッセージ優先度 | MQPRI_PRIORITY_AS_Q_DEF |
Persistence(MQLONG型) | メッセージ永続性 | MQPER_PERSISTENCE_AS_Q_DEF |
MsgId(MQBYTE24型) | メッセージ識別子 | MQMI_NONE |
CorrelId(MQBYTE24型) | 相関識別子 | MQCI_NONE |
BackoutCount(MQLONG型) | ロールバック回数 | 0 |
ReplyToQ(MQCHAR48型) | 応答キュー名 | ヌル文字列/空白 |
ReplyToQMgr(MQCHAR48型) | 応答キューマネジャ名 | ヌル文字列/空白 |
UserIdentifier(MQCHAR12型) | ユーザ識別子 | ヌル文字列/空白 |
AccountingToken(MQBYTE32型) | 課金トークン | MQACT_NONE |
ApplIdentityData(MQCHAR32型) | アプリケーション識別データ | ヌル文字列/空白 |
PutApplType(MQLONG型) | 登録アプリケーションタイプ | MQAT_NO_CONTEXT |
PutApplName(MQCHAR28型) | 登録アプリケーション名 | ヌル文字列/空白 |
PutDate(MQCHAR8型) | 登録日付 | ヌル文字列/空白 |
PutTime(MQCHAR8型) | 登録時刻 | ヌル文字列/空白 |
ApplOriginData(MQCHAR4型) | 登録元データ | ヌル文字列/空白 |
GroupId(MQBYTE24型)※ | グループ識別子 | MQGI_NONE |
MsgSeqNumber(MQLONG型)※ | メッセージシーケンス番号 | 1 |
Offset(MQLONG型)※ | オフセット | 0 |
MsgFlags(MQLONG型)※ | メッセージフラグ | MQMF_NONE |
OriginalLength(MQLONG型)※ | 登録元メッセージ長 | MQOL_UNDEFINED |
概要
目的
MQMD構造体には,アプリケーション間でデータをやり取りするために必要な制御情報を記述します。この構造体はMQGET,MQPUTおよびMQPUT1命令の入出力用の引数です。
バージョン
MQMD構造体のバージョンには1および2があります。しかし,すべての環境でMQMD_VERSION_2がサポートされているわけではありません。複数の環境にアプリケーションを移植する場合は,使用するバージョンのMQMD構造体が,すべての環境でサポートされている必要があります。MQMD_VERSION_2以降の構造体にだけ存在するフィールドについては,そのことがフィールドの説明に記載されています。
サポートするプログラミング言語のCOPYファイルとINCLUDEファイルでは,最新バージョンのMQMD構造体が提供されます。ただし,Versionフィールドの初期値はMQMD_VERSION_1です。バージョン1の構造体にないフィールドを使用する場合は,アプリケーションで使用したいバージョンの番号をVersionフィールドに設定してください。
バージョン1の構造体宣言には,MQMD1型を使用できます。
文字セットおよびマシンコード
MQMD構造体のデータは,ローカルキューマネジャの文字セットおよびマシンコードに従います。それぞれ,キューマネジャのCodedCharSetId属性およびMQENC_NATIVEで指定します。TP1/Message Queue - Accessのクライアントアプリケーションの場合,MQMD構造体はクライアントの文字セットおよびマシンコードにします。
送信側および受信側キューマネジャが使用する文字セットまたはマシンコードが異なる場合,MQMD構造体の中のデータは自動的に変換されます。アプリケーションがMQMD構造体を変換する必要はありません。
異なるバージョンのMQMD構造体の使用
バージョン1のMQMD構造体のアプリケーションデータの前にMQMDE構造体を追加すると,バージョン2のMQMD構造体と同じ機能になります。ただし,MQMDE構造体の全フィールドが初期値の場合,MQMDE構造体は省略できます。バージョン1のMQMD構造体とMQMDE構造体は次のように使用されます。
この構造体は,MQGET命令,MQPUT命令,およびMQPUT1命令の入出力用の引数です。
サポートされるすべてのプログラム言語について,MQMD構造体のデフォルト値はバージョン1構造体のデフォルト値と同じです。また,明示的なMQMD1構造体を利用できます(COBOL言語ではCOPYファイルのCMQMD1とCMQMD1V)。この構造体は,バージョン1のMQMD構造体とバージョン2のMQMD構造体を扱う必要があるアプリケーションのために提供されています。
メッセージが転送キュー上にある場合,MQMD構造体内のフィールドの一部が特定の値に設定されます。詳細については,この章の「MQXQH構造体 - 転送キューヘッダ」を参照してください。
メッセージコンテキスト
MQMD構造体の特定のフィールドには,メッセージコンテキストが含まれます。メッセージテキストには,識別コンテキストと登録元コンテキストがあります。
これらの二つのアプリケーションは,同一のアプリケーションである場合と,同一のアプリケーションでない場合(例えば,メッセージがアプリケーションからアプリケーションへ転送される場合)があります。
識別コンテキストと登録元コンテキストには通常,上記のような意味があります。しかし実際には,MQMD構造体のコンテキストフィールドの内容は,メッセージ登録時に指定されたMQPMO_*_CONTEXTオプションによって決定されます。そのため,必ずしも上記のとおりではありません。アプリケーションの設計に依存します。
メッセージのコンテキストをまったく変更しないアプリケーションのクラスには,メッセージチャネルエージェント(MCA)があります。リモートキューマネジャからメッセージを受信するMCAは,MQPUTまたはMQPUT1命令にコンテキストオプションMQPMO_SET_ALL_CONTEXTを使用します。これによって受信側のMCAは,送信側のMCAからメッセージとともに送信されたメッセージコンテキストを,そのままの状態で保存できます。ただし,その結果として,登録元コンテキストはメッセージを最後に登録したアプリケーション(受信側MCA)に関係づけられないで,それ以前にメッセージを登録したアプリケーション(送信側アプリケーション自身を含む)に関係づけられます。
以降の説明では,上記に示した通常の方法でコンテキストフィールドが使用されている場合について説明します。メッセージのコンテキストの詳細については,マニュアル「TP1/Message Queue プログラム作成の手引」を参照してください。
フィールド
構造体を構成するフィールドについて,アルファベット順に説明します。
● AccountingToken(MQBYTE32型) 課金トークン
メッセージの識別コンテキストの一部です。メッセージコンテキストについては,この章の「MQMD構造体 - メッセージ記述子」の「概要」,およびマニュアル「TP1/Message Queue プログラム作成の手引」を参照してください。
アプリケーションが課金情報を必要とするときに使用できます。
この情報は,キューマネジャではビット列として扱われます。内容はチェックされません。キューマネジャによってこの情報が生成されるとき,次の値が設定されます。
MQPUT命令およびMQPUT1命令のPutMsgOpts引数でMQPMO_SET_IDENTITY_CONTEXTまたはMQPMO_SET_ALL_CONTEXTを指定した場合,入出力用フィールドとなります。MQPMO_SET_IDENTITY_CONTEXTもMQPMO_SET_ALL_CONTEXTも指定しなかった場合,このフィールドは入力時に無視されて出力専用のフィールドとなり,このフィールドは「¥0」で埋められます。メッセージコンテキストおよびコンテキスト情報の制御については,マニュアル「TP1/Message Queue プログラム作成の手引」を参照してください。
MQPUT命令またはMQPUT1命令が成功すると,このフィールドには,転送されたメッセージのAccountingTokenが設定されます。メッセージにコンテキストがなかった場合,このフィールドは0となります。
MQGET命令では,出力用フィールドとなります。
このフィールドは,キューマネジャの文字セットの変換対象にはなりません。このフィールドは,文字列ではなく,ビット列として扱われます。
キューマネジャはこの情報を操作しません。この情報を課金目的で使用するときは,アプリケーションがそれを解釈してください。
次の定数値も使用できます。
このフィールドの長さは,MQ_ACCOUNTING_TOKEN_LENGTHに定義されています。
このフィールドの初期値はMQACT_NONEです。
● ApplIdentityData(MQCHAR32型) アプリケーション識別データ
メッセージの識別コンテキストの一部です。メッセージコンテキストについては,この章の「MQMD構造体 - メッセージ記述子」の「概要」,およびマニュアル「TP1/Message Queue プログラム作成の手引」を参照してください。
このフィールドでは,アプリケーションの組を定義します。また,メッセージまたは登録元に関する付加情報に使用できます。
この情報は,キューマネジャでは文字データとして扱われます。ただし,データの形式は規定されません。キューマネジャによってこの情報が生成されるとき,空白が設定されます。
MQPUT命令およびMQPUT1命令のPutMsgOpts引数でMQPMO_SET_IDENTITY_CONTEXTまたはMQPMO_SET_ALL_CONTEXTを指定した場合,入出力用フィールドとなります。このフィールドにヌル文字があった場合,ヌル文字以降の文字は,キューマネジャによって空白に置き換えられます。MQPMO_SET_IDENTITY_CONTEXTもMQPMO_SET_ALL_CONTEXTも指定しなかった場合,このフィールドは入力時に無視されて出力専用フィールドとなり,このフィールドは空白で埋められます。メッセージコンテキストおよびコンテキスト情報の制御については,マニュアル「TP1/Message Queue プログラム作成の手引」を参照してください。
MQPUT命令またはMQPUT1命令が成功すると,このフィールドには,転送されたメッセージのApplIdentityDataが設定されます。メッセージにコンテキストがなかった場合,このフィールドは空白で埋められます。
MQGET命令では,出力用フィールドとなります。
このフィールドの長さは,MQ_APPL_IDENTITY_DATA_LENGTHに定義されています。
このフィールドの初期値は,C言語ではヌル文字列です。そのほかのプログラミング言語では,32個の空白です。
● ApplOriginData(MQCHAR4型) 登録元データ
メッセージの登録元コンテキストの一部です。メッセージコンテキストについては,この章の「MQMD構造体 - メッセージ記述子」の「概要」,およびマニュアル「TP1/Message Queue プログラム作成の手引」を参照してください。
ApplOriginDataは,アプリケーションの組で定義する情報で,メッセージの登録元に関する付加情報として使用できます。例えば,適切な権限を持つアプリケーションが,識別データが信用できるかどうかを示すために設定できます。
この情報は,キューマネジャでは文字データとして扱われます。ただし,データの形式は規定されません。キューマネジャによってこの情報が生成されるとき,空白が設定されます。
MQPUT命令およびMQPUT1命令のPutMsgOpts引数でMQPMO_SET_ALL_CONTEXTを指定した場合,入出力用フィールドとなります。このフィールドのヌル文字以降の情報は破棄されます。ヌル文字以降の文字は,キューマネジャによって空白に置き換えられます。MQPMO_SET_ALL_CONTEXTを指定しなかった場合,このフィールドは入力時に無視されて出力専用フィールドとなり,このフィールドは空白で埋められます。
MQPUT命令またはMQPUT1命令が成功すると,このフィールドには転送されたメッセージのApplOriginDataが設定されます。メッセージにコンテキストがなかった場合,このフィールドは空白で埋められます。
MQGET命令では,出力用フィールドとなります。
このフィールドの長さは,MQ_APPL_ORIGIN_DATA_LENGTHに定義されています。
このフィールドの初期値は,C言語ではヌル文字列です。そのほかのプログラミング言語では,4個の空白です。
● BackoutCount(MQLONG型) ロールバック回数
トランザクション内のMQGET命令でメッセージが返されて,そのあとにロールバックした回数です。アプリケーションはこの回数によって,メッセージの内容が原因のエラーを検出できます。この回数には,MQGMO_BROWSE_*オプションを指定したMQGET命令は含まれません。
これは,MQGET命令の出力用フィールドです。MQPUT命令およびMQPUT1命令のときは無視されます。
このフィールドの初期値は0です。
● CodedCharSetId(MQLONG型) 文字セット識別子
メッセージデータの文字セット識別子です。
次の値が使用できます。
MQPUTおよびMQPUT1命令では,メッセージとともに送信されるMQMD構造体中のMQCCSI_Q_MGRおよびMQCCSI_INHERITという値を,キューマネジャはキューマネジャの文字セット識別子と同じ値に変更します。しかし,MQPUTまたはMQPUT1命令に指定されたMQMD構造体は変更しません。指定された値について,ほかのチェックはありません。
メッセージを取り出すアプリケーションは,このフィールドが期待した値かどうかを比較します。期待した値以外の場合,アプリケーションはメッセージ中の文字データを変換する必要があります。
MQGMO_CONVERTオプションがMQGET命令で指定される場合,このフィールドは入出力用フィールドです。アプリケーションで指定された値は,メッセージデータの必要に応じて変換される文字セット識別子です。変換が成功した場合,または変換が不要の場合,値は変更されません。ただし,MQCCSI_Q_MGRおよびMQCCSI_INHERITが実際の値に変換される場合を除きます。変換が成功しなかった場合,MQGET命令後の値はアプリケーションに設定される未変換メッセージの文字セット識別子を表します。
MQGMO_CONVERTオプションがMQGET命令で指定されない場合,このフィールドは,MQGET命令の出力用フィールドです。また,MQPUT命令とMQPUT1命令の入力用フィールドです。
このフィールドの初期値はMQCCSI_Q_MGRです。
● CorrelId(MQBYTE24型) 相関識別子
MQGET命令では,取り出すメッセージの相関識別子を指定します。このフィールドの指定方法はMsgIdフィールドと同様です。
MQGET命令のGetMsgOpts引数でMQGMO_MSG_UNDER_CURSORオプションを指定した場合,このフィールドは無視されます。
MQGET命令が返されるとき,取り出したメッセージの相関識別子がCorrelIdフィールドに設定されます。
MQPUT命令およびMQPUT1命令では,アプリケーションは任意の相関識別子を指定できます。その値は,キューマネジャによってメッセージを取り出すアプリケーションに返されます。
MQPUTおよびMQPUT1命令にMQPMO_NEW_CORREL_IDオプションを指定する場合,登録したメッセージの相関識別子に,ユニークな相関識別子※がキューマネジャによって設定されます。
報告が生成されるとき,登録元メッセージのReportフィールド(MQRO_COPY_MSG_ID_TO_CORREL_IDまたはMQRO_PASS_CORREL_ID)の方法で,CorrelIdが設定されます。アプリケーションが報告を生成するときも,同様の処理をする必要があります。
このフィールドは,キューマネジャの文字セットの変換対象にはなりません。このフィールドは,文字列ではなく,ビット列として扱われます。
次の定数値を使用できます。
これは,MQGET命令の入出力用フィールドです。また,MQPUT命令とMQPUT1命令では,MQPMO_NEW_CORREL_IDの指定がない場合は入力用フィールドとなり,指定された場合は出力用フィールドとなります。
このフィールドの長さは,MQ_CORREL_ID_LENGTHに定義されています。
このフィールドの初期値はMQCI_NONEです。
● Encoding(MQLONG型) マシンコード形式
メッセージ内の数値データのマシンコード形式を指定します。ただし,MQMD構造体自身の数値データには適用されません。マシンコード形式は,2進整数,10進パック形式整数および浮動小数点の表記を定義します。
MQPUTまたはMQPUT1命令では,アプリケーションはデータに合った値をこのフィールドに設定する必要があります。キューマネジャは,フィールドが有効かどうかをチェックしません。次に示す特別な値が定義されます。
メッセージを登録するアプリケーションは,通常,MQENC_NATIVEを指定します。メッセージを取り出すアプリケーションは,このフィールドがMQENC_NATIVEと等しいかどうかを比較します。等しくない場合は,アプリケーションはメッセージ中の数値データを変換する必要があります。MQGET命令の処理でキューマネジャがメッセージを変換するように指定するには,MQGMO_CONVERTオプションを使用できます。Encodingフィールドの指定方法については,「付録C マシンコード形式」を参照してください。
MQGMO_CONVERTオプションがMQGET命令で指定される場合,このフィールドは入出力用フィールドです。アプリケーションで指定された値は,メッセージデータの必要に応じて変換されるマシンコード形式です。変換が成功した場合,または変換が不要な場合,値は変更されません。変換が成功しなかった場合,MQGET命令後の値はアプリケーションに設定される未変換メッセージのマシンコード形式を表します。
MQGMO_CONVERTオプションがMQGET命令で指定されない場合,このフィールドは,MQGET命令の出力用フィールドです。また,MQPUT命令とMQPUT1命令の入力用フィールドです。
このフィールドの初期値はMQENC_NATIVEです。
● Expiry(MQLONG型) メッセージ保持時間
メッセージを登録するアプリケーションが指定する,1/10秒単位の時間です。この時間が経過する前にメッセージがあて先キューから取り出されないと,このメッセージは破棄できる状態になります。
あて先キューで時間が経過するごとに,この時間が減少します。リモートキューに登録した場合は,仲介するすべての転送キューで時間が減少します。また,転送時間が大きく影響する場合,MCAがこの時間を減少させます。必要に応じて,メッセージを次のキューへ進めるアプリケーションで同様に時間を減少させてください。ただし,メッセージ保持時間は概算で扱われるため,少しの時間では減少しません。
アプリケーションがMQGET命令でメッセージを取り出したとき,Expiryフィールドにはメッセージ保持時間の残りが示されます。
メッセージ保持時間が経過すると,キューマネジャによって破棄できる状態になります。破棄できる状態のメッセージは,検索MQGET命令や非検索MQGET命令が実行されると破棄されます。また,保持時間を経過したメッセージは,実行された命令が検索MQGET命令と非検索MQGET命令のどちらの場合も,返されません。例えば,MQGMO構造体のMatchOptionsフィールドの設定値がMQMO_NONEの非検索MQGET命令で,FIFO方式のキューから読み取りを実行するとします。この場合,終了していないメッセージが最初に出現するまでの,終了しているメッセージはすべて破棄されます。一方,優先順位方式のキューから同様の読み取りを実行した場合,終了していない最初のメッセージより先にキューに到着したメッセージのうち,優先順位が高いメッセージと優先順位が等しいメッセージが破棄されます。したがって,MQGET命令が成功した場合のExpiryフィールドの値は,0以上の数値またはMQEI_UNLIMITEDです。
メッセージをリモートキューへ登録した場合,メッセージがあて先キューに到着する前に転送キューに格納されている状態で保持時間が終了することがあります。その後,そのメッセージは破棄されます。
メッセージの報告オプションでMQRO_EXPIRATIONを指定した場合,保持時間終了でメッセージが破棄されたときに報告が生成されます。これらのオプションを指定しなかった場合,報告は生成されません。通常,代わりのメッセージが送られるため,保持時間が経過したあとは,そのメッセージは無関連のものとみなされます。
保持時間終了でメッセージを破棄するプログラムは,報告が要求されている場合,報告メッセージを通知する必要があります。
特殊な定数値として,次を指定できます。
このフィールドは,MQGET命令の出力用フィールドです。また,MQPUT命令とMQPUT1命令の入力用フィールドです。
このフィールドの初期値はMQEI_UNLIMITEDです。
● Feedback(MQLONG型) 報告メッセージ返答コード
このフィールドは,MQMT_REPORTタイプのメッセージで使用するもので,報告の性質を示します。メッセージタイプがMQMT_REPORTのときだけ有効です。
報告メッセージ返答コードは,次のように分けられます。
報告メッセージを生成するアプリケーションは,システムの範囲の返答コード(MQFB_QUIT以外)を使用できません。ただし,キューマネジャやMCAが生成する報告メッセージをシミュレートする場合は例外です。
MQPUTまたはMQPUT1命令では,MQFB_NONE,システムの範囲またはアプリケーションの範囲の値を使用してください。この値は,MsgTypeフィールドの値に関係なくチェックされます。
一般的な返答コード:
IMSブリッジの返答コード:
IMSブリッジが非ゼロのIMS-OTMAセンスコードを受け取るとき,センスコードを16進から10進に変換し,値MQFB_IMS_ERROR(300)を追加し,応答メッセージのFeedbackフィールドに格納します。そのため,IMS-OTMAエラーが発生した場合は,返答コードの値はMQFB_IMS_FIRST(301)からMQFB_IMS_LAST(399)の範囲になります。
IMSブリッジが生成する返答コードを次に示します。これらの値はTP1/Message Queueでは返りません。詳細については,WebSphere MQのマニュアルを参照してください。
CICSブリッジの返答コード:
CICSブリッジが生成する返答コードを次に示します。これらの値はTP1/Message Queueでは返りません。詳細については,WebSphere MQのマニュアルを参照してください。
理由コード:
例外報告の場合は,Feedbackフィールドに次の理由コードが設定されます。
このフィールドは,MQGET命令の出力用フィールドです。また,MQPUT命令とMQPUT1命令の入力用フィールドです。
このフィールドの初期値はMQFB_NONEです。
● Format(MQCHAR8型) フォーマット名
メッセージデータの性質を示す名称です。メッセージの送信側が受信側に示します。この名称には,キューマネジャの文字セットの文字を使用します。ただし,次に示す文字だけが使用できます。
このほかの文字を使用すると,送信側と受信側のキューマネジャの間で,名称を変換できないことがあります。
この名称の余りは,空白で埋めます。または,ヌル文字で終了します。ヌル文字以降の文字は,空白として扱われます。先頭または中間に空白を含んだ名称は指定しないでください。MQGET命令では,キューマネジャによって,フィールドの余りが空白で埋められた名称が返されます。
使用文字の条件を満たしているかどうか,キューマネジャはチェックしません。
大文字,小文字および大文字小文字混合の「MQ」で始まる名称は,キューマネジャで定義されたことを意味します。ユーザ独自のフォーマットには,この文字で始まる名称を使用できません。キューマネジャのフォーマットは,次のとおりです。
このフィールドは,MQGET命令の出力用フィールドです。また,MQPUT命令とMQPUT1命令の入力用フィールドです。
このフィールドの長さは,MQ_FORMAT_LENGTHに定義されています。
このフィールドの初期値はMQFMT_NONEです。
● GroupId(MQBYTE24型) グループ識別子
物理メッセージが属する特定のメッセージグループまたは論理メッセージを識別するのに使用するバイト列です。GroupIdフィールドは,セグメント分割が許可されているときにも使用されます。ただし,すべてのケースでGroupIdフィールドはヌル以外の値であり,次に示すフラグの一つ以上がMsgFlagsフィールドに指定されていなければなりません。
これらのフラグが一つも指定されない場合,GroupIdフィールドには特別なヌルの値であるMQGI_NONEが設定されます。
次の場合,アプリケーションによってMQPUT命令またはMQGET命令にGroupIdフィールドが設定される必要はありません。
報告メッセージではないメッセージに対して,MQPUT命令またはMQGET命令を使用するときには,上記のように命令を使用することをお勧めします。ただし,アプリケーションがさらに制御を必要としたり,MQPUT1命令を使用したりする場合,アプリケーションはGroupIdフィールドに適当な値が設定されていることを保証しなければなりません。
メッセージグループとセグメントはグループ識別子がユニークである場合だけ,正しく処理できます。このため,次に示す場合を除いては,アプリケーションによって自身のグループ識別子を生成しないでください。
MQPUT命令またはMQPUT1命令で,キューマネジャはMQPMO構造体のMQPMO_LOGICAL_ORDERの表中に示される値を使用します。MQPUT命令またはMQPUT1命令で値を返す場合,オープンされているオブジェクトが単一のキューであり,配布リストではないときに,キューマネジャは,このフィールドにメッセージとともに送信される値を設定します。一方,オープンされているオブジェクトが配布リストのときは,フィールドの値は変更されません。配布リストがオープンされている場合,アプリケーションが生成されたグループ識別子を知る必要があるときは,GroupIdフィールドを含むMQPMR構造体を指定しなければなりません。
MQGET命令での入力について,キューマネジャはMQGMO構造体のMQGMO_LOGICAL_ORDERの表中に示される値を使用します。MQGET命令の出力について,キューマネジャはこのフィールドに取り出されたメッセージの値を設定します。
次の特別な値が定義されています。
このフィールドの長さは,MQ_GROUP_ID_LENGTHに定義されています。
このフィールドの初期値はMQGI_NONEです。
このフィールドは,Versionフィールドの値がMQMD_VERSION_2以降の場合だけ有効です。
● MsgFlags(MQLONG型) メッセージフラグ
メッセージの属性を指定したり,処理を制御したりするフラグです。次のフラグがあります。
セグメンテーションフラグ:
セグメンテーションフラグは,セグメント分割の際に使用されます。通常,メッセージがキューに対して大き過ぎる場合,キューへのメッセージ登録は失敗します。セグメント分割は,キューマネジャやアプリケーションがメッセージをセグメントと呼ばれる小さな部分に分割し,それぞれのセグメントを分離された物理メッセージとしてキューに配置する方法です。メッセージを取り出すアプリケーションは一つ一つセグメントを取り出すか,キューマネジャにセグメントをMQGET命令で返される単一のメッセージに組み立てさせることができます。メッセージを組み立てる場合は,MQGET命令でMQGMO_COMPLETE_MSGオプションを指定し,完全なメッセージを格納するのに十分なバッファを用意します。MQGMO_COMPLETE_MSGオプションの詳細は,この章の「MQGMO構造体 - メッセージ取り出しオプション」を参照してください。メッセージのセグメント分割は,送信キューマネジャ,中間のキューマネジャまたはあて先キューマネジャで発生する可能性があります。
メッセージのセグメント分割を制御するために,次の値の一つを指定できます。
ステータスフラグ:
ステータスフラグは,物理メッセージがメッセージグループに属するか,論理メッセージのセグメントか,その両方か,またはどちらでもないのかを示すフラグです。次に示す一つ以上の値を,MQPUT命令またはMQPUT1命令で指定し,MQGET命令で返すことができます。
デフォルトフラグ:
デフォルトフラグはメッセージのデフォルトの属性を示すために使用します。次の値は,メッセージがデフォルトの属性を持つことを示すために指定します。
MsgFlagsフィールドはサブフィールドに分割されています。詳細は「付録D 報告オプションとメッセージフラグ」を参照してください。
このフィールドの初期値はMQMF_NONEです。
このフィールドは,Versionフィールドの値がMQMD_VERSION_2以降の場合だけ有効です。
● MsgId(MQBYTE24型) メッセージ識別子
MQGET命令では,取り出すメッセージのメッセージ識別子を指定します。通常,MQGET命令に指定したメッセージ記述子の,MsgIdフィールドとCorrelIdフィールドに該当する最初のメッセージが,キューマネジャによって返されます。ただし,特殊な定数値として,MQMI_NONEおよびMQCI_NONEを使用できます。
なお,MQGET命令では,キューから特定のメッセージを選択して取り出すために,次に示すフィールドを使用できます。
MsgIdフィールドは,これらのフィールドの一つとして使用されます。
通常,MQGET命令は,キューにある次のメッセージを取り出します。特定のメッセージが必要な場合には,選択規準として一つまたは複数のフィールドを任意の組み合わせで指定すれば,目的のメッセージを取得します。
したがって,アプリケーションでは,一つ以上のフィールドを必要な値に設定した上で,MQGMO構造体のMatchOptionsフィールドに対応するMQMO_*一致オプションを設定します。これによって,フィールドを選択基準として使用できるようになり,フィールドに指定した値を持つメッセージだけが取り出しの対象になります。アプリケーションでMQMO_*一致オプションを設定しない場合は,MatchOptionsフィールドのデフォルトでは,メッセージ識別子および相関識別子の二つが選択規準として使用されます。
MQGET命令のGetMsgOpts引数でMQGMO_MSG_UNDER_CURSORオプションを指定した場合,このフィールドは無視されます。
MQGET命令が返されるとき,取り出したメッセージのメッセージ識別子が,MsgIdフィールドに設定されます。
MQPUT命令およびMQPUT1命令でMQMI_NONEオプションを指定した場合,登録したメッセージのメッセージ記述子に,ユニークなメッセージ識別子※がキューマネジャによって設定されます。設定されたメッセージ識別子は,それを送信したアプリケーションにも,メッセージ記述子の一部として返されます。アプリケーションは,特定のメッセージに関する情報を記録するために,この値を使用できます。また,アプリケーションのほかの部分からの問い合わせに対する応答にも使用できます。
メッセージが配布リストに登録された場合,キューマネジャは要求されたとおりにユニークなメッセージ識別子を生成します。ただし,MQMI_NONEが指定されている場合でも,MQMD構造体のMsgIdフィールドの値は返されるときも変更されません。アプリケーションがキューマネジャの生成したメッセージ識別子を知る必要がある場合,アプリケーションはMsgIdフィールドを含むMQPMRレコードを提供しなければなりません。
送信するアプリケーションは,MQMI_NONE以外の定数値も,メッセージ識別子として指定できます。ただし,MQMI_NONE以外の値では,キューマネジャによって,ユニークなメッセージ識別子は生成されません。メッセージを転送するアプリケーションが,登録元メッセージのメッセージ識別子を引き渡すために,この機能を使用できます。
キューマネジャは,次の場合を除いて,このフィールドを使用しません。
キューマネジャまたはMCAによって報告が生成されるとき,登録元メッセージのReportフィールド(MQRO_NEW_MSG_IDまたはMQRO_PASS_MSG_ID)に従ってMsgIdが設定されます。アプリケーションが報告を生成するときも,同様の処理をする必要があります。
MQPER_PERSISTENTのメッセージでは,キューマネジャが再開始しても,メッセージ記述子は失われません。
このフィールドは,キューマネジャの文字セットの変換対象にはなりません。このフィールドは,文字列ではなく,ビット列として扱われます。
次の定数値を使用できます。
このフィールドは,MQGET命令,MQPUT命令,およびMQPUT1命令の入出力用のフィールドです。
このフィールドの長さは,MQ_MSG_ID_LENGTHに定義されています。
このフィールドの初期値はMQMI_NONEです。
● MsgSeqNumber(MQLONG型) メッセージシーケンス番号
グループ内の論理メッセージのシーケンス番号を表すフィールドです。シーケンス番号は1から始まり,グループ内の新しい論理メッセージごとに1ずつ加算されます。最大値は999999999です。グループに属さない物理メッセージのシーケンス番号は1です。次の場合,MsgSeqNumberフィールドは,MQPUT命令またはMQPUT1命令でアプリケーションによって設定される必要はありません。
報告メッセージではないメッセージに対して,MQPUT命令またはMQGET命令を使用するときには,上記のように命令を使用することをお勧めします。ただし,アプリケーションがさらに制御を必要としたり,MQPUT1命令を使用したりする場合,アプリケーションはシーケンス番号が適当な値に設定してあることを保証しなければなりません。
MQPUT命令またはMQPUT1命令で,キューマネジャはMQPMO構造体のMQPMO_LOGICAL_ORDERの表中に示される値を使用します。MQPUT命令またはMQPUT1命令で値を返す場合,キューマネジャは,このフィールドにメッセージとともに送信される値を設定します。
MQGET命令での入力について,キューマネジャはMQGMO構造体のMQGMO_LOGICAL_ORDERの表中に示される値を使用します。MQGET命令の出力について,キューマネジャはこのフィールドに取り出されたメッセージの値を設定します。
このフィールドの初期値は1です。
このフィールドは,Versionフィールドの値がMQMD_VERSION_2以降の場合だけ有効です。
● MsgType(MQLONG型) メッセージタイプ
メッセージの種類を示します。メッセージタイプは次のように分けられます。
次の値は,システムの範囲に定義されています。
システムの範囲で上記以外の値は,MQIの次バージョン以降に定義されることがあります。それらの値は,MQPUT命令またはMQPUT1命令で,エラーが発生しないで受け付けられます。
また,アプリケーションで定義した値も使用できます。それらの値は,次の範囲で定義してください。
MQPUT命令およびMQPUT1命令のMsgTypeフィールドには,システムの範囲かアプリケーションの範囲の値を使用してください。使用しない場合,理由コードMQRC_MSG_TYPE_ERRORで命令は失敗します。
このフィールドは,MQGET命令の出力用フィールドです。また,MQPUT命令とMQPUT1命令の入力用フィールドです。
このフィールドの初期値はMQMT_DATAGRAMです。
● Offset(MQLONG型) オフセット
論理メッセージのデータ部の先頭からの物理メッセージデータのオフセットです。このデータをセグメントと呼びます。オフセットは0~999999999の範囲です。論理メッセージのセグメントではない物理メッセージは,0のオフセットを持ちます。
次の場合,Offsetフィールドは,MQPUT命令またはMQGET命令でアプリケーションによって設定される必要はありません。
報告メッセージではないメッセージに対して,MQPUT命令またはMQGET命令を使用するときには,上記のように命令を使用することをお勧めします。ただし,アプリケーションが上記の条件に合わなかったり,MQPUT1命令を使用したりする場合,アプリケーションはオフセットが適当な値に設定してあることを保証しなければなりません。
MQPUT命令またはMQPUT1命令で,キューマネジャはMQPMO構造体のMQPMO_LOGICAL_ORDERの表中で示される値を使用します。MQPUT命令またはMQPUT1命令で値を返す場合,キューマネジャは,このフィールドにメッセージとともに送信される値を設定します。
論理メッセージのセグメントに対する報告メッセージでは,MQOL_UNDEFINEDではない場合に生成されるOriginalLengthフィールドは,キューマネジャによって保持されているセグメント情報に関するオフセット値の更新に使用されます。
MQGET命令での入力について,キューマネジャはMQGMO構造体のMQGMO_LOGICAL_ORDERの表中で示される値を使用します。MQGET命令の出力で,キューマネジャはこのフィールドに取り出されたメッセージの値を設定します。
このフィールドの初期値は0です。
このフィールドは,Versionフィールドの値がMQMD_VERSION_2以降の場合だけ有効です。
● OriginalLength(MQLONG型) 登録元メッセージ長
このフィールドはセグメントである報告メッセージにだけ関連します。報告メッセージが関連するメッセージセグメントの長さを指定します。セグメントによって構成されている論理メッセージの長さや,報告メッセージ中のデータの長さは指定しません。
次に示す特別な値があります。
このフィールドは,MQPUT命令やMQPUT1命令の入力用フィールドです。ただし,アプリケーションが指定する値は次に示す特定の場合にだけ受け入れられます。
OriginalLengthフィールドは,MQGET命令の出力用フィールドです。
このフィールドの初期値はMQOL_UNDEFINEDです。
このフィールドは,Versionフィールドの値がMQMD_VERSION_2以降の場合だけ有効です。
● Persistence(MQLONG型) メッセージ永続性
このフィールドは,システム障害後とキューマネジャを再度開始したあとにメッセージが残るかどうかを示します。MQPUT命令およびMQPUT1命令では,次のどれかの値を指定します。
永続メッセージと非永続メッセージを,同じキューに格納できます。
応答を返す場合,アプリケーションは通常,問い合わせメッセージの永続性を応答メッセージに使用します。
MQGET命令で返される値は,MQPER_PERSISTENTまたはMQPER_NOT_PERSISTENTのどちらかです。
このフィールドは,MQGET命令の出力用フィールドです。また,MQPUT命令とMQPUT1命令の入力用フィールドです。
このフィールドの初期値はMQPER_PERSISTENCE_AS_Q_DEFです。
● Priority(MQLONG型) メッセージ優先度
MQPUT命令およびMQPUT1命令では,0以上の値か,次に示す値を指定してください。
MQGET命令で返される値は,常に0以上です。MQPRI_PRIORITY_AS_Q_DEFは返されません。
ローカルキューマネジャに定義された最大値,つまり,キューマネジャのMaxPriority属性の値よりも大きな優先度でメッセージを登録した場合,メッセージは受け付けられますが,キューマネジャの優先度の最大値に置き換えられます。この場合,MQPUT命令およびMQPUT1命令は,完了コードMQCC_WARNING,理由コードMQRC_PRIORITY_EXCEEDS_MAXIMUMで終了します。ただし,Priorityフィールドには,メッセージを登録したアプリケーションで指定した値が残ります。
応答を返す場合,アプリケーションは通常,問い合わせメッセージの優先度を応答メッセージに使用します。また,MQPRI_PRIORITY_AS_Q_DEFを指定しても,アプリケーションを変更することなく優先度を調整できます。
このフィールドは,MQGET命令の出力用フィールドです。また,MQPUT命令とMQPUT1命令の入力用フィールドです。
このフィールドの初期値はMQPRI_PRIORITY_AS_Q_DEFです。
● PutApplName(MQCHAR28型) 登録アプリケーション名
メッセージの登録元コンテキストの一部です。メッセージコンテキストについては,この章の「MQMD構造体 - メッセージ記述子」の「概要」,およびマニュアル「TP1/Message Queue プログラム作成の手引」を参照してください。
MQPUT命令およびMQPUT1命令のPutMsgOpts引数でMQPMO_SET_ALL_CONTEXTを指定した場合,入出力用フィールドとなります。このフィールドのヌル文字以降の情報は破棄されます。ヌル文字以降の文字は,キューマネジャによって空白に置き換えられます。MQPMO_SET_ALL_CONTEXTを指定しなかった場合,このフィールドは入力時に無視されて出力専用フィールドとなり,このフィールドには実行中のユーザサーバ名が設定されます。
MQPUT命令またはMQPUT1命令が成功すると,このフィールドには,転送されたメッセージのPutApplNameが設定されます。メッセージにコンテキストがなかった場合,このフィールドは空白で埋められます。
MQGET命令では,出力用フィールドとなります。
このフィールドの長さは,MQ_PUT_APPL_NAME_LENGTHに定義されています。
このフィールドの初期値は,C言語ではヌル文字列です。そのほかのプログラミング言語では,28個の空白です。
● PutApplType(MQLONG型) 登録アプリケーションタイプ
メッセージの登録元コンテキストの一部です。メッセージコンテキストについては,この章の「MQMD構造体 - メッセージ記述子」の「概要」,およびマニュアル「TP1/Message Queue プログラム作成の手引」を参照してください。
次に示す標準のタイプを使用できます。また,ユーザが定義したタイプも使用できます。ただし,ユーザが定義できる値の範囲は,MQAT_USER_FIRSTからMQAT_USER_LASTまでです。
また,次の特殊な値もあります。
MQPUT命令およびMQPUT1命令のPutMsgOpts引数でMQPMO_SET_ALL_CONTEXTを指定した場合,入出力用フィールドとなります。MQPMO_SET_ALL_CONTEXTを指定しなかった場合,このフィールドは入力時に無視されて出力専用フィールドとなり,このフィールドには「15」が設定されます。「15」は,MQIヘッダファイル(cmqc.hまたはCMQV.cbl)に設定されている「MQAT_OPEN_TP1」または「MQAT-OPEN-TP1」の値です。cmqc.hまたはCMQV.cblを参照してください。
MQPUT命令またはMQPUT1命令が成功すると,このフィールドには,転送されたメッセージのPutApplTypeが設定されます。メッセージにコンテキストがなかった場合,MQAT_NO_CONTEXTが設定されます。
MQGET命令では,出力用フィールドとなります。
このフィールドの初期値はMQAT_NO_CONTEXTです。
● PutDate(MQCHAR8型) 登録日付
メッセージの登録元コンテキストの一部です。メッセージコンテキストについては,この章の「MQMD構造体 - メッセージ記述子」の「概要」,およびマニュアル「TP1/Message Queue プログラム作成の手引」を参照してください。
キューマネジャは,次の形式でこのフィールドを生成します。
PutDateフィールドとPutTimeフィールドには,グリニッジ標準時(GMT)を使用します。システムの時計を正しく設定してください。
トランザクション内からメッセージを登録した場合,コミットした日付ではなく,登録した日付になります。
MQPUT命令およびMQPUT1命令のPutMsgOpts引数でMQPMO_SET_ALL_CONTEXTを指定した場合,入出力用フィールドとなります。このフィールドの内容は,キューマネジャによってチェックされません。ただし,フィールド内のヌル文字以降の情報は破棄されます。ヌル文字以降の文字は,キューマネジャによって空白に置き換えられます。MQPMO_SET_ALL_CONTEXTを指定しなかった場合,このフィールドは入力時に無視されて出力専用フィールドとなり,このフィールドにはメッセージを登録した日付が設定されます。
MQPUT命令またはMQPUT1命令が成功すると,このフィールドには転送されたメッセージのPutDateが設定されます。メッセージにコンテキストがなかった場合,このフィールドは空白で埋められます。
MQGET命令では,出力用フィールドとなります。
このフィールドの長さは,MQ_PUT_DATE_LENGTHに定義されています。
このフィールドの初期値は,C言語ではヌル文字列です。そのほかのプログラミング言語では,8個の空白です。
● PutTime(MQCHAR8型) 登録時刻
メッセージの登録元コンテキストの一部です。メッセージコンテキストについては,この章の「MQMD構造体 - メッセージ記述子」の「概要」,およびマニュアル「TP1/Message Queue プログラム作成の手引」を参照してください。
キューマネジャは,次の形式でこのフィールドを生成します。
PutDateフィールドとPutTimeフィールドには,グリニッジ標準時(GMT)を使用します。システムの時計を正しく設定してください。
トランザクション内からメッセージを登録した場合,コミットした時刻ではなく登録した時刻になります。
MQPUT命令およびMQPUT1命令のPutMsgOpts引数でMQPMO_SET_ALL_CONTEXTを指定した場合,入出力用フィールドとなります。このフィールドの内容は,キューマネジャによってチェックされません。ただし,フィールド内のヌル文字以降の情報は破棄されます。ヌル文字以降の文字は,キューマネジャによって空白に置き換えられます。MQPMO_SET_ALL_CONTEXTを指定しなかった場合,このフィールドは入力時に無視されて出力専用フィールドとなり,このフィールドにはメッセージを登録した時間が設定されます。
MQPUT命令またはMQPUT1命令が成功すると,このフィールドには転送されたメッセージのPutTimeが設定されます。メッセージにコンテキストがなかった場合,このフィールドは空白で埋められます。
MQGET命令では,出力用フィールドとなります。
このフィールドの長さは,MQ_PUT_TIME_LENGTHに定義されています。
このフィールドの初期値は,C言語ではヌル文字列です。そのほかのプログラミング言語では,8個の空白です。
● ReplyToQ(MQCHAR48型) 応答キュー名
アプリケーションがMQMT_REPLYタイプとMQMT_REPORTタイプのメッセージを取り出すキューの名称です。ReplyToQMgrのキューマネジャに定義されたキューのローカル名称です。
MQPUT命令およびMQPUT1命令では,MsgTypeフィールドがMQMT_REQUESTのとき,またはReportフィールドで報告を要求したときに,このフィールドに空白を指定できません。ただし,ここで指定した値は,どんなタイプのメッセージの場合でも,それを取り出すアプリケーションに返されます。
ReplyToQMgrフィールドが空白の場合,ローカルキューマネジャは,ReplyToQと同じ名称のキューの定義を参照します。この名称のリモートキューのローカル定義があれば,転送されるメッセージのReplyToQの名称は,リモートキューのローカル定義のRemoteQName属性で置き換えられます。この値は,MQGET命令でメッセージを取り出すアプリケーションに,メッセージ記述子の一部として返されます。リモートキューのローカル定義がない場合,ReplyToQフィールドは変更されません。
名称を指定するとき,余りを空白で埋めることができます。また,最初のヌル文字以降の文字は,空白として扱われます。ただし,キューの名称の規則に従っているかどうかはチェックされません。これは,転送されるメッセージのReplyToQの名称が置き換えられた場合も同様です。名称を指定したかどうかが,必要時にチェックされるだけです。
応答キューが必要ない場合,ReplyToQフィールドには,次のどれかを指定してください。ただし,チェックはされません。
このフィールドは,左詰めで指定します。
MQGET命令では,この名称は,フィールドの余りが常に空白で埋められて返されます。
報告を要求したメッセージが配布されなかった場合で,報告メッセージも指定したキューに登録されなかったときは,登録元メッセージも報告メッセージもデッドレターキューに転送されます。詳細については,「3. オブジェクトの属性」の「キューマネジャの属性」でDeadLetterQName属性の説明を参照してください。
このフィールドは,MQGET命令の出力用フィールドです。また,MQPUT命令とMQPUT1命令の入力用フィールドです。
このフィールドの長さは,MQ_Q_NAME_LENGTHに定義されています。
このフィールドの初期値は,C言語ではヌル文字列です。そのほかのプログラミング言語では,48個の空白です。
● ReplyToQMgr(MQCHAR48型) 応答キューマネジャ名
応答メッセージまたは報告メッセージを送信する先の,キューマネジャ名です。ReplyToQフィールドの値は,このキューマネジャに定義されたローカルキューの名称です。
ReplyToQMgrフィールドが空白の場合,ローカルキューマネジャは,ReplyToQと同じ名称のキューの定義を参照します。この名称のリモートキューのローカル定義があれば,転送されるメッセージのReplyToQMgrの名称は,リモートキューのローカル定義のRemoteQMgrName属性の値で置き換えられます。この値は,MQGET命令でメッセージを取り出すアプリケーションに,メッセージ記述子の一部として返されます。リモートキューのローカル定義がない場合,ReplyToQMgrフィールドはローカルキューマネジャの名称になります。
名称を指定するとき,余りを空白で埋めることができます。また,最初のヌル文字以降の文字は,空白として扱われます。ただし,キューマネジャの名称の規則に従っているかどうかはチェックされません。また,そのキューマネジャ名が送信先のキューマネジャで認識されているかどうかも,チェックされません。これは,転送されるメッセージのReplyToQMgrの名称が置き換えられた場合も同様です。オブジェクトの命名規則については,マニュアル「TP1/Message Queue プログラム作成の手引」を参照してください。
応答キューが必要ない場合,ReplyToQMgrフィールドは,次のどれかを指定してください。ただし,チェックはされません。
このフィールドは,左詰めで指定します。
MQGET命令では,この名称は,フィールドの余りが常に空白で埋められて返されます。
このフィールドは,MQGET命令の出力用フィールドです。また,MQPUT命令とMQPUT1命令の入力用フィールドです。
このフィールドの長さは,MQ_Q_MGR_NAME_LENGTHに定義されています。
このフィールドの初期値は,C言語ではヌル文字列です。そのほかのプログラミング言語では,48個の空白です。
● Report(MQLONG型) 報告オプション
報告とは,登録元メッセージに関連して発生した各種の事象についてアプリケーションに通知するためのメッセージです。Reportフィールドを使用すると,登録元アプリケーションは次のことを指定できます。
次に示す6種類の報告から,一つまたは複数を指定できます。指定しなくてもかまいません。
それぞれの種類の報告では,報告メッセージ内にアプリケーションデータを組み込むか組み込まないかの,どちらかを指定してください。複数の種類の報告メッセージが必要なとき,または,MsgIdとCorrelIdをどのように生成するかを制御したいときは,次のどちらかに従ってください。
なお,オプションおよびその指定方法の一覧については,「付録A 命令および引数の一覧」を参照してください。
例外報告オプション:
保持時間終了報告オプション:
到着確認報告オプション:
配布確認報告オプション:
肯定動作または否定動作の報告オプション:
受信アプリケーションが肯定動作または否定動作の報告メッセージの送信を要求するために,次に示すオプションを指定できます。
肯定動作に対応する条件か,否定動作に対応する条件か決めるのはアプリケーションの責任です。しかし,もし要求が部分的に実行されたのであれば,PAN報告よりもNAN報告を生成することをお勧めします。また,すべての可能な条件は,肯定動作または否定動作の両方に対応させるのでなく,どちらかに対応させることをお勧めします。
MsgId設定用オプション:
報告メッセージまたは応答メッセージに,どのようにMsgIdを設定するかを次のオプションで指定できます。
CorrelId設定用オプション:
報告メッセージまたは応答メッセージにどのようにCorrelIdを設定するかを,次のオプションで指定できます。
応答または報告を生成するサーバでは,登録元メッセージにMQRO_PASS_CORREL_IDおよびMQRO_PASS_MSG_IDオプションが指定されているかどうか,確認する必要があります。指定されていれば,オプションの説明の記述に従ってください。指定されていなければ,省略時の記述に従ってください。
後処理オプション:
アプリケーションから登録したメッセージをあて先キューに登録できない場合,次に示すオプションのどちらかを指定して,メッセージの後処理を制御できます。これらのオプションが適用されるのは,送信側アプリケーションが要求した場合に,例外報告メッセージが生成されるときだけです。アプリケーションは後処理オプションを,例外報告の要求とは無関係に設定できます。
TP1/Message Queueは,送信側からMQRO_DISCARD_MSGオプション付きの問い合わせメッセージを受信しても,MQRO_DEAD_LETTER_Qオプションの動作をします。両方指定しない場合,MQRO_DEAD_LETTER_Qオプションの動作をします。
デフォルトオプション:
次のオプションは,ほかに報告オプションを指定しない場合に指定できます。
MQMD構造体のフィールド | 値 |
---|---|
StrucId | MQMD_STRUC_ID |
Version | MQMD_VERSION_2 |
Report | MQRO_NONE |
MsgType | MQMT_REPORT |
Expiry | MQEI_UNLIMITED |
Feedback | 報告の種類に応じて (MQFB_COA,MQFB_COD,MQFB_EXPIRATION,またはMQRC_*) |
Encoding | 登録元のメッセージ記述子から複写 |
CodedCharSetId | 登録元のメッセージ記述子から複写 |
Format | 登録元のメッセージ記述子から複写 |
Priority | 登録元のメッセージ記述子から複写 |
Persistence | 登録元のメッセージ記述子から複写 |
MsgId | 登録元のメッセージ記述子の報告オプションどおり |
CorrelId | 登録元のメッセージ記述子の報告オプションどおり |
BackoutCount | 0 |
ReplyToQ | 空白 |
ReplyToQMgr | 空白 |
UserIdentifier | MQPMO_PASS_IDENTITY_CONTEXTオプションによって設定 |
AccountingToken | MQPMO_PASS_IDENTITY_CONTEXTオプションによって設定 |
ApplIdentityData | MQPMO_PASS_IDENTITY_CONTEXTオプションによって設定 |
PutApplType | MQAT_QMGR,またはMCAに応じた値 |
PutApplName | キューマネジャ名またはMCA名の先頭の28文字 |
PutDate | 報告メッセージが送信された日付 |
PutTime | 報告メッセージが送信された時刻 |
ApplOriginData | 空白 |
GroupId | 登録元のメッセージ記述子から複写 |
MsgSeqNumber | 登録元のメッセージ記述子から複写 |
Offset | 登録元のメッセージ記述子から複写 |
MsgFlags | 登録元のメッセージ記述子から複写 |
OriginalLength | MQOL_UNDEFINEDでなければ,登録元のメッセージ記述子から複写される。それ以外の場合は,元のメッセージデータの長さが設定される。 |
報告タイプ | 値 |
---|---|
到着確認 | MQRO_COA_WITH_FULL_DATA |
配布確認 | MQRO_COD_WITH_FULL_DATA |
例外 | MQRO_EXCEPTION_WITH_FULL_DATA |
保持時間終了 | MQRO_EXPIRATION_WITH_FULL_DATA |
報告タイプ | 値 |
---|---|
到着確認 | MQRO_COA |
配布確認 | MQRO_COD |
例外 | MQRO_EXCEPTION |
保持時間終了 | MQRO_EXPIRATION |
Reportフィールドは,MQGET命令の出力用フィールド,およびMQPUT命令とMQPUT1命令の入力用フィールドです。
このフィールドの初期値はMQRO_NONEです。
● StrucId(MQCHAR4型) 構造体識別子
次の値を取ります。
これは入力用のフィールドです。
このフィールドの初期値はMQMD_STRUC_IDです。
● UserIdentifier(MQCHAR12型) ユーザ識別子
メッセージの識別コンテキストの一部です。メッセージコンテキストの詳細については,この章の「MQMD構造体 - メッセージ記述子」の「概要」,およびマニュアル「TP1/Message Queue プログラム作成の手引」を参照してください。
UserIdentifierフィールドは,メッセージを最初に登録したアプリケーションのユーザ識別子を指定します。オブジェクトをオープンする場合のObjDesc引数のAlternateUserIdフィールドに,この情報を使用できます。
この情報は,キューマネジャでは文字データとして扱われます。ただし,データの形式は規定されません。MQOPEN命令でMQOO_ALTERNATE_USER_AUTHORITYを指定した場合,またはMQPUT1命令でMQPMO_ALTERNATE_USER_AUTHORITYを指定した場合は,キューマネジャによってこの情報が生成されるときに,ObjDesc引数のAlternateUserIdが使用されます。省略した場合,環境に依存するユーザ識別子として,TP1/Message Queueでは「OPENTP1」が使用されます。
通常,このフィールドはキューマネジャによって生成される出力用のフィールドです。しかし,MQPUTまたはMQPUT1命令の場合,このフィールドを入出力用のフィールドにして,キューマネジャに生成させる代わりにフィールドを指定できます。
MQPUTまたはMQPUT1命令の場合にキューマネジャにUserIdentifierフィールドを生成させないときは,PutMsgOpts引数にはMQPMO_SET_IDENTITY_CONTEXTまたはMQPMO_SET_ALL_CONTEXTのどちらかを指定します。また,UserIdentifierフィールドにユーザ識別子を指定します。
MQPUT命令およびMQPUT1命令のPutMsgOpts引数でMQPMO_SET_IDENTITY_CONTEXTまたはMQPMO_SET_ALL_CONTEXTを指定した場合,入出力用フィールドとなります。このフィールドのヌル文字以降の情報は破棄されます。ヌル文字以降の文字は,キューマネジャによって空白に置き換えられます。MQPMO_SET_IDENTITY_CONTEXTもMQPMO_SET_ALL_CONTEXTも指定しなかった場合,このフィールドは入力時に無視されて出力専用フィールドとなり,このフィールドには「OPENTP1△△△△△」が設定されます。△は空白を表します。
MQPUT命令またはMQPUT1命令が成功すると,このフィールドには,転送されたメッセージのUserIdentifierが設定されます。メッセージにコンテキストがなかった場合,このフィールドは空白で埋められます。
MQGET命令では,出力用フィールドとなります。
このフィールドの長さは,MQ_USER_ID_LENGTHに定義されています。
このフィールドの初期値は,C言語ではヌル文字列です。そのほかのプログラミング言語では,12個の空白です。
● Version(MQLONG型) 構造体バージョン番号
次の値を取ります。
MQMD_VERSION_2以降の構造体にだけ存在するフィールドについては,そのことがフィールドの説明に記載されています。次に示す定数は,現在のバージョン番号を指定します。
これは入力用のフィールドです。
このフィールドの初期値はMQMD_VERSION_1です。