プログラム仕様ブロック (PSB) およびプログラム連絡ブロック (PCB) を使用して、COBOL 用に生成するプログラム内の論理構造を記述します。
EGL は、PSB を PSBRecord ステレオタイプで表します。 このステレオタイプを使用してレコード・パーツをカスタマイズするときは、他のレコード・パーツの場合と同じように、次に、PSB レコード定義に基づいて変数を宣言します。 さらに、EGL は 4 種類の PCB レコード定義を組み込みます。PCB レコード定義 を使用して、PSB レコード定義内に PCB レコード変数を 宣言してください。
また、使用する COBOL 環境で実際の PSB および PCB を作成する必要があります。 これらの PSB および PCB 内の情報は、EGL の PSB および PCB 内の情報と一致している必要があります。
各 PCB レコードは、EGL が提供する定義済み PCB レコード定義の 1 つをベースにしています。PCB レコードのステレオタイプを参照してください。
特定のプラットフォームでは、初期 I/O PCB と少なくとも 1 つのテレプロセシング PCB を宣言する必要があります。詳しくは、このトピック内の『互換性』を参照してください。 EGL PSB レコードでこれらの PCB を宣言し、ランタイム環境がそれらの PCB をサポートしていない場合、関連 EGL PCB は生成される COBOL に含まれません。
callInterface = DLICallInterfaceKind.CBLTDLI
その割り当てにより DL/I 呼び出しの PCB 番号が調整され、I/O PCB およびテレプロセシング PCB の CICS サポートがないことに対応します。
ELAALT PCB TYPE=TP,MODIFY=YES
PCB TYPE=TP,MODIFY=YES,EXPRESS=YES,PCBNAME=ELAEXP
ELAPCB LABEL=ELAWORK
この場合、PSB レコード・パーツに PCB レコードを組み込む必要はありません。
PCB TYPE=TP,MODIFY=YES,PCBNAME=MYALTPCB
PCB TYPE=TP,MODIFY=YES,EXPRESS=YES,PCBNAME=MYEXPPCB
ELAPCB LABEL=MYWORKDB
Record MYPSB type PSBRecordPart
ELAALT ALT_PCBRecord {@PCB {pcbType = PCBKind.TP, PCBName = "MYALTPCB"}};
ELAEXP ALT_PCBRecord {@PCB {pcbType = PCBKind.TP, PCBName = "MYEXPPCB"}};
ELAWORK DB_PCBRecord {@PCB {pcbType = PCBKind.DB, PCBName = "MYWORKDB"}};
end
callInterface プロパティー・フィールドが AIBTDLI に設定されている場合、宣言が必要なのは、プログラムで使用される PCB レコード、および EGL に必要な名前と異なるランタイム名を持つ必須 PCB のみです。 この規則は、メインプログラムと呼び出し先プログラムに適用されます。
callInterface プロパティー・フィールドが CBLTDLI に設定されると、指定されたランタイム PCB へのアクセスは、名前ではなくアドレスを使用して行われます。
ターゲット・システムが IMS/VS で、DL/I データベースを EGL 作業データベースとして使用する場合、EGL PCB レコードに、データベース階層情報を組み込む必要はありません。 IMS システム・プログラマーは、ランタイム PSB を定義する際には、ELAPCB マクロを使用してください。 生成時には、workDBType ビルド記述子オプションのデフォルト値を受け入れて、作業データベースが DL/I データベースであることを示します。
呼び出し先プログラムで pcbParms プロパティーと psbParm プロパティーを指定すると、pcbParms に含まれる PCB 固有アドレスが psbParm に含まれる同等のアドレスをオーバーライドし、渡した PSB レコードは無視されます。
2 番目のレコード以外のレコードの名前として ELAALT を使用するか、または 3 番目のレコード以外のレコードの名前として ELAEXP を使用すると、その名前が優先されます。EGL は、そのように指定された PCB レコードは適切なタイプのランタイム PCB を参照していると想定します。
| プラットフォーム | 問題 |
|---|---|
| Java™ 生成 | PSBRecord ステレオタイプはサポートされていません。 |
| CICS | デフォルトでは、defaultPSBName PSB レコード・プロパティーの値は、ランタイム PSB の名前になります。 EGL はその名前を dliLib.psbData システム変数の psbName フィールドに入力しますが、このライブラリー・フィールドに別の値を割り当てることも可能です。プログラムが DL/I データベースに対して入出力操作を試行すると、psbName の値によって、どのランタイム PSB を使用するかが決まります。 dliLib.psbData システム変数には、2 番目のフィールド psbRef があります。
このフィールドの初期値はゼロです。これは、スケジュールに入っている PSB がないことを示します。
最初の DL/I I/O が発生すると、EGL ランタイムは PSB スケジュール呼び出しを発行します。
この呼び出しは、以下のアクションを実行します。
dliLib.psbData.psbRef にいかなる値を割り当てるロジックも作成しないでください。 呼び出し中は、dliLib.psbData 変数「pass the PSB」(名前とそれに関連するアドレスを渡します) を使用します。 転送中のランタイムの詳細な振る舞いは、その転送がどのように行われるかによって異なります。
DB PCB は、ランタイム PSB で有効です。 |
| IMS BMP | ランタイム JCL の PSB パラメーターは、ジョブ・ステップ全体を通じて使用されるランタイム PSB を識別します。 JCL は導入時にカスタマイズすることができますが、ランタイム JCL の PSB パラメーターのデフォルト値は、EGL が defaultPSBName PSB レコード・プロパティーの値を割り当てることによって生成します。 IMS BMP の場合、EGL では以下の PCB がランタイム PSB 内に存在している必要があります。
DB および GSAM PCB も有効です。 |
| IMS/VS | IMS システム定義の規則により、メインプログラムの名前は確実にランタイム PSB の名前になります。 この名前は、トランザクション全体を通じて使用可能です。 IMS/VS の場合、EGL では以下の PCB がランタイム PSB 内に存在している必要があります。
DB PCB も有効です。 workDBType ビルド記述子オプションの値が DLI (デフォルトのまま) の場合は、EGL 作業データベース用にランタイム DB PCB のいずれか 1 つを設定します。 EGL 作業データベースは、ランタイム PSB で ELAWORK として識別されるか、EGL PCB レコードの名前で識別されます。 最大の柔軟性を得るには、ランタイム PSB 内で最後のデータベース PCB を ELAWORK として指定します。 後で SQL 作業データベースを変更する場合も、この PCB は簡単に削除することができます。 |
| z/OS バッチ | ランタイム JCL の PSB パラメーターは、ジョブ・ステップ全体を通じて使用されるランタイム PSB を識別します。 JCL は導入時にカスタマイズすることができますが、PSB パラメーターのデフォルト値は、EGL が defaultPSBName PSB レコード・プロパティーの値を割り当てることによって生成します。 z/OS バッチの場合、EGL では最初のランタイム PCB は入出力 PCB である必要があります。PSBGEN ジョブの開発時には、IMS システム・プログラマーが CMPAT を YES に設定していることを確認してください。 EGL ではさらに、任意のタイプの 2 つの追加 PCB が、ランタイム PSB 内に存在している必要があります。DB および GSAM PCB は、代替 PSB と同様に有効です。 コードで代替 PSB を使用することはできません。しかしその一方、有効というのは、z/OS バッチおよび IMS BMP で同じランタイム PSB を使用できるということです。 |