課金トークンフィールドが存在することを示します。
このフラグが指定された場合,MQPMO_SET_IDENTITY_CONTEXT または
MQPMO_SET_ALL_CONTEXT が Options フィールドに指定されなければなりません。この条件が 満たされない場合,MQRC_PMO_RECORD_FLAGS_ERROR の理由コードで失敗します。
MQPMR 構造体のフィールドが存在しない場合,次のフラグを指定できます。
MQPMRF_NONE
登録メッセージレコードが存在しないことを示します。
この値が指定されると,RecsPresent フィールドは 0 でなければなりません。同時に,
PutMsgRecOffset フィールドおよび PutMsgRecPtr フィールドは,どちらも 0 でなければなりません。
MQPMRF_NONE はプログラムの文書化のために定義されています。値としては 0 が定義されていま すが,プログラムを文書化する以外の目的はありません。
次の場合,MQRC_PMO_RECORD_FLAGS_ERROR の理由コードで失敗します。
• PutMsgRecFields フィールドに不正なフラグが含まれている場合
• 登録メッセージレコードが指定されているが,PutMsgRecFields フィールドが MQPMRF_NONE で ある場合
これは入力用のフィールドです。
このフィールドの初期値は MQPMRF_NONE です。
このフィールドは,Version フィールドの値が MQPMO_VERSION_2 以降の場合だけ有効です。
● PutMsgRecOffset(MQLONG 型) 最初の登録メッセージレコードまでのオフセット
MQPMO 構造体の先頭から最初の MQPMR 構造体登録メッセージレコードまでのバイトオフセットで す。オフセットは正の場合も負の場合もあります。PutMsgRecOffset フィールドは,配布リストにメッ セージを登録するときだけ使用されます。RecsPresent フィールドが 0 の場合は無視されます。
配布リストにメッセージが登録されるとき,一つ以上の MQPMR 構造体登録メッセージレコードの配列 があて先ごとのメッセージ属性を指定するために指定されなければなりません。指定する属性を次に示し ます。
• メッセージ識別子
• 相関識別子
• グループ識別子
• フィードバック値
• 課金トークン
この属性をすべて指定する必要はありません。ただし,どの属性を選択しても,フィールドは正しい順序 に指定されなければなりません。詳細については,この章の「MQPMR 構造体 − 登録メッセージレ
コード」を参照してください。
配布リストのオープン時に,MQOD 構造体によって指定されたオブジェクトレコードと同じ数の登録メッ セージレコードが存在しなければなりません。登録メッセージレコードは,対応するオブジェクトレコー ドによって指定されるキューに対してメッセージ属性を与えます。配布リストのオープンに失敗したキュー には,配列の適当な位置に配置される登録メッセージレコードが登録されなければなりません。その場合,
メッセージ属性は無視されます。
登録メッセージレコードの数が,オブジェクトレコードの数と異なることがあります。オブジェクトレコー ドより登録メッセージレコードが少ない場合,登録メッセージレコードのないあて先のメッセージ属性は,
メッセージ記述子 MQMD 構造体の対応するフィールドの属性が指定されます。オブジェクトレコードよ り登録メッセージレコードが多い場合,必要数以上のレコードは使用されません。ただし,使用されない レコードにもアクセスできなければなりません。
登録メッセージレコードの指定は任意です。ただし,RecsPresent フィールドがある場合は,指定しなけ ればなりません。
登録メッセージレコードは MQOD 構造体のオブジェクトレコードと同様の方法で指定できます。
PutMsgRecOffset フィールドのオフセットを指定するか,または PutMsgRecPtr フィールドのアドレス を使用して指定してください。詳細は,この章の「MQDH 構造体 − 配布ヘッダ」で ObjectRecOffset フィールドを参照してください。
PutMsgRecOffset フィールドと PutMsgRecPtr フィールドは同時に使用できません。両方のフィールド が 0 以外の場合,MQRC_PUT_MSG_RECORDS_ERROR の理由コードで失敗します。
これは入力用のフィールドです。
このフィールドの初期値は 0 です。
このフィールドは,Version フィールドの値が MQPMO_VERSION_2 以降の場合だけ有効です。
● PutMsgRecPtr(MQPTR 型) 最初の登録メッセージレコードのアドレス
最初の登録メッセージレコードのアドレスです。PutMsgRecPtr フィールドは,配布リストにメッセージ が登録されたときだけ使用されます。RecsPresent フィールドが 0 の場合は無視されます。
PutMsgRecPtr フィールドまたは PutMsgRecOffset フィールドのどちらかを登録メッセージレコードを 指定するのに使用できます。ただし,同時に使用できません。詳細については,「PutMsgRecOffset フィー ルド」を参照してください。PutMsgRecPtr フィールドが使用されない場合は,ヌルポインタか 0 を設定 しなければなりません。
これは入力用のフィールドです。
このフィールドの初期値は,ポインタをサポートしているプログラミング言語ではヌルポインタです。文 字列の場合はヌル文字列です。
このフィールドは,Version フィールドの値が MQPMO_VERSION_2 以降の場合だけ有効です。
注意事項
プログラミング言語がポインタのデータ型をサポートしていないオペレーティングシステムでは,
このフィールドは,初期値がすべてヌル文字列の,適当な長さのバイト文字列として宣言されます。
● RecsPresent(MQLONG 型) 登録メッセージレコード数または応答レコード数
アプリケーションによって指定された MQPMR 構造体の登録メッセージレコード数または MQRR 構造体 の応答レコード数です。メッセージが配布リストに登録されたときだけ,この数が 0 より大きくなります。
登録メッセージレコードまたは応答レコードは任意に選択できます。アプリケーションはどちらのレコー ドも指定しなかったり,どちらか一つのレコードだけ選択したりできます。ただし,アプリケーションが 両方のレコードを指定する場合は,それぞれの RecsPresent フィールドのレコードを指定しなければなり ません。
RecsPresent フィールドの値は,配布リストのあて先の数と同じである必要はありません。指定された値 が必要数より大きい場合,必要数以上のレコードは使用されません。必要数より少ないレコードが指定さ れた場合,登録メッセージレコードがないあて先のメッセージのプロパティ値は初期値を取ります。詳細 については,「PutMsgRecOffset フィールド」を参照してください。
RecsPresent フィールドの値が 0 より小さい,または 0 より大きいがメッセージは配布リストに登録され ない場合,理由コード MQRC_RECS_PRESENT_ERROR で失敗します。
これは入力用のフィールドです。
このフィールドの初期値は 0 です。
このフィールドは,Version フィールドの値が MQPMO_VERSION_2 以降の場合だけ有効です。
● ResolvedQMgrName(MQCHAR48 型) 受信キューマネジャ名
ResolvedQName のキューを定義しているキューマネジャの名称(実名)です。
ローカルキューマネジャが名称解決を実行したあとのあて先キューマネジャの名前です。返される名前は,
ResolvedQName フィールドに指定されたキューを保持するキューマネジャの名前です。
ResolvedQMgrName フィールドは,ローカルキューマネジャの名前になることがあります。
空白でない値が返されるのは,オブジェクトが単一のキューである場合だけです。オブジェクトが配布リ ストである場合,返される値は未定義です。
これは出力用のフィールドです。
このフィールドの長さは,MQ_Q_MGR_NAME_LENGTH に定義されています。
このフィールドの初期値は,C 言語ではヌル文字列です。そのほかのプログラミング言語では,48 個の空 白です。
● ResolvedQName(MQCHAR48 型) 受信キュー名
キューマネジャによって設定される出力用のフィールドです。ローカルキューマネジャが名称解決を実行したあとのあて先キューの名前です。返される名前は,
ResolvedQMgrName フィールドに指定されたキューマネジャが保持するキューの名前です。キューがモ デルキューでオープンされた場合,生成された動的ローカルキューの名称が返されます。
空白でない値が返されるのは,オブジェクトが単一のキューである場合だけです。オブジェクトが配布リ ストである場合,返される値は未定義です。
これは出力用のフィールドです。
このフィールドの長さは,MQ_Q_NAME_LENGTH に定義されています。
このフィールドの初期値は,C 言語ではヌル文字列です。そのほかのプログラミング言語では,48 個の空 白です。
● ResponseRecOffset(MQLONG 型) 最初の応答レコードまでのオフセット
MQPMO 構造体の先頭から最初の MQRR 構造体の応答レコードまでのバイトオフセットです。オフセッ トは,正の場合も負の場合もあります。ResponseRecOffset フィールドは,メッセージが配布リストに登 録されるときだけ使用されます。RecsPresent フィールドが 0 の場合は無視されます。
メッセージが配布リストに登録されるとき,一つ以上の MQRR 構造体の応答レコードの配列が,メッセー ジの送信が成功しなかったキューと,その失敗の理由を特定するために指定されなければなりません。な お,メッセージの送信が成功しなかったキューは MQRR 構造体の CompCode フィールドに記述され,
その失敗の理由は MQRR 構造体の Reason フィールドに記述されます。
メッセージは,キューのオープンに失敗したか,登録操作が失敗したかのどちらかの理由で送信されてい ない可能性があります。キューマネジャが応答レコードを設定するのは,命令の結果が混在している場合 だけです。例えば,次のような場合です。
• あるメッセージは送信に成功したが,ほかのメッセージが失敗している場合
• すべての送信が失敗し,その理由が異なる場合
この場合,MQRC_MULTIPLE_REASONS の理由コードが出現します。同じ理由コードがすべてのキュー に適用される場合,応答レコードは設定されません。
配布リストがオープンされたとき,MQOD 構造体によって指定されたオブジェクトレコードと同じ数の 応答レコードが存在しなければなりません。応答レコードが必要であれば,対応するオブジェクトレコー ドによって指定されるキューに対する登録の完了コードと理由コードに設定されます。配布リストのオー プンに失敗したキューには,配列の適当な位置に配置される応答レコードがなければなりません。その場 合,登録操作ではなく,オープン操作の完了コードと理由コードが設定されます。
応答レコードの数がオブジェクトレコードの数と異なることがあります。
オブジェクトレコードよりも応答レコードが少ない場合,アプリケーションは登録に失敗したあて先や,
失敗した理由のすべてを特定できなくなります。オブジェクトレコードよりも応答レコードが多い場合,
必要数以上のレコードは使用されません。ただし,使用されないレコードにもアクセスできなければなり ません。応答レコードは任意で指定できますが,指定された場合は RecsPresent フィールドがなければな りません。
応答レコードはオブジェクトレコードと同様に,ResponseRecOffset フィールドのオフセットを指定する か,または ResponseRecPtr フィールドのアドレスを指定できます。指定方法については,この章の