EGL 生成の Java™ コードまたは EGL デバッガーから CICS® プログラムをリモート側で呼び出すことができます。
呼び出し先プログラムは、EGL または VisualAge® Generator から生成できます。または、別の言語で作成できます。
デバッグ時または生成時に、リンケージ・オプション・パーツ、
calllink 要素のプロパティーは、呼び出し先プログラムの特性によって異なります。具体的には、次のようになります。
以下に、実行時の動作を示します。
- EGL ランタイム・コードは、呼び出し側の生成に使用されたリンケージ・オプション・パーツを使用し、そのパーツから呼び出し先プログラムの名前と関連 CICS トランザクション・コードの両方を取得します。
- EGL ランタイム・コードは、callLink 要素で指定された conversionTable プロパティー、および呼び出し先プログラムに渡されるフィールドのデータ型に基づいて、データを EBCDIC に変換します。
- EGL ランタイム・コードは、CICS Transaction Gateway のコネクターを使用して、トランザクションを開始し、呼び出し先プログラムの名前とパラメーターを識別して特定の CICS 領域に渡します。正確なパスは、remoteComType の値によって異なります (CICSECI、CICSEXCI、CICSJ2C、または CICSSSL のうちどれであるか)。
- 以下のイベントは、calllink 要素のプロパティー値によって異なります。
- remotePgmType の値が EXTERNALLYDEFINED または EGL であり、parmForm の値が COMMDATA である場合、CICS ミラー・プログラムは呼び出し先プログラムを直接呼び出し、ランタイム・コードは COMMAREA を使用して呼び出し先プログラムと値を交換します。
(COMMDATA は、渡されるすべての引数が値変数またはリテラルであり、参照変数ではない場合にのみ使用できます。)
- remotePgmType の値が EXTERNALLYDEFINED または EGL であり、parmForm の値が COMMPTR である場合、CICS ミラー・プログラムは EGL キャッチャー・プログラムを呼び出します。
キャッチャー・プログラムの名前は、呼び出しを実行するクライアント・ランタイム・コードのバージョンによって異なります。EGL バージョン 7.0 以降の場合、キャッチャー・プログラムは ELACSV7 です。それよりも前のバージョンの EGL (または VisualAge Generator) の場合、キャッチャー・プログラムは ELACSV です。
- remotePgmType の値が EXTERNALLYDEFINED または EGL であり、parmForm の値が CHANNEL である場合、CICS ミラー・プログラムは EGL キャッチャー・プログラムを呼び出します。ただし、この場合、キャッチャー・プログラムの名前は ELACSV7C です。
- キャッチャー・プログラムが使用されている場合、以下の記述が適用されます。
- parmForm の値が COMMPTR である場合、プログラムは呼び出し側パラメーターをポインターに変換します。この場合、キャッチャー・プログラムは、2 つの方法 (動的 COBOL 呼び出し (remotePgmType の値が EGL である場合) または CICS LINK の使用 (remotePgmType の値が EXTERNALLYDEFINED である場合)) のいずれかで呼び出し先プログラムを呼び出します。
- parmForm の値が CHANNEL である場合、各パラメーターは内容にポインターが含まれない別々のコンテナーで渡されます。この場合、キャッチャー・プログラムは必ず CICS LINK を使用して呼び出し先プログラムを呼び出します。
キャッチャー・プログラムは、2 つの方法 (動的 COBOL 呼び出し (remotePgmType の値が EGL である場合) または CICS LINK の使用 (remotePgmType の値が EXTERNALLYDEFINED である場合)) のいずれかで呼び出し先プログラムを呼び出します。
- 呼び出し先プログラムが実行され、それを開始するために使用されたパスと同じパス (直接、または EGL キャッチャー経由のいずれか) を使用してデータを戻します。
- EGL ランタイム・コードは、クライアント・マシンのロケールと呼び出し先プログラムに渡されるフィールドのデータ型に従って、データを呼び出し側のコード・ページに変換します。
以下に例を示します。
- CICS システム・プログラマーが、TRNX という名前のトランザクションを作成し、CICS ミラー・プログラム DFHMIRS に関連付けます。トランザクション名は、calllink プロパティー serverID で指定されている名前に一致している必要があります。
そのトランザクションの特性は、トピック『callLink 要素の serverID』で説明されているとおりです。
- CICS では、PGMX という名前の既存の非 EGL プログラムが、COMMAREA でポインターの形式の引数を予期しています。
- Java プログラムには、PGMX を呼び出すためのステートメントが組み込まれています。
- 呼び出し側の生成に使用されるビルド記述子で、 linkage ビルド記述子オプションは pgmLinkage という名前のリンケージ・オプション・パーツを参照します。
- そのリンケージ・オプション・パーツで、次のようにします。
- callLink 要素の serverID プロパティーを適切なトランザクション・コード (この場合は TRNX) に設定します。
- プロパティー remoteComType を CICSECI、CICSJ2C、または CICSSSL に設定し、プログラムが CICS 環境内にあることを示します。
- 実行時に、EGL ランタイム・コードは、データを変換し、その後トランザクション・コード (TRNX)、プログラム名 (ELACSV7、この呼び出しが EGL キャッチャー・プログラムの使用を必要とするため)、およびパラメーター (ターゲットの呼び出し先プログラムの名前など) を CICS Transaction Gateway に送信します。
- CICS Transaction Gateway は、CICS サーバー上の TRNX を呼び出します。
このトランザクションは、DFHMIRS という名前の CICS ミラー・プログラムに関連付けられています。
- CICS ミラー・プログラムは、ELACSV7 という名前の EGL キャッチャー・プログラムを呼び出します (EGL Java ランタイム・コードがバージョン 7.0 以降であることを想定)。
- EGL キャッチャー・プログラムは、パラメーターを値として受け取り、ネットワークを介して渡された値をパラメーターあたり 1 つのポインターに変換し、PGMX を呼び出します。
- PGMX が完了すると、制御はキャッチャー・プログラムに戻り、キャッチャー・プログラムは、戻りデータへのポインターを受け取り、呼び出し側に戻すデータ値のバッファーを作成します。
- キャッチャー・プログラムはミラー・プログラムに戻り、ミラー・プログラムは CICS Transaction Gateway を介して EGL Java ランタイム・コードにデータを送信します。
- EGL Java ランタイムは、これらの値を受け取って適切なロケールに変換し、呼び出し側の実行を再開します。