EGL では、あるプログラムから別のプログラムに制御を切り替える方法が複数あります。
- call ステートメントは、別のプログラムに制御権を与え、オプションで一連の値を渡します。
呼び出し先プログラムが終了すると、制御は呼び出し側に戻ります。呼び出し先プログラムが、変数として渡された任意のデータを変更すると、その変数の内容は、呼び出し側でも変更されます。
call ステートメントは、自動的なサーバー・サイドのコミットが発生する可能性がある場合でも、データベースまたはその他のリカバリー可能リソースをコミットしません。
呼び出しの特性は、リンケージ・オプション・パーツの callLink エレメントを設定することにより、指定できます。
詳しくは、『呼び出しまたは転送におけるリンケージ・オプション・パーツの使用』を参照してください。
- 2 種類の transfer ステートメントでは、メインプログラムから別のメインプログラムに制御権を移動して移動元プログラムを終了し、オプションで、受け取り先プログラムの入力レコードに受領されるデータが格納されたレコードを渡します。
呼び出し先プログラムではこれらの transfer ステートメントのいずれも使用できません。
- transfer to transaction ステートメントでは、以下を実行します。
- CICS® または IMS/VS の下で実行されるメインプログラムの場合、このステートメントではリカバリー可能リソースのコミット、ファイルのクローズ、カーソルのクローズ、新規トランザクションの開始を実行します。
- z/OS® または IMS™ BMP のメイン・バッチ・プログラム、または Java™ のメイン・テキストまたはメイン・バッチ・プログラムとして実行されるプログラムの場合、
以下のようにビルド記述子オプション synchOnTrxTransfer の設定によって振る舞いが決まります。
- synchOnTrxTransfer の値が YES である場合、transfer ステートメントはリカバリー可能リソースのコミット、ファイルのクローズ、カーソルのクローズ、および同じ実行単位でのプログラムの開始を実行します。
- synchOnTrxTransfer の値が NO である場合も (デフォルト)、transfer ステートメントは同じ実行単位でプログラムを開始しますが、起動されたプログラムでは使用可能なリソースのクローズまたはコミットは実行しません。
- transfer to program ステートメントではリカバリー可能リソースのコミットやロールバックは実行しませんが、ファイルのクローズ、ロックの解除、および同じ実行単位内のプログラムの開始は実行します。
制限およびその他の問題の詳細については、『transfer』および『呼び出しまたは転送におけるリンケージ・オプション・パーツの使用』を参照してください。
- vgLib.startTransaction() システム関数は、非同期的に実行単位を開始します。その操作は、移動元のプログラムを終了せず、移動元のプログラム内のデータベース、ファイル、およびロックに影響しません。
受け取り側プログラム内の領域である入力レコードにデータを渡す場合にはオプションがあります。
プログラムで vgLib.startTransaction() を呼び出す場合、リンケージ・オプション・パーツの asynchLink 要素でプログラムを生成して、追加情報 (Java のパッケージ名や、CICS のリモート・トランザクションの情報など) を指定する必要がある場合があります。詳しくは、『startTransaction()』、または『呼び出しまたは転送におけるリンケージ・オプション・パーツの使用』を参照してください。
- EGL の show ステートメントは、メイン textUI プログラムまたはメイン VGWebTransaction プログラムを終了し、データを表示します。
ユーザーがフォームまたは Web ページを送信した後、show ステートメントではオプションで 2 番目のメインプログラムに制御を移動し、そのプログラムではユーザーから受け取ったデータ、および発信元プログラムから変更なしで渡されたデータを受け取ります。
textUI プログラムに関連して、show ステートメントはリンケージ・オプション・パーツの transferToTransaction 要素の影響を受けます。
詳しくは、『show』を参照してください。
- 最終的に、forward ステートメントが JSF ハンドラー、または Java 環境で実行されるプログラムから呼び出されます。
この文は、以下のアクションを実行します。
- リカバリー可能リソースのコミット、ファイルのクローズ、およびロックの解除。
- 制御の移動。
- コードの終了。
この場合の宛先は、別のプログラムまたは Web ページです。詳しくは、『forward』を参照してください。