EGL には、以下のように、制御をプログラムから別のプログラムに切り替える方法がいくつかあります。
- call 文は、別のプログラムに制御を与えます。オプションにより、一連の値を渡すこともできます。呼び出し先プログラムが終了すると、制御は呼び出し側に戻ります。呼び出し先プログラムが、変数として渡された任意のデータを変更すると、その変数の内容は、呼び出し側でも変更されます。
呼び出しは、データベースやその他のリカバリー可能リソースをコミットしませんが、サーバー・サイドの自動コミットは発生する場合があります。
リンケージ・オプション・パーツの callLink エレメントを設定することで、その呼び出しの特性を指定することができます。詳細については、『call』および『callLink エレメント』を参照してください。
サーバー・サイドの自動コミットの詳細については、『callLink エレメントの luwControl』を参照してください。
- transfer 文は、制御をメインプログラムから別のメインプログラムに移動し、移動元のプログラムを終了し、オプションで、受け取り先プログラムの入力レコードによって受領されるデータを持つレコードを渡します。呼び出し先プログラムでは、transfer 文は使用することができません。
プログラムは、
トランザクションへの移動または
プログラムへの移動という書式の文によって、制御権を移動することができます。
- トランザクションへの転送は、以下のようにして行われます。
- Java™ メイン・
テキストまたはメイン・バッチ・プログラムとして実行されるプログラムでは、
その振る舞いは、ビルド記述子オプション synchOnTrxTransfer の設定によって、
以下のように異なります。
- synchOnTrxTransfer の値が YES の場合、transfer 文は回復可能リソースをコミットし、ファイルをクローズし、カーソルをクローズし、同じ実行単位内でプログラムを開始します。
- synchOnTrxTransfer の値が NO (デフォルト) の場合も、transfer 文は同じ実行単位内でプログラムを開始しますが、呼び出されたプログラムが使用できるリソースのクローズまたはコミットは行いません。
- プログラムへの移動では、リカバリー可能リソースのコミットまたはロールバックは行いませんが、ファイルをクローズし、ロックを解除し、同じ実行単位内でプログラムを開始します。
リンケージ・オプション・パーツは、どの種類の移動の特性にも影響しません。
PageHandler では、移動は無効です。
詳細については、『transfer』を参照してください。
- システム関数 sysLib.startTransaction は、非同期的に実行単位を開始します。その操作は、移動元のプログラムを終了せず、移動元のプログラム内のデータベース、ファイル、およびロックに影響しません。
受け取り側のプログラム内の領域である入力レコードに、データを渡すオプションを選択できます。
プログラムが sysLib.startTransaction を呼び出す場合は、リンケージ・オプション・パーツ asynchLink エレメントを持つプログラムを生成する必要があります。
詳細については、『sysLib.startTransaction』および『asynchLink エレメント』を参照してください。
- EGL show 文は、
メイン textUI プログラムまたはメイン VGWebTransaction プログラムを終了して、
データをユーザーに表示します。
ユーザーが書式または Web ページを処理依頼すると、
show 文はオプションで制御権を 2 番目のメインプログラムに移動します。
そのメインプログラムは、ユーザーから受け取ったデータと、
元のプログラムから変更なしで渡されたデータを受信します。
textUI プログラムに関して、show 文は、
リンケージ・オプション・パーツ transferLink エレメントの
設定に影響されます。
詳細については、『show』を参照してください。
- 最後に、forward
文が PageHandler またはプログラムから呼び出されます。この文の動作は、以下のとおりです。
- 回復可能リソースのコミット、ファイルのクローズ、ロックの解除
- 制御権の移動
- コードの終了
この場合の宛先は、別のプログラムまたは Web ページです。詳細については、『forward』を参照してください。
IMS™ に固有の詳細については、
『EGL 生成 MPP 間での移動』を参照してください。