transfer to program ステートメントを使用したセグメント化プログラムの階層構造の実装
CICS® 環境でセグメント化モードで実行すると良好に実行する一連の EGL プログラムがあります。
追加の利点は、これらのプログラムは、同じ機能をすべて含む単一の EGL プログラムよりも、保守、テスト、および拡張が容易であるということです。
下の図は、3 つのタスクを実行する 4 つの EGL プログラム間の関係を示しています。メニュー・プログラムの唯一の目的は、その他の 3 つのプログラムにアクセスすることです。ユーザーが希望するタスクを選択すると、メニュー・プログラムは、transfer to program ステートメントを使用して対応するプログラムに制御を転送します。メニュー・プログラムは、要求の定義を追加するための小さい作業用ストレージ・レコードを渡します。転送先プログラムは、必要なデータのプロンプトをユーザーに出し、必要に応じてタスクを実行し、transfer to program ステートメントを使用してメニュー・プログラムに戻ります。

- チェーン内のすべてのプログラムがセグメント化されていなければ、呼び出し先プログラムをセグメント化モードで実行できない。
- プログラム制御が呼び出し側プログラムに戻されるため、呼び出し先プログラムは呼び出し側のリソースを解放しない。
- セグメント化された converse でのデータのロールイン/ロールアウトの量はかなり小さくなる。現在制御しているプログラムのみについてのみ、データ域が保存される。
- 転送元のプログラムのリソースを解放するため
- コミット点を発生させ、forUpdate ロックを解放するため
- 各プログラムが独自の DB2® プランおよび異なる PSB を持つことを許可するため
- 各プログラムが IMS システム定義内に異なるパフォーマンス・チューニング情報を持つことを許可するため
セグメント化モードと非セグメント化モード間の動的な変更
- 0
- プログラムがセグメント化されていないことを示す
- 1
- プログラムがセグメント化されていることを示す
- converseVar.segmentedMode が 1 に設定されている場合、EGL は converse ステートメントをセグメント化された converse として処理します。
- converseVar.segmentedMode が 0 に設定されている場合、EGL は converse ステートメントをセグメント化されていない converse として処理します。
converse ステートメントが正常に完了すると、EGL は converseVar.segmentedMode をプログラムの segmented プロパティーに基づくデフォルト値にリセットします。
converseVar.segmentedMode = 1; // force the next converse to be segmented
converseVar.segmentedMode = 0; // force the next converse to be nonsegmented
converse が実行されるたびに、実行後に converseVar.segmentedMode が生成済みのデフォルトにリセットされることに注意してください。 したがって、converseVar.segmentedMode は、特定の converse の動作をデフォルトの処理から変える場合にのみ使用してください。
注: IMS/VS 環境では、EGL は converseVar.segmentedMode システム変数の使用を無視します。IMS/VS 環境では、 converse ステートメントを含むすべてのプログラムはセグメント化モードで実行する必要があります。