call
メインプログラムはオプションでパラメーターを呼び出し先パラメーターに渡します。呼び出し先プログラムが渡されたデータを変更すると、呼び出し側が使用できるストレージ領域も変わります。 メインプログラムと呼び出し先プログラムの違いについて詳しくは、『プログラム・パーツ』を参照してください。
- Java™ の場合、同じ JVM で実行される生成済み Java プログラムに対する呼び出し
- z/OS® バッチの場合、同じシステム上の別の COBOL プログラムに対する呼び出し
- CICS® の場合、同じ領域内の別の COBOL プログラムに対する呼び出し
呼び出し先プログラムは、EGL で生成されたプログラムであるか、外部定義されていると見なされるかのいずれかです。 プログラムが外部定義されていることを示す方法に関する詳細については、このトピックの『構文』セクションで isExternal プロパティーの説明を参照してください。
call ステートメントで渡す引数の数、型、および順序は、呼び出し先プログラムで予期されるパラメーターの数、型、および順序と一致している必要があります。一回のローカル呼び出しで渡すことができるパラメーターの数に制限はありません。リモート呼び出しの場合、受け渡し可能なパラメーターの数およびサイズに対する制限があります。すべてのリモート呼び出し実装は、少なくとも 30 のパラメーター (結合パラメーター長が 32,000 バイト未満) での受け渡しをサポートします。独自の設計で、30 を超えるパラメーターか、呼び出しごとに 32,000 バイトを超える受け渡しを必要とする場合、すべての必要な実装でテストして、受け渡しに必要なデータ量がサポートされていることを確認します。
- 渡されるリテラルまたは定数のサイズは、受取パラメーターのサイズと等しくなければならない
- 数値リテラルまたは定数は、引数として渡すことができない
- 1 バイト文字のみを含むリテラルまたは定数は、CHAR または MBCHAR 型のパラメーターに渡すこ とができる
- 2 バイト文字のみを含むリテラルまたは定数は、DBCHAR 型のパラメーターのみに渡すことができる
- 1 バイト文字と 2 バイト文字の両方を含むリテラルまたは定数は、MBCHAR 型のパラ メーターに渡すことができる
サービス呼び出しでの call ステートメントの使用に関する詳細については、『サービス・アクセスのための call ステートメントとコールバック関数のコーディング』を参照してください。
VisualAge® Generator からマイグレーションしたプログラムを呼び出す場合、VisualAge Generator Developer は通常、固定テキスト変数型を使用することを覚えておいてください。 textLiteralDefaultIsString プロパティーを使用するか、リテラルに型を指定することにより、文字リテラルの型を制御できます。textLiteralDefaultIsString プロパティーの詳細については、textLiteralDefaultIsStringを参照してください。リテラルについては、リテラルを参照してください。
構文

- programName
- 呼び出し先プログラムの名前。 プログラムは、EGL で生成されたプログラムであるか、外部定義されていると見なさるかのいずれかです。 多くのプログラム名 (UNIX 上のプログラム名や Java で作成されたプログラム名など) には、大/小文字の区別があります。 EGL デバッガー内のプログラム名には、大/小文字の区別がありません。 名前は、引用符なしの直接のパーツ参照、引用符で囲まれたリテラル文字列、または変数、 あるいは定数名にすることができます。
- argument
- コンマで区切られた一連の値参照の 1 つ。 引数にはプリミティブ変数、書式、レコード、プリミティブ型の配列、レコードの配列、非数値リテラル、または非数値定数を指定できます。 EGL が生成時に呼び出し先プログラムにアクセスできる場合は、引数には、より複雑な日時式、数式、またはテキスト式を指定できます。ANY、ArrayDictionary、BLOB、CLOB、DataTable、または Dictionary 型のフィールドを渡すことはできません。 これらの型の配列や、これらの型のいずれかを含むレコードを渡すことはできません。 ローカル呼び出しの場合、引数の数に制限はありません。リモート呼び出しは、30 個を超える引数をサポートしない可能性があります。
- properties
- 以下のプロパティーをサポートします。
- isExternal
- Boolean プロパティーです。
- デフォルトである NO は、外部プログラムが呼び出されているかどうかをリンケージ・オプション・パーツ内の callLink 要素が指定することを示します。callLink 要素に値を設定した方が柔軟性が高くなります。設定はコードには組み込まれません。
callLink 要素の関連属性は、ローカル呼び出しの場合は pgmType で、リモート呼び出しまたは EJB 呼び出しの場合は remotePgmType です。
- YES は、非 EGL 生成のプログラムが呼び出されていることを示します。
- デフォルトである NO は、外部プログラムが呼び出されているかどうかをリンケージ・オプション・パーツ内の callLink 要素が指定することを示します。callLink 要素に値を設定した方が柔軟性が高くなります。設定はコードには組み込まれません。
- isNoRefresh
- 呼び出し元がテキスト書式を表示し、以下のいずれかの状況が有効になっている場合のみ有効である boolean プロパティー。
- 呼び出し先プログラムがテキスト書式を表示しない。
- 呼び出し元が呼び出し後にフルスクリーン・テキスト書式を書き込む。
このプロパティーには、以下の 2 つの値があります。
- デフォルトである NO は、画面の最新表示を回避するかどうかをリンケージ・オプション・パーツ内の callLink 要素が指定することを示します。(特に、refreshScreen 属性では) callLink 要素に値を設定した方が柔軟性が高くなります。決定はコードには組み込まれません。
- YES は、呼び出し先プログラムが制御を戻すときに、画面の最新表示を回避することを示します。
- linkageKey
- リンケージ・オプション・パーツで callLink 要素を参照する文字列。 この文字列は、その要素内の pgm 属性と一致します。詳細については、『linkageKey』を参照してください。
- timeout
- サービスの呼び出しと応答の間で経過する有効な最大ミリ秒数を表す整数。call ステートメントでは、このプロパティーは、値が Web サーバー上の EGL Rich UI プロキシーがサービスを呼び出すときと、プロキシーが応答を受信するときの間の最大ミリ秒数である Rich UI アプリケーション専用です。詳細については、『サービス・アクセスのための call ステートメントとコールバック関数のコーディング』を参照してください。
有効な呼び出し
EGL 生成コードとの間で使用できる有効な呼び出しは、以下の表のとおりです。
| 呼び出し側オブジェクト | 呼び出されるオブジェクト |
|---|---|
| J2EE の外部の Java クラス内 EGL 生成 Java ラッパー | EGL 生成 Java プログラム (J2EE 以外) |
| J2EE アプリケーション・クライアント内 EGL 生成 Java プログラム | |
| EGL 生成 EJB セッション Bean | |
| IMS/VS プログラム (EGL または EGL 以外で生成された) | |
| IMS™ トランザクション | |
| CICS プログラム (EGL または EGL 以外で生成された) | |
| J2EE アプリケーション・クライアント内 EGL 生成 Java ラッパー | EGL 生成 Java プログラム (J2EE 以外) |
| J2EE アプリケーション・クライアント内 EGL 生成 Java プログラム | |
| EGL 生成 EJB セッション Bean | |
| IMS/VS プログラム (EGL または EGL 以外で生成された) | |
| IMS トランザクション | |
| CICS プログラム (EGL または EGL 以外で生成された) | |
| J2EE Web アプリケーション内 EGL 生成 Java ラッパー | EGL 生成 Java プログラム (J2EE 以外) |
| J2EE アプリケーション・クライアント内 EGL 生成 Java プログラム | |
| 同一の J2EE Web アプリケーション内 EGL 生成 Java プログラム | |
| EGL 生成 EJB セッション Bean | |
| IMS/VS プログラム (EGL または EGL 以外で生成された) | |
| IMS トランザクション | |
| CICS プログラム (EGL または EGL 以外で生成された) | |
| J2EE の外部の EGL 生成 Java プログラム | EGL Java プログラム (J2EE 以外) |
| J2EE アプリケーション・クライアント内の EGL Java プログラム | |
| EGL EJB セッション Bean | |
| IBM® i 上の Java プログラム | |
| IBM i 上の COBOL プログラム | |
| C または C++ で作成された非 EGL プログラム | |
| IMS/VS プログラム (EGL または EGL 以外で生成された) | |
| IMS トランザクション | |
| CICS プログラム (EGL または EGL 以外で生成された) | |
| J2EE アプリケーション・クライアント内の EGL Java プログラム | EGL Java プログラム (J2EE 以外) |
| J2EE アプリケーション・クライアント内の EGL Java プログラム | |
| EGL EJB セッション Bean | |
| IBM i 上の Java プログラム | |
| IBM i 上の COBOL プログラム | |
| C または C++ で作成された非 EGL プログラム | |
| IMS/VS プログラム (EGL または EGL 以外で生成された) | |
| IMS トランザクション | |
| CICS プログラム (EGL または EGL 以外で生成された) | |
| J2EE Web アプリケーション内の EGL Java プログラム | EGL Java プログラム (J2EE 以外) |
| J2EE アプリケーション・クライアント内の EGL Java プログラム | |
| 同じ J2EE Web アプリケーション内の EGL Java プログラム | |
| IBM i 上の Java プログラム | |
| IBM i 上の COBOL プログラム | |
| C または C++ で作成された非生成プログラム | |
| CICS プログラム (EGL または EGL 以外で生成された) | |
| EGL EJB セッション Bean | EGL Java プログラム (J2EE 以外) |
| J2EE アプリケーション・クライアント内の EGL Java プログラム | |
| EGL EJB セッション Bean | |
| C または C++ で作成された非生成プログラム | |
| CICS プログラム (EGL または EGL 以外で生成された) | |
| EGL CICS プログラム | CICS プログラム (EGL または EGL 以外で生成された) |
| EGL z/OS バッチ・プログラム | |
| EGL z/OS バッチ・プログラム | 任意の言語 (EGL を含む) で作成されて、z/OS (CICS または IMS の外部) で 実行されるバッチ・プログラム |
| 非 EGL CICS プログラム | CICS COBOL プログラム (EGL または EGL 以外で生成された) |
| 任意の言語 (EGL を含む) で作成されて、z/OS (CICS または IMS の外部) で 実行されるバッチ・プログラム | |
| IBM i 上の EGL COBOL プログラム | IBM i 上の EGL COBOL プログラム |
| 任意の言語で作成され、IBM i で実行される非 EGL プログラム | |
| 任意の言語で作成され、IBM i で実行される非 EGL プログラム | IBM i 上の EGL COBOL プログラム |
| 任意の言語で作成され、IBM i で実行される非 EGL プログラム |
非 EGL 生成の Java コードから EGL 生成の Java コードを呼び出すには、EGL 外部型または Java アクセス関数を使用します。
例
以下の例は、ローンの利息を計算する呼び出し先プログラムを示しています。
if (userRequest == "C")
try
call programA(myCustomer, interestRate);
onException(myEx InvocationException)
myErrorHandler(12);
end
end
エラー条件
各引数で渡されるバイト数は、受け取るパラメーターによって予期されるバイト数と同じにする必要があります。詳細については、『互換性』を参照してください。
リモート側の呼び出し先プログラム内の例外は、呼び出し側プログラムに直接伝搬することはありません。その代わり、InvocationException によってラップされます。 リモート側の呼び出し先プログラムが例外を処理しない場合は、呼び出し先プログラムが終了し、 呼び出し元は InvocationException をスローします。
互換性
| プラットフォーム | 問題 |
|---|---|
| Java 生成 |
|
| COBOL 生成 | 再帰的プログラム呼び出しは、zSeries の場合のみ許可されます。このサポートは、再帰を許可する COBOL に依存しています。これは CICS では通常は問題になりませんが、バッチ・モードで問題になる可能性があります。シンボリック・パラメーター ALLOWRECURSIVEPROGRAMS を YES に設定することにより再帰呼び出しを使用可能にする必要があります。 詳しくは、ユーザーが設定可能な事前定義シンボリック・パラメーターを参照してください。 |
| CICS | 各引数で渡されるバイト数が CICS プログラムで予期されるバイト数と同じでない場合、実行時に異常終了が発生します。 |
| Rich UI | call ステートメントの 1 バージョンはサポートされますが、サービスを呼び出すのみです。詳細については、『サービス・アクセスのための call ステートメントとコールバック関数のコーディング』を参照してください。 |
- リンケージ・ファイル設定を remotePgmType=EXTERNALLYDEFINED に変更する
- メンバー QVGNRNCL を QEGL から自分のライブラリーにコピーする