以下の図は、ユーザー出口の働きを示しています。
番号が付けられているイベントについては、図の後で説明されています。
例として MQInput ノードを使用していますが、関数は、ユーザー定義入力ノードも含め、すべての入力ノードに適用されます。同様に、Compute および MQOutput ノードを任意の同等のノードに置き換えることができます。

- メッセージが入力ソースからデキューされる (フローへの読み取り)。
組み込みノードとユーザー定義ノードは、ユーザー出口の呼び出し方法が少し異なります。組み込み入力ノードの場合、データを外部ソースから読み取った後、できるだけ早期にユーザー出口が呼び出されます。ユーザー定義の入力ノードの場合、
ノードがメッセージを伝搬する前にユーザー出口が呼び出されます。
- メッセージが処理用にノードに伝搬される。
- ノード処理が完了する。
- トランザクションが完了した後にユーザー出口が呼び出される (したがってユーザー出口の処理はそのトランザクションの一部ではありません)。
トランザクション処理がフローによって完了されない場合でも、ユーザー出口は呼び出されます。
メッセージ・フロー・プロパティー「コミット・カウント」が 1 より大きい場合は、イベント 1 と 4 の間に存在する比率は多対 1 です。この比率は、特定の入力ノードに固有のシナリオにも当てはまることがあります。例えば、MQInput ノードが「メッセージ・グループによるコミット」プロパティーを選択して構成されている場合が該当します。
任意の数のこれらのイベントを追跡するためのユーザー出口を作成できます。これらのイベントごとに、
以下のデータがユーザー出口で使用可能です。特記されていない限り、
アクセスはすべて読み取り専用です。
- メッセージがデキューされる場合:
- ビット・ストリーム
- 入力ノード
- 環境ツリー (読み取りおよび書き込み)
- メッセージがノードに伝搬される場合:
- メッセージ・ツリー
- LocalEnvironment ツリー (読み取りおよび書き込み)
- 例外リスト
- 環境ツリー (読み取りおよび書き込み)
- ソース・ノード
- ターゲット・ノード
- ノード処理が完了する場合:
- メッセージ・ツリー
- LocalEnvironment ツリー (読み取りおよび書き込み)
- 例外リスト
- 環境ツリー (読み取りおよび書き込み)
- ノード
- アップストリーム・ノード
- 例外 (ある場合)
- トランザクションの終了の場合:
- 入力ノード
- 例外 (ある場合)
- 環境ツリー (読み取りおよび書き込み)
複数のユーザー出口を登録できます。登録済みの場合は、定義された順序で呼び出されます (mqsichangeflowuserexits コマンドを参照してください)。
ユーザー出口によってメッセージ・アセンブリー (Message および Environment) に行われたすべての変更は、以降のユーザー出口からも可視です。
ユーザー出口が呼び出されるときに、以下の情報を照会できます。
- メッセージ・フロー情報:
- メッセージ・フロー名
- ブローカー名
- ブローカーのキュー・マネージャー名
- 実行グループ名
- メッセージ・フローの「コミット・カウント」プロパティー
- メッセージ・フローの「コミット・インターバル」プロパティー
- メッセージ・フローの「整合トランザクション」プロパティー。
- ノード情報:
- ノード名
- ノード・タイプ
- ターミナル名
- ノード・プロパティー
ユーザー出口は、以下の作業を実行することもできます。
- メッセージ・アセンブリーのナビゲートおよび読み取り (Message、LocalEnvironment、ExceptionList)
- Environment ツリーのナビゲートおよび読み取りまたは書き込み。
ユーザー出口は動的に登録でき、構成を再デプロイする必要はありません。