| COMMPTR | COMMDATA | OSLINK | CICSOSLINK | CHANNEL | |
|---|---|---|---|---|---|
| DYNAMIC | 有効 | 有効 | 有効 | 有効 | なし |
| STATIC | 有効 | 有効 | 有効 | 有効 | なし |
| CICSLINK | 有効 | 有効 | なし | なし | 有効 |
| REMOTE | EGL 生成の Java プログラムからの呼び出しの場合は有効、CICS プログラムからの呼び出しの場合は無効。 | 有効 | なし | なし | 有効 |
詳しくは、『リンケージ・オプション・パーツ』を参照してください。
呼び出し側または呼び出し先プログラムのいずれかが PL/I プログラムである場合は、プロパティー linkType を CICSLINK に設定する必要があります。また、呼び出し先プログラムが PL/I プログラムの場合、call ステートメントで isExternal = YES を指定するか、呼び出し先プログラムの callLink 要素で pgmType = EXTERNALLYDEFINED を指定する必要があります。 呼び出し側プログラムが PL/I プログラムの場合、呼び出し先 EGL プログラムの callLink 要素で linkType = CICSLINK を指定する必要があります。
以下のセクションでは、call ステートメントでのパラメーターの使用について詳しく説明します。
以下のセクションでは、CICS 環境における call ステートメントに使用されるパラメーター・フォーマットについて詳細に説明します。
COMMPTR パラメーター・フォーマットの場合は、ポインターが CICS COMMAREA で渡されます。 COMMAREA は、呼び出し側プログラムの COBOL 作業用ストレージ領域に生成されます。 上位ビットは、パラメーター・フォーマット COMMPTR の COMMAREA 内の最終パラメーター・アドレスに設定されます。
下の図には、COMMPTR パラメーター・フォーマットが示されています。 レジスター 1 は、ポインターのリストを指しています。 最初は EXEC インターフェース・ブロック (EIB) のアドレスであり、後に COMMAREA のアドレスが続きます。 パラメーターへのポインターは、COMMAREA で渡されます。

呼び出し側プログラムのビルド記述子オプション endCommarea を YES に設定すると、呼び出し側プログラムではパラメーター・リストの最後にフルワード x'FFFFFFFF' を追加します。 endCommarea を YES に設定するのは、CSP/AE (システム共通プロダクト/適用業務実行機能) プログラムから以前に呼び出されたプログラムのように、呼び出し先プログラムでこの終端フルワードが必要な場合のみにする必要があります。 endCommarea が YES に設定されている場合を除き、COMMAREA の長さにはこのフルワードの 4 バイトは含まれていません。 特定の条件では、CICS は呼び出し先プログラムに COMMAREA のコピーを渡します。
COMMDATA パラメーター・フォーマットの場合、実際のデータは CICS COMMAREA の単一バッファーで渡されます。 COMMAREA は、呼び出し側プログラムの作業用ストレージ領域に生成されます。 各パラメーター値は COMMAREA に移動されます。 このとき、各値は相互に結合され、境界合わせは考慮されません。 可変長レコードが渡される場合は、EGL に定義されている最大レコード長でスペースが予約されます。 lengthItem プロパティーが設定された可変長レコードが渡される場合、必要スペースをレコードの固定部分内で定義する必要があります。 呼び出し先プログラムでは、COMMAREA に同じ順序でパラメーター値を戻す必要があります。 呼び出し側プログラムでは、COMMAREA に戻されたパラメーター値をオリジナルのパラメーターに移動します。
下の図には、COMMDATA パラメーター・フォーマットが示されています。 レジスター 1 は、ポインターのリストを指しています。 最初は EIB のアドレスであり、後に COMMAREA のアドレスが続きます。 実パラメーター・データは COMMAREA で渡されます。

下の図には、OSLINK パラメーター・フォーマットが示されています。 レジスター 1 は、パラメーター・データのバッファーのアドレスであるポインターのリストを指しています (各パラメーターに 1 つ)。

CICSOSLINK パラメーター・フォーマットの場合、EIB および COMMAREA が常に最初の 2 つのパラメーターとして渡され、それに続いて call ステートメントに指定されたパラメーターが渡されます。 CICSOSLINK は、STATIC および DYNAMIC の各リンケージ・タイプに対してのみ有効です。
下の図には、CICSOSLINK パラメーター・フォーマットが示されています。 レジスター 1 は、ポインターのリストを指しています。 最初は EIB のアドレスであり、後に COMMAREA のアドレスが続き、その後にはパラメーター・データのバッファーのアドレス (各パラメーターに 1 つ) が続きます。

CHANNEL パラメーター・フォーマットの場合、コンテナーがチャネルで渡されます。チャネルは、CICS プログラム間でデータを受け渡すパラメーターのように機能する、一連のコンテナーです。 COMMAREA は、CHANNEL パラメーター・フォーマットでは渡されません。
EGL 生成プログラムがチャネルを呼び出し先プログラムに渡す場合、チャネルは呼び出し先プログラムと同じ名前を持ちます。 ただし、EGL 呼び出し先プログラムがチャネルを受け取るとき、プログラムは CICS API 呼び出しを使用して、渡されたチャネルの名前を検索します。
コンテナーの名前は EGL-PARM-1 から EGL-PARM-n であり、n の最大値は 30 です。
例えば、タイプ INT、レコード (33,000 バイト)、および EGL STRING の 3 つのパラメーターを渡す場合、下の表に示すように、チャネルには 3 つのコンテナーが含まれます。
| コンテナー名 | コンテナーの値 |
|---|---|
| EGL-PARM-1 | INT を表す 4 バイト |
| EGL-PARM-2 | レコードを表す 33,000 バイト |
| EGL-PARM-3 | STRING へのポインターを表す 4 バイト (呼び出し先プログラムは EGL である必要がある) |
実行中の呼び出し先プログラムは、プログラムの終了時、または exit program ステートメントが出現すると、呼び出し側プログラムに制御を返します。 最大で 30 のパラメーターを call ステートメントに渡すことができます。 call ステートメントの結果として CICS SYNCPOINT は発生しません。 呼び出し先プログラムのプロパティー type、linkType、および parmForm は、呼び出し側および呼び出し先の両方のプログラムの生成時に同一にする必要があります。 リンケージ・タイプまたはパラメーター・フォーマットが変更された場合は、呼び出し先プログラムおよびそれを呼び出すすべてのプログラムを再生成する必要があります。 呼び出しで使用されるパラメーター・フォーマットについて詳しくは、上記の call ステートメントの各パラメーター・フォーマットを参照してください。
z/OS® バッチに対応した呼び出し先プログラムを生成して、そのプログラムを CICS で使用することもできます。その呼び出しを CICS で実行するには、メインフレームをセットアップする必要があります (「IBM® Rational® COBOL Runtime for zSeries ガイド」の第 11 章にある『CICS で z/OS バッチ・プログラムを呼び出すための CICS セットアップ』というセクションを参照してください)。
ユーザー・プログラムの名前を CICS に定義し、そのプログラムがオペレーティング・システムのロード・ライブラリーに存在している必要があります。プログラム名を定義していない場合、またはプログラムがロード・ライブラリーに存在していない場合、未検出状態が発生します。 また、プログラムは CICS コマンド・レベルのプログラミング規則に準拠してリンク・エディットされる必要もあります。 詳しくは、CICS のアプリケーション・プログラマー解説書を参照してください。
CICS では、 EGL プログラムが非 EGL COBOL プログラムの呼び出しに CICS LINK ではなく COBOL CALL を使用する場合に、異常終了の処理について考慮する必要があります。 このケースでは、COBOL ランタイム環境は、呼び出し先プログラムの開始時に呼び出し側プログラムによって要求された CICS 異常終了処理を使用不可に設定します。 呼び出し先プログラムでは、起動時に CICS POP HANDLE ステートメントを発行し、終了時に CICS PUSH HANDLE ステートメントを発行することにより、EGL プログラムの異常終了ハンドラーを復元する必要があります。
異常終了ハンドラーが復元されていない場合に、呼び出し先プログラムで異常終了が発生すると、EGL プログラムに対する通常のエラー終結処理が実行されません。 プログラム終了に失敗した場合、共用テーブルの使用回数は更新されません。 これにより、共用テーブルの不必要なデータがストレージに残される恐れがあります。 異常終了ハンドラーから、Rational COBOL Runtime for zSeries エラー・メッセージは発行されません。
CICS 環境での COBOL 呼び出しの使用方法について詳しくは、ご使用の CICS 環境のアプリケーション・プログラミング・ガイドを参照してください。
EGL プログラムが、CICSLINK および COMMPTR を使用してパラメーターを非 EGL プログラムに渡す場合、当該パラメーターへのポインターは CICS COMMAREA で渡されます。以下のセクションでは、非 EGL プログラムが、CICSLINK および COMMPTR を使用して渡されたパラメーターを受け取る方法の例を示します。
L PARMPTR,DFHEICAP Address parameter list
USING PARMAREA,PARMPTR
L PARM1PTR,PARM1A Address parameter 1
USING PARM1,PARM1PTR
L PARM2PTR,PARM2A Address parameter 2
USING PARM2,PARM2PTR
L PARM3PTR,PARM3A Address parameter 3
USING PARM3,PARM3PTR
.
. And so on
.
PARMAREA DSECT Define storage layout of parmlist
PARM1A DS F Passed pointer to parameter 1
PARM2A DS F Passed pointer to parameter 2
PARM3A DS F Passed pointer to parameter 3
PARM1 DSECT Define storage layout of passed parm
RECORD EQU * Parameter is a record
FLD1 DS L10 Fields in record structure
FLD2 DS L20 " "
FLD3 DS L200 " "
.
. And so on
.
PARM2 DSECT Define storage layout of passed parm
L7701 DS L5 Parameter is single data item level-77
PARM3 DSECT Define storage layout of passed parm
WORKSTOR EQU * Parameter is working storage
FLD5 DS L5 Fields in working storage
FLD6 DS L5 " "
.
. And so on
.
LINKAGE SECTION.
01 DFHCOMMAREA.
02 PARM1A USAGE IS POINTER.
02 PARM2A USAGE IS POINTER.
02 PARM3A USAGE IS POINTER.
01 PARM1.
02 RECORD.
03 FLD1 PIC X(10).
03 FLD2 PIC X(20).
03 FLD3 PIC X(200).
.
. And so on
.
01 PARM2.
02 L7701 PIC X(5).
01 PARM3.
02 WORKSTOR.
03 FLD5 PIC X(5).
03 FLD6 PIC X(5).
.
. And so on
.
PROCEDURE DIVISION.
SET ADDRESS OF PARM1 TO PARM1A
SET ADDRESS OF PARM2 TO PARM2A
SET ADDRESS OF PARM3 TO PARM3A
.
. And so on
.
EGL プログラムは、呼び出し先プログラムとして定義する必要があります。 呼び出し側の非 EGL プログラムでは、その生成時に、呼び出し先プログラムのリンケージ・オプション・パーツに指定されているようにパラメーターを設定する必要があります。 さまざまなパラメーター・フォーマットに対して生成されるリンケージの図については、CICS 用の call ステートメント・パラメーターのフォーマットを参照してください。
パラメーター・リスト内の変数のフォーマットは、呼び出し先プログラムが受け取るパラメーターに指定された定義と一致する必要があります。 同一ではない場合の結果は予測不可能です。
EXEC CICS LINK
PROGRAM('MYAPPL') COMMAREA(record of pointers)
LENGTH(length of COMMAREA)
linkType が DYNAMIC または STATIC である場合、呼び出し先 EGL プログラムの終了時に COBOL 特殊レジスター RETURN-CODE が EGL 変数 sysVar.returnCode の値に設定されます。
レジスター 15 に格納されるこの戻りコードは、呼び出し側の非 EGL プログラムによって検査が可能です。