@DLI

プログラム・プロパティー @DLI によって、 値の設定ブロックを使用したプログラムによる DL/I 呼び出しの動作を指定できます。 プログラムにこのプロパティーを組み込むと、 EGL は DL/I データベースへの最新の呼び出しに関する詳細にアクセスできます。 詳細については、『DLIVar』を参照してください。

@DLI プロパティーには以下のフィールドが含まれます。
callInterface DLICallInterfaceKind
callInterface プロパティーは、EGL 生成の COBOL プログラムが addget のような EGL 文に対応して実行する IMS™ および DL/I 呼び出しの性質を定義します。 AIBTDLI の利用を推奨します。 ただし、その設定を使用すると、お客様の組織で、AIBTDLI インターフェースの必要に応じて PSB を適宜構成することが必要になります。
値は以下のとおりです。
AIBTDLI (デフォルト)
このより新しいインターフェースは、IMS アプリケーション・インターフェース・ブロック (AIB) を利用します。 AIB により、アドレスではなく名前でランタイム PCB にアクセスできます。 ただし、このインターフェースを使用する前に、お客様の組織のシステム・プログラマーが各ランタイム PCB にシンボル名を割り当て済みであるかどうかを確認してください。 プログラマーは具体的には、PSBGEN 定義の PCBNAME パラメーターを設定する必要があります。

PCB レコードの PCBName プロパティーを設定して、名前を識別します。 このプロパティーのデフォルトは、レコードの名前です。

CBLTDLI
プログラムが PCB 名ではなくアドレスを使用するので、PCB へのアクセスはわずかに速くなります。 しかし、PSBRecord パーツを定義する場合の要件は、AIBTDLI を使用する場合よりも大きな要件があります。 さらに重要なのは、単に呼び出し先プログラムの特定の PCB レコードにある名前を使用するのではなく、 通常は PSB レコードまたは PCB レコードを呼び出し先プログラムに受け渡さなければならないことです。 プログラム呼び出しでより多くのデータを処理するほかに、 PSB レコードの引き渡しには、呼び出し先プログラムの psbParm プロパティーを設定する必要があり、 PCB レコードの引き渡しには、呼び出し先プログラムの pcbParms プロパティーを設定する必要があります。 (PSB レコードと PCB レコードの両方を受け渡すと、PSB は無視されます。)
psb STRING
psb プロパティーは、 プログラムでスケジュールされているプログラム仕様ブロック (ランタイム PSB) を参照する PSB レコードを識別します。 レコードは有効範囲にある必要があります。

CICS® 以外の環境では、ランタイム PSB が実行単位でスケジュールされた最初のものである場合、変更できません。

pcbParms STRING[]
PCB レコードをパラメーターとして受け取る呼び出し先プログラムで使用した場合と同様、 プロパティー・フィールド pcbParms は、EGL が (PCB レコード・タイプの) 各パラメーターを、 プログラム PSB レコード・パーツにある PCB レコードと突き合わせできるようにする ストリングのリストを提供します。 callInterface プロパティー の値が AIBTDLI の場合、このプロパティーは効果がありません。

以下の例で示すように、配列内のストリングの位置は、プログラム PSB レコード・パーツ にある PCB レコードの位置に一致しなければなりません。 また、配列にある空でない各ストリングは、プログラム・パラメーターのリストの PCB レコード名に一致する必要があります。

Record PSBRecordPart type PSBRecord {defaultPSBName = "ibmPSB"}
  
  // 以下のレコードの詳細はこの例では省略されます
  ioPCB IO_PCBRecord;
  dbPCB DB_PCBRecord;       // パス済み
  db2PCB DB_PCBRecord;
  gsamPCB GSAM_PCBRecord;     // パス済み
  gsam2PCB GSAM_PCBRecord;
end

プログラム PrintCatalog タイプ basicProgram
(GSAM_PCB_parm GSAM_PCBRecord, DB_PCB_parm DB_PCBRecord) { 
	@DLI{
		psb = "myPSB",
		callInterface = CBLTDLI,
		pcbParms = ["", "DB_PCB_parm", "", "GSAM_PCB_parm", ""]
	}
}

	myPSB PSBRecordPart;

pcbParms および psbParm プロパティーを指定した場合、 前者の PCB 指定アドレスは、後者の同等アドレスをオーバーライドします。

空ストリングは、PSB レコード・パーツにはありパラメーターには一致しない各 PCB レコードに使用されますが、 配列の最終エレメントの指定は、それらの エレメントで、パラメーターに一致しない PCB レコードが参照される場合には、避けることができます。 以下の割り当ては、現行の例においても有効です。
   pcbParms = ["", "DB_PCB_parm", "", "GSAM_PCB_parm"]

後から PCB レコードを PSB レコード・パーツに追加する場合に配列エレメントの位置決めにおけるエラーを避けるため、PSB レコード・パーツの各 PCB レコードごとに配列エレメントを (例外なく) 組み込むようにします。

PSB レコード・パーツ内の PCB レコードが、そのパーツでの別の PCB レコードの再定義である場合、 オリジナルのレコードと再定義レコードはメモリーの同じ領域を表し、 pcbParms の配列を構成するときに 1 度だけカウントされます。

psbParm STRING
非 EGL プログラムが EGL プログラムを呼び出し、しかもランタイム PSB にアクセスするための 12 バイトの名前とアドレスを含む場合、呼び出されたプログラムのプロパティー psbParm が、名前とアドレスを提供するパラメーターを識別します。
パラメーターは PSBDataRecord 型であり、以下のように構造化されています。
  Record PSBDataRecord
    psbName char(8);
    psbRef int;
  end
これは使用中のプロパティーに関する例です。
  プログラム Prog1 ( psbData PSBDataRecord )
  {
     @DLI (psbParm = "psbData" )
  }

pcbParms および psbParm プロパティーを指定した場合、 前者の PCB 指定アドレスは、後者の同等アドレスをオーバーライドします。

プログラムが受け取る名前とアドレスは、システム変数 DLILib.psbData に自動的に割り当てられます。

handleHardDLIErrors BOOLEAN
システム変数 VGVar.handleHardDLIErrors のデフォルト値を設定します。 この変数は、try ブロック内の DL/I または IMS の入出力操作でハード・エラーが発生した後に、プログラムを継続して実行するかどうかを制御します。 このプロパティーのデフォルト値は yes であり、この変数は 1 に設定されます。

handleHardDLIErrorsno に設定していない (よって、変数を 0 に設定しない) 場合、VisualAge® Generator から移行されたコードが、以前のように機能しないことがあります。

詳細については、『DLIVar』および『例外処理』を参照してください。

関連概念
DL/I データベース・サポート
関連項目
DLIVar
例外処理
PCB レコード・パーツのプロパティー

フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.