transfer

transfer 文は、あるメインプログラムから別のプログラムにコントロールを移動し、ソース・プログラムを終了します。 ソース・プログラムはオプションで、レコードをターゲット・プログラムの入力レコードに渡すことができます。transfer 文は、呼び出し先プログラムでは無効です。

transfer 文は、2 種類あります。

実行時の動作について詳しくは、このトピックの『互換性』セクションを参照してください。

ターゲットのプログラムは、EGL により生成されたプログラム、 または外部定義と見なされたプログラムのいずれかです。 外部定義のプログラムであると示す方法について詳しくは、次のセクションにある isExternal プロパティーの説明を参照してください。

構文

transfer 文の構文図
targetName
コントロールを受け取るメインプログラムまたはトランザクション。この名前は、 引用符なしのパーツ参照、引用符で囲んだリテラル文字列、定数、または sysVar.transferName か別の変数にすることができます。
recordName
ターゲット・プログラムで、入力レコードとして受け取られるレコード。渡されるレコードには任意の型を使用できますが、長さおよびプリミティブの型には、データを受け取るレコードとの互換性がなければなりません。 ターゲット・プログラムの入力レコードは基本レコードでなければなりません。
properties
以下のプロパティーをサポートします。
isExternal
Boolean プロパティーです。
  • NO (デフォルト) は、リンケージ・パーツの要素により、外部プログラムが制御権移動のターゲットであるかどうかが指定されることを示します。リンケージ・パーツに値を 配置するほうが柔軟性が高まるため、この設定をお勧めします。この場合、設定はコードに 埋め込まれません。

    transfer to transaction 文を コーディングする場合、このリンケージ・パーツ要素は transferToTransaction で、 属性は externallyDefined です。transfer to program 文を コーディングする場合、このリンケージ・パーツ要素は transferToProgram で、 属性は linkType です。

  • YES は、非 EGL 生成プログラムが制御権移動のターゲットであることを示します。
linkageKey
リンケージ・オプション・パーツの transferToProgram 要素または transferToTransaction 要素を参照するストリングです。 このストリングはその要素の toPgm 属性と 一致します。詳しくは、『linkageKey』を参照してください。

有効な転送

EGL 生成コードとの間の有効な転送は、以下の表のとおりです。

表 1. 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』を参照してください。

以下の例では、現行プログラムは、processCustomer という名前のプログラムに制御権を移動します。
transfer to program com.CompanyB.CustomerPackage.processCustomer;

互換性

表 2. transfer 文の互換性に関する考慮事項
プラットフォーム 問題
バッチ環境 (z/OS メイン・バッチ・プログラム、IMS BMP、あるいは Java メイン・テキストまたはメイン・バッチ・プログラム) transfer to transaction 文は、同一の実行単位内のプログラムを開始します。制御権移動前の振る舞いは、synchOnTrxTransfer ビルド記述子オプションの設定に応じて異なります。
  • synchOnTrxTransfer の値が NO (デフォルト) の 場合、transfer to transaction 文は、呼び出し先プログラムで使用可能なリソースを、クローズまたは コミットしません。
  • synchOnTrxTransfer の値が YES の場合、transfer to transaction 文は リカバリー可能リソースをコミットし、ファイルをクローズして、カーソルをクローズします。

z/OS バッチ・プログラムと IMS BMP プログラムの間の制御権の移動はサポートされていません。

EGL では OS XCTL マクロを使用して、IMS BMP から、EGL によっても VisualAge® Generator によっても生成されていないプログラムへの制御権の移動を実行します。

CICS for z/OS transfer to program では、同期点は発生しません。 ただし、転送時に PSB がスケジュールされており、以下のいずれかの状況が生じている場合は例外です。
  • 受け取り側のプログラムが異なる PSB を使用して定義されているか、PSB を使用せずに定義されている。
  • transfer from programsynchOnPgmTransfer="YES" ビルド記述子オプション (デフォルト値) が指定されている。
  • 転送が非 EGL (外部定義の) プログラムに対するものである。

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
  • トランザクションの初期プログラムがメイン基本プログラムである場合、ターゲット・プログラムがメイン・テキスト UI プログラムで ある transfer to program 文はサポートされません。
  • トランザクションの初期プログラムがメイン・テキスト UI プログラムである場合、ターゲット・プログラムが入出力 PCB にアクセスする メイン基本プログラムであれば、transfer to program 文はサポートされません。 メイン基本プログラムの大半が入出力 PCB から読み取るため、メイン・テキスト UI プログラムからメイン基本プログラムへの制御権の移動はほとんどサポートされません。
  • transfer 文を使用して EGL 生成 IMS/VS プログラムから EGL 生成 IMS/VS プログラムに制御権を移動する場合は、両方のプログラムの会話型の状況が同じ (どちらも会話型であるか、どちらも非会話型である) でなければなりません。 両方のプログラムが、spaSizespaADF、および spaStatusBytePosition の各ビルド記述子オプションに同じ値を指定していなければなりません。
  • IMS/VS 上で transfer to program 文がサポートされるのは、ターゲット・プログラムが EGL または VisualAge Generator によって生成されている場合のみです。
  • transfer to transaction ステートメントの targetName は、IMS トランザクション ID である必要があります。

transfer to transaction 文は、リカバリー可能リソースのコミット、ファイルのクローズ、カーソルのクローズ、および新規トランザクションの開始を行います。

Java リンケージ・オプション・パーツの transferToProgram 要素および transferToTransaction 要素では、 受信プログラムのパッケージ名が import 文によってもパッケージ名のコードによる明示によっても指定されていない場合に、そのパッケージ名を指定できます。 非 EGL 生成プログラムへの制御権の移動はサポートされていません。
JSF ページ・ハンドラーでは、transfer to transaction 文は無効です。代わりに forward 文を使用してください。
Rich UI transfer ステートメントはサポートされていません。
z/OS バッチ バッチ環境行を参照してください。

フィードバック