SubFlow - サブフローの呼出し

指定したフローをサブフローとして呼び出します。
呼び出すサブフローにはこのコンポーネントの入力ストリームを渡します。

■ストリーム情報

入力フォーマットすべて
接続数1
説明 呼び出すサブフローの入力ストリーム型と同じである必要があります。
出力フォーマットすべて
説明入力をそのまま出力 が「いいえ」の場合、出力はサブフローが返すストリームになります。サブフローが大容量ストリームを返した場合、呼び出し元のフローの設定に関わらず、必ず大容量ストリームが出力されます。
サブフローがEndコンポーネントで終了した場合(つまり出力ストリームがない場合)は、入力をそのまま出力 の設定に関わらず、このコンポーネントの入力ストリームを出力します。

■コンポーネントプロパティ

名前プロパティ型マッピング説明
実行するフローsubflow- 実行するサブフローを指定します。
プロパティ値フィールドをクリックして表示されるフローの一覧から指定します。サブフローとして実行できるのはプロジェクトオーナー(サーバーに接続しているユーザー)が同じフローのみです。
戻り値string   出力 サブフローの終了コンポーネントで設定された戻り値を参照できます。
入力をそのまま出力streamPassThrough- 入力をそのまま出力とするかどうか選択します。
はい [true] - 入力ストリームがそのまま出力ストリームになります。
いいえ [false] - 出力ストリームはサブフローの出力ストリームになります。
パラメーターcategory入力&出力 指定したサブフローのパラメーターです。
実行するフロー でフローを指定すると、自動的にサブフローで公開されているフロー変数が設定されます。本コンポーネントの前にマッパーを連結して、ここに値をマッピングすることによりサブフローに値を渡すことができます。また、このプロパティは自動的にストリーム変数になります。本コンポーネントの後に連結したマッパーで、ストリーム変数として見えるようになっています。
ストリーム変数については、「はじめに」-「詳細なトピック」-「フローの構成要素」-「変数」-「ストリーム変数」を参照してください。
サブフローのフロー変数については、「はじめに」-「詳細なトピック」-「フロー内の処理の流れ」-「サブフロー」の「フロー変数」を参照してください。

■トランザクション処理

コミットサブフローをコミットします。
ロールバックサブフローをロールバックします。

■エラー処理

タイプパラメーターエラー処理フロー
へのストリーム
エラー
コード
説明
汎用 なし コンポーネントの入力ストリーム なし サブフローで定義された入出力ストリームの型が呼出し元フローと異なる場合
なし サブフローがエラーにより終了した場合

■サブフローとトランザクション

サブフローのトランザクション制御は、その呼出し元フローの開始コンポーネントのトランザクション化プロパティの指定に依存します。

呼出し元フローがトランザクション化している(トランザクション化プロパティが「はい」)場合

サブフローのトランザクションは呼出し元フローのトランザクションに組み込まれます。サブフローの終了コンポーネントのトランザクションプロパティでの設定は無視され、呼出し元フローのトランザクションがコミットされれば、サブフローもコミットされ、ロールバックされれば、サブフローもロールバックされます。

呼出し元フローがトランザクション化していない(トランザクション化プロパティが「いいえ」)場合

トランザクション化していない、かつサブフローのみがトランザクション化している(サブフローの開始コンポーネントのトランザクション化プロパティが「はい」)場合、サブフローだけが独立したトランザクションになります。トランザクションがコミットされるかロールバックされるかはサブフローの終了コンポーネントのトランザクションプロパティの値によって決定します。実際にその処理が行われるのは、呼出し元フローのサブフローコンポーネントがコミットされるタイミングです。

■サブフローでのフロー名やフロー変数の変更

サブフローには、同一プロジェクト内のフロー、別プロジェクトのフローを設定することができます。

呼出し元フローとサブフローが同一プロジェクト内にある場合

サブフローのフロー名の変更やフロー変数の変更は自動的に検知され、呼出し元フローのサブフローコンポーネントの設定値は自動的に更新されます。

呼出し元フローとサブフローが別プロジェクトの場合

サブフローのフロー名を変更すると実行するフロー の指定が無効になるため、再度実行するフロー の設定を行う必要があります。サブフローのフロー変数や出力ストリームを変更した場合は、呼出し元フローに変更内容を反映させます。変更内容を反映するには、呼出し元フローのSubFlowコンポーネントを右クリックして表示されるメニューから「サブフロー情報の更新」をクリックします。

■SubFlowとFlowInvokerの違い

SubFlowコンポーネントとFlowInvokerコンポーネントはいずれも別のフローをサブルーチン的に呼び出すことができますが、細かい部分ではそれぞれの動作は大きく異なります。
状況に応じて適切なコンポーネントを使い分けてください。

SubFlowFlowInvoker
トランザクションStartコンポーネントの設定に従ってサブフローも呼び出し元フローと一連トランザクションになります。 呼び出し毎に異なる別トランザクションになります。
呼び出し元のトランザクションも各呼び出しとは異なる別トランザクションです。
呼び出し元のフローは実行したフローの終了まで待機しますが、それによってトランザクションが中断されるわけではありません。
セッション実行中のセッションはすべて同一です。
もちろんセッション変数は共有されます。
実行するフローのオーナー毎にサブセッションが作成されます。
サブセッションのセッションIDは「<呼び出し元のセッションID>-<枝番>」です。
サブセッションのライフタイムは呼び出し元のセッションと同じです。
呼び出し元のセッションが同じであればそこから実行される同一ユーザーのセッションはすべて同じであり、その間セッション変数は共有されます。
異なるユーザー間でのセッション変数、StreamPutコンポーネントでメモリ上の保持したストリーム(保持スコープがセッションの場合)の共有はできません。
リクエスト実行中のリクエストはすべて同一です。
もちろんリクエスト変数は共有されます。
呼び出し毎に独立したひとつのリクエストとなります。
リクエスト変数は毎回初期化されます。
それぞれの呼び出しのリクエストIDは「<呼び出し元のリクエストID>-<枝番>」です。
フロー名の
マッピング
実行するフローは設計時に静的に設定され変更することはできません。実行するフローのユーザー、実行するフローともにマッピングによって動的に変更することができます。
NextフローサブフローではNextフローは実行されません。Nextフローがある場合はそれを実行してから呼び出し元にリターンします。
実行ユーザー実行ユーザーは呼び出し元のフローと同じです。ユーザー名とパスワードをマッピングによって動的に変更することができます。
UIサポートフローの設定にフロー選択ダイアログが使用でき、フロー設定時に出力ストリームやパラメーターが自動的に設定されます。 フロー名やパラメーターは手入力で設定しなければなりません。
(先にSubFlowコンポーネントとしてプロパティを設定しておきコンポーネントの右クリックメニューから「コンポーネントの置き換え」で FlowInvokerコンポーネントに変更することはできます。)
デバッグデバッガーによってサブフローにステップインすることができます。デバッガーではFlowInvokerコンポーネントはひとつのコンポーネントとして扱われ実行するフローのデバッグはできません。
プロファイルモードの場合、FlowProfile.logには実行したフローのログも出力されますがデザイナー上では呼び出し元のプロファイル のみが参照できます。

FlowInvokerによって実行されるフローは呼び出し側のフローと同一スレッドで実行されます。
そのためflow-ctrlやモニターツールなどではリクエストを開始したフローと現在実行中のフローのオーナーが異なることがありえます。