transfer
transfer 文は、あるメインプログラムから別のプログラムにコントロールを移動し、ソース・プログラムを終了します。 ソース・プログラムはオプションで、レコードをターゲット・プログラムの入力レコードに渡すことができます。transfer 文は、呼び出し先プログラムでは無効です。
- transfer to transaction 文では、リカバリー可能リソースをコミットしたり、ロールバックしたりできます。
- transfer to program 文では、同期点の設定、 ファイルやカーソルのクローズ、リカバリー可能リソースのコミットまたはロールバックは行われません。ソース・プログラムおよびターゲット・プログラムは、同じ実行単位に含まれる必要があります。
実行時の動作について詳しくは、このトピックの『互換性』セクションを参照してください。
ターゲットのプログラムは、EGL により生成されたプログラム、 または外部定義と見なされたプログラムのいずれかです。 外部定義のプログラムであると示す方法について詳しくは、次のセクションにある isExternal プロパティーの説明を参照してください。
構文

- targetName
- コントロールを受け取るメインプログラムまたはトランザクション。この名前は、 引用符なしのパーツ参照、引用符で囲んだリテラル文字列、定数、または sysVar.transferName か別の変数にすることができます。
- recordName
- ターゲット・プログラムで、入力レコードとして受け取られるレコード。渡されるレコードには任意の型を使用できますが、長さおよびプリミティブの型には、データを受け取るレコードとの互換性がなければなりません。 ターゲット・プログラムの入力レコードは基本レコードでなければなりません。
- properties
- 以下のプロパティーをサポートします。
- isExternal
- Boolean プロパティーです。
- NO (デフォルト) は、リンケージ・パーツの要素により、外部プログラムが制御権移動のターゲットであるかどうかが指定されることを示します。リンケージ・パーツに値を
配置するほうが柔軟性が高まるため、この設定をお勧めします。この場合、設定はコードに
埋め込まれません。
transfer to transaction 文を コーディングする場合、このリンケージ・パーツ要素は transferToTransaction で、 属性は externallyDefined です。transfer to program 文を コーディングする場合、このリンケージ・パーツ要素は transferToProgram で、 属性は linkType です。
- YES は、非 EGL 生成プログラムが制御権移動のターゲットであることを示します。
- NO (デフォルト) は、リンケージ・パーツの要素により、外部プログラムが制御権移動のターゲットであるかどうかが指定されることを示します。リンケージ・パーツに値を
配置するほうが柔軟性が高まるため、この設定をお勧めします。この場合、設定はコードに
埋め込まれません。
- linkageKey
- リンケージ・オプション・パーツの transferToProgram 要素または transferToTransaction 要素を参照するストリングです。 このストリングはその要素の toPgm 属性と 一致します。詳しくは、『linkageKey』を参照してください。
有効な転送
EGL 生成コードとの間の有効な転送は、以下の表のとおりです。
| 転送側オブジェクト | ターゲット・オブジェクト |
|---|---|
| J2EE 外部の EGL Java™ プログラム | EGL Java プログラム (J2EE 以外) |
| J2EE アプリケーション・クライアント内の EGL Java プログラム | 同じ J2EE アプリケーション・クライアント内にある EGL Java プログラム |
| J2EE Web アプリケーション内の EGL Java プログラム | 同じ J2EE Web アプリケーション内の EGL Java プログラム |
| EGL CICS® COBOL プログラム | EGL CICS COBOL プログラム |
| 任意の言語で作成され、CICS で実行される非 EGL プログラム | |
| EGL z/OS® バッチ・プログラム | EGL z/OS バッチ・プログラム |
| 任意の言語で作成され、z/OS の CICS の外部で実行される非 EGL バッチ・プログラム | |
| 特定のトランザクションにおける非 EGL CICS プログラム | 同じトランザクションにおける EGL CICS COBOL プログラム |
| 同じトランザクションにおける非 EGL CICS COBOL プログラム | |
| 任意の言語で作成された CICS トランザクション | 任意の言語で作成された CICS トランザクション |
| 特定のトランザクションにおける EGL により生成された IMS/VS プログラム | 同じトランザクションにおける EGL により生成された IMS/VS プログラム |
| 任意の言語で作成された IMS™ トランザクション | 任意の言語で作成された IMS トランザクション |
| IBM® i 上の EGL プログラム | IBM i 上の EGL COBOL プログラム |
| 任意の言語で作成され、IBM i で実行される非 EGL プログラム | |
| 任意の言語で作成され、IBM i で実行される非 EGL プログラム | IBM i 上の EGL COBOL プログラム |
| 任意の言語で作成され、IBM i で実行される非 EGL プログラム |
EGL 生成 Java コードから非 EGL 生成 Java コードに 制御権を移動する場合は、EGL 外部型、Java アクセス関数、または vgLib.startTransaction のいずれかのメカニズムを使用してください。
EGL では据え置きの交換の使用をサポートしています。この場合、トランザクションでフォームを表示しユーザーがこのフォームを送信してから、別のトランザクションが起動されます。詳しくは、『show』を参照してください。
例
transfer to program com.CompanyB.CustomerPackage.processCustomer;
互換性
| プラットフォーム | 問題 |
|---|---|
| バッチ環境 (z/OS メイン・バッチ・プログラム、IMS BMP、あるいは Java メイン・テキストまたはメイン・バッチ・プログラム) | transfer to transaction 文は、同一の実行単位内のプログラムを開始します。制御権移動前の振る舞いは、synchOnTrxTransfer ビルド記述子オプションの設定に応じて異なります。
z/OS バッチ・プログラムと IMS BMP プログラムの間の制御権の移動はサポートされていません。 EGL では OS XCTL マクロを使用して、IMS BMP から、EGL によっても VisualAge® Generator によっても生成されていないプログラムへの制御権の移動を実行します。 |
| CICS for z/OS | transfer to program では、同期点は発生しません。
ただし、転送時に PSB がスケジュールされており、以下のいずれかの状況が生じている場合は例外です。
EGL は、transfer to program 文を CICS XCTL コマンドで実装し、そのコマンドの COMMAREA オプションを使用してレコードを渡します。 データは、CICS 共通域の最初のバイトから開始され、最大レコード長は 32763 です。 transfer to transaction 文は、リカバリー可能リソースのコミット、ファイルのクローズ、カーソルのクローズ、および新規トランザクションの開始を行います。 この場合の targetName は、CICS トランザクション ID です。EGL は、このステートメントを CICS START コマンドで実装し、そのコマンドの COMMAREA オプションを使用してレコードを渡します。 レコード・データは、CICS 共通域の最初のバイトから開始され、最大レコード長は 32763 です。 |
| IMS BMP | バッチ環境行を参照してください。 |
| IMS/VS |
transfer to transaction 文は、リカバリー可能リソースのコミット、ファイルのクローズ、カーソルのクローズ、および新規トランザクションの開始を行います。 |
| Java | リンケージ・オプション・パーツの transferToProgram 要素および transferToTransaction 要素では、 受信プログラムのパッケージ名が import 文によってもパッケージ名のコードによる明示によっても指定されていない場合に、そのパッケージ名を指定できます。 非 EGL 生成プログラムへの制御権の移動はサポートされていません。 |
| Rich UI | transfer ステートメントはサポートされていません。 |
| z/OS バッチ | バッチ環境行を参照してください。 |