IMS および z/OS バッチ環境でのプログラムの呼び出し

非 CICS 環境では、標準の OS リンケージ規約が使用されます。 最大で 30 のパラメーターを call ステートメントに渡すことができます。 実行中の呼び出し先プログラムは、プログラムの終了時に呼び出し側プログラムに戻ります。

call ステートメント用に生成されるリンケージのタイプを指定するには、リンケージ・オプション・パーツを使用します。 非 CICS 環境の場合、call ステートメントが DYNAMIC または STATIC COBOL 呼び出しのいずれかとして生成され、パラメーターは標準 COBOL パラメーター・リスト (OSLINK) を使用して、すべて参照によって渡されるように指定できます。

EGL プログラムから EGL プログラムへの呼び出し

EGL call ステートメントは、標準の COBOL CALL として生成されます。 EGL call ステートメントのパラメーターは、 COBOL CALL のパラメーターです。 すべてのパラメーターは、内容ではなく、参照によって渡されます。 COBOL CALL が動的呼び出しであるか静的呼び出しであるかを指定するには、リンケージ・オプションを使用します。

コンパイル済みの COBOL CALL は、標準のリンケージ規約を使用してパラメーターを渡します。 レジスター 1 は、パラメーター・アドレスのリストを指しています。 最終パラメーター・アドレスの上位バイトは、下の図に示されているように、1 に設定されます。

レジスター 1 が指すパラメーター・アドレスのリスト

パラメーターとして dliLib.psbData または PCBRecord を渡す場合は、特別な考慮事項が適用されます。 詳しくは、「call または transfer ステートメントにおける特殊なパラメーターの参照情報」を参照してください。

環境間の呼び出し先プログラムの共用

IMS/VS、BMP、および z/OS® CICS® 用に生成されたプログラムでは、z/OS バッチ環境用に生成されたサブプログラムを呼び出すことができます。z/OS バッチ・プログラムが SQL I/O、ファイル I/O、またはバッチ環境固有の呼び出しを実行しないことを確認する必要があります。これらは元の環境から許可されないためです。 例えば、CICS はすべてのファイル I/O アクセスを所有しているため、バッチ・タイプのファイル・アクセスの実行を許可しません。z/OS バッチ用に生成され、その他の環境で実行するロジックによって呼び出されるプログラムは、通常、計算やテーブル・ルックアップなどの操作に制限されます。

EGL プログラムから非 EGL プログラムへの呼び出し

非 EGL プログラムの呼び出しは、EGL プログラムの呼び出しと同じ方法で生成されます。 PL/I で作成されたプログラムの呼び出しは、静的呼び出しで実行される必要があります。 非 EGL プログラムが COBOL で作成されていない場合は、ご使用のリリースの COBOL のアプリケーション・プログラミング・ガイドに記載されている別の言語へのインターフェースに関する規則に従ってください。

非 EGL プログラムから EGL プログラムへの呼び出し

非 EGL プログラムは、標準の COBOL CALL ステートメントを使用して EGL プログラムを呼び出します。 すべてのパラメーターは、内容ではなく、参照によって渡されます。 PL/I で作成されたプログラムからの呼び出しは、静的呼び出しで実行される必要があります。 非 EGL プログラムが COBOL で作成されていない場合は、ご使用のリリースの COBOL のアプリケーション・プログラミング・ガイドに記載されている別の言語へのインターフェースに関する規則に従ってください。

ランタイム・サービス初期化に対する複数呼び出しの回避

実行単位内で呼び出される最初のプログラムが非 EGL プログラムであり、そのプログラムが EGL プログラムを繰り返し呼び出す場合、Rational® COBOL Runtime for zSeries は、それぞれの呼び出しで初期化および終了の関数を実行します。 呼び出しの数が多い場合は、これらの呼び出しのオーバーヘッドが非常に大きくなる可能性があります。 このオーバーヘッドを回避し、初期化および終了の実行を 1 回にするため、EGL では各環境ごとにラッパー・プログラムを用意しています。 該当するラッパー・プログラムをご使用の EGL プログラムでリンク・エディットする必要があります。 これを自動的に実行するには、ご使用の EGL プログラムと同じ名前のリンク・エディット・パーツを作成します。 ラッパー・プログラム以外のプログラムで EGL プログラムをリンク・エディットする必要がない場合は、以下のようにリンク・エディット・コマンドを使用して、名前 YOURPROG を当該プログラム名に置き換えます。 SELALMD は、ランタイム・サービスのロード・ライブラリーを表しています。

z/OS バッチの制御ステートメント:
CHANGE NONVGRTN(YOURPROG)
CHANGE ELAAPPL(ELAWBAT)
INCLUDE SELALMD(ELAWBAT)
ENTRY ELARMAIN
NAME YOURPROG(R)
IMS™ BMP の制御ステートメント:
CHANGE NONVGRTN(YOURPROG)
CHANGE ELAAPPL(ELAWBMP)
INCLUDE SELALMD(ELAWBMP)
ENTRY ELARMAIN
NAME YOURPROG(R)
IMS/VS の制御ステートメント:
CHANGE NONVGRTN(YOURPROG)
CHANGE ELAAPPL(ELAWIMS)
INCLUDE SELALMD(ELAWIMS)
ENTRY ELARMAIN
NAME YOURPROG(R) 
プログラムを他のモジュール (例えば、PL/I プログラムなど) にリンクする必要がある場合は、『リンク・エディット・パーツの例』を参照してください。
メインプログラムが、LE から (通常は JCL の PARM パラメーターから) 渡されるパラメーターを受け取る場合、LE メインプログラムとモジュールをリンクして、パラメーターが適切に受け取られるようにする必要があります。 特に、EGL で提供される LE 準拠モジュールであり、エントリー・ポイントであるプログラム ELARLEMN を組み込む必要があります。ELARLEMN は渡されたパラメーターを受け入れてパラメーターを ELARMAIN に渡し、今度は ELARMAIN が YOURPROG を呼び出します。以下にステートメントの例を示します。
CHANGE NONVGRTN(YOURPROG)
CHANGE ELAAPPL(ELAWBAT)
INCLUDE SELALMD(ELAWBAT)
INCLUDE SELALMD(ELARLEMN)
ENTRY ELARLEMN
NAME YOURPROG(R)

EGL z/OS バッチ・プログラムからの CICS プログラムの呼び出し

z/OS バッチ・プログラムは、外部 CICS インターフェース (EXCI) を使用して、CICS 領域でプログラムを呼び出すことができます。呼び出し先プログラムは、EGL によって生成されたもの、または別の方法で作成されたものです。

EGL での call ステートメントの生成方法を指定するには、リンケージ・オプション・パーツを使用します。
  • typeremoteCall である必要があります。
  • remoteComType は CICSEXCI である必要があります。
  • 呼び出し先プログラムにパラメーターを渡すには、callLink 要素の parmForm プロパティーを COMMDATA に設定します。

call ステートメントを処理するとき、EGL は、EXCI 経由で呼び出すための必要な COBOL コードを生成します。これらのリンケージ・オプションの詳細については、『CICS 環境でのプログラムの呼び出し』を参照してください。

z/OS バッチ環境から CICS プログラムを呼び出す場合、以下の制限があります。
  • クライアントの作業単位はサポートされません。
  • z/OS バッチ環境からの EXCI 呼び出しでは、チャネルおよびコンテナーはサポートされません。
  • EGL 可変長パラメーター (STRING タイプの変数など) を呼び出し先プログラムに渡すことはできません。
  • DL/I はサポートされません。

次の例では、calledExci というプログラムが z/OS バッチから呼び出されています。 この呼び出しでは、以下のリンケージ・オプションを使用します。
  • remoteComType = CICSEXCI (必須)
  • alias = CALLED
  • location = NQA17C03 (必須)
  • luwControl = SERVER
  • parmForm = COMMDATA
  • pgmName = calledExci
  • remotePgmType = EGL | EXTERNALLYDEFINED (影響なし)
  • serverID = ABCD (デフォルトは CSMI)
  • type = REMOTE
  • conversionTable (影響なし)
呼び出し側プログラムには、以下の EGL ステートメントが含まれます。
call "calledExci"(d, j);

フィードバック