プログラム間の制御の移動により発生するオーバーヘッドを削減できます。
CICS® システムおよび IMS™ システムでは、セグメント化された converse ステートメントが現行トランザクションを終了します。ユーザーからの端末入力が、新規トランザクションを開始します。新規トランザクションは、プログラムが converse ステートメントを処理するときに sysVar.transactionID システム変数によって識別されます。 sysVar.transactionID のデフォルト値は、現行トランザクションの初期プログラムに関連付けられたトランザクション ID です。
別のプログラムから transfer to program ステートメントにより開始されたプログラムでセグメント化された converse ステートメントを使用する (例えば、A が transfer to program ステートメントを使用して B に制御権を移動し、B が converse ステートメントを発行する) 場合、プログラム B の converse からの入力時にデフォルトのトランザクション ID が再度元のプログラム (A) を開始します。生成されたプログラム A は、作業データベースからトランザクション状況レコードを読み取り、B が converse を発行したプログラムであることを判別し、B に制御権を移動して処理を続行します。このロジックは、自動的にプログラムに生成されます。
使用する各トランザクション ID は、対応するプログラムに関連付けられたものとして IMS または CICS に対して定義されている必要があります。
以下の 2 つの図は、デフォルトのトランザクション ID で transfer to program ステートメントを使用する場合と、sysVar.transactionID 変数を設定する場合の、プログラム・フローの違いを示しています。


CICS では、デフォルトのトランザクション ID を使用する場合、トランザクション ABCD をメニュー・プログラムに関連付けるための 1 つの RDO TRANSACTION エントリーが必要です。 transfer to program を使用し、その後 sysVar.transactionID を「GETD」に設定する場合、2 つの TRANSACTION エントリーが必要です。1 つはトランザクション ABCD をメニュー・プログラムに関連付けるためのもので、1 つはトランザクション GETD をプログラム GETDATA に関連付けるためのものです。
IMS では、デフォルトのトランザクション ID を使用する場合、トランザクション ABCD をメニュー・プログラムの PSB に関連付けるための APPLCTN マクロと TRANSACT マクロのペアが 1 つ必要です。transfer to program を使用し、その後 sysVar.transactionID を「GETD」に設定する場合、APPLCTN マクロと TRANSACT マクロのペアが 2 つ必要です。1 つのペアはトランザクション ABCD をメニュー・プログラムの PSB に関連付けるためのもので、もう 1 つのペアはトランザクション GETD をプログラム GETDATA の PSB に関連付けるためのものです。