IMS/VS での EGL COBOL ランタイム作業データベースの使用
EGL プログラムでは、据え置きのプログラム間メッセージ交換でフォームとレコードの両方を渡すことができます。 セグメント化されたプログラムが非会話型 (SPA なし) として生成される場合は、show ステートメントがフォームとレコードの両方を指定する場合のデータの保存に作業データベースが使用されます。 Rational® COBOL Runtime for zSeries は、非 EGL プログラムが作業データベースにおいてデータを格納および取得する際に使用できるサブルーチンを提供します。 発生元およびターゲットの両方のプログラムまたはトランザクションは、物理的に同じ作業データベースを使用する必要があります。
- ELATSGET、作業データベースからデータを取得する。
- ELATSPUT、作業データベースにデータを格納する。
IMS™ での作業データベースからの読み取り (ELATSGET)
ELATSGET を使用すると、EGL プログラムからの据え置きのプログラム切り替え後に、作業データベースからレコードを読み取ることができます。 論理端末 ID が作業データベース・キーとして使用されます。
MOVE "ELATSGET" TO modname.
CALL modname USING parm1, parm2, parm3, parm4, parm5, parm6.
上記の例で、modname は 8 バイトの文字フィールドであり、parm1 から parm6 は以下のようになっています。- レコード・バッファー
- バッファーの長さ (フルワード・バイナリー)
- ターゲット・トランザクション・コード (空白で埋め込まれる 8 バイト)
- 入出力 PCB
- ELAWORK PCB (または、DB2® 作業データベースが使用される場合は 2 進ゼロのフルワード)
- 戻りコード (フルワード・バイナリー)
| コード | 意味 |
|---|---|
| 0 | 読み取り成功 |
| 4 | 読み取り成功、切り捨てが発生 |
| 8 | 読み取り失敗、レコードが未検出 |
| 12 | 読み取り失敗、その他のエラー |
切り捨ては、呼び出し側プログラムが以前に保存されたデータよりも小さいバッファーにデータを復元する場合に発生します。 バッファーが以前に保存されたデータよりも大きい場合、バッファーの後続のデータは空白で初期化されます。
ELATSGET ではエラー・メッセージを発行しません。 エラーが発生した場合は、呼び出し側プログラムが適切な処置を実行する必要があります。 DL/I 作業データベースが使用される場合は、エラーを示す状況コードが PCB に格納されます。 DB2 作業データベースが使用される場合は、エラーを示す SQL コードがフルワード・バイナリー (5 番目のパラメーター) に格納されます。
IMS での作業データベースへの書き込み (ELATSPUT)
ELATSPUT を使用すると、EGL プログラムへの据え置きのプログラム切り替えを実行する前に、作業データベースにレコードを書き込むことができます。 論理端末 ID が作業データベース・キーとして使用されます。
MOVE "ELATSPUT" TO modname.
CALL modname USING parm1, parm2, parm3, parm4, parm5, parm6.
上記の例で、modname は 8 バイトの文字フィールドであり、parm1 から parm6 は以下のようになっています。- レコード・バッファー
- レコードの長さ (フルワード・バイナリー)
- ターゲット・トランザクション・コード (空白で埋め込まれる 8 バイト)
- 入出力 PCB
- ELAWORK PCB (または、DB2 作業データベースが使用される場合は 2 進ゼロのフルワード)
- 戻りコード (フルワード・バイナリー)
| コード | 意味 |
|---|---|
| 0 | 書き込み成功、新規レコード追加 |
| 4 | 書き込み成功、既存レコードが置換 |
| 12 | 書き込み失敗、その他のエラー |
ELATSPUT ではエラー・メッセージを発行しません。 エラーが発生した場合は、呼び出し側プログラムが適切な処置を実行する必要があります。 DL/I 作業データベースが使用される場合は、エラーを示す状況コードが PCB に格納されます。 DB2 作業データベースが使用される場合は、エラーを示す SQL コードがフルワード・バイナリー (5 番目のパラメーター) に格納されます。