VGTDLI()

vgLib.VGTDLI() システム関数は、CBLTDLI インターフェースを使用して DL/I 関数を直接呼び出します。

この関数と EGLTDLI() dliLib 関数の違いは、 この関数がインデックス変数を使用して呼び出しのための PCB を参照するのに対し、EGLTDLI() では PCB レコードの名前が使用される点のみです。 EGL では、VisualAge® Generator での CSPTDLI() 関数の互換性を確保するためにこの関数が含まれています。

構文

  vgLib.VGTDLI()(
    func CHAR(4) in,
    pcbindex SMALLINT in
    parms... ANY)
func
ISRT や GHNP などの、4 文字の DL/I 関数名
pcbindex
プログラム PSB 内のフィールドの字句順に従い、PCB を参照する、ゼロ・ベースのインデックス (再定義フィールドは無視)
parms...
指定された DL/I 関数に必要な数および型と一致するパラメーターの完全なリスト

AIBTDLI インターフェースを使用して DL/I 関数を呼び出すには、dliLib.AIBTDLI() を使用します。

発行する DL/I 呼び出しに対応する EGL I/O ステートメントがない場合は、vgLib.VGTDLI() を使用できます。 例えば、主記憶データベース (MSDB) またはデータ入力データベース (DEDB) に対する DL/I FLD 呼び出しに対応する EGL I/O ステートメントがない場合があります。 その場合でも、vgLib.VGTDLI() を使用して、FLD 呼び出しを発行することができます。 まず最初に PSBRecord パーツを定義し、プログラム変数をその PSBRecord に基づくものにします。例えば、次のようになります。
Record CustomerPSBRecord type PSBRecord { defaultPSBName="STBICLG" } 
  // 3 other PCBs
  ...
  // database PCB 
  customerPCB DB_PCBRecord { @PCB { pcbType = DB, 
    hierarchy = [ @relationship { segmentRecord = "CustomerRecord" },
    ...]}}; 
end

  mypsb CustomerPSBRecord;
vgLib.VGTDLI() ではランタイム PCB 名は使用されないため、customerPCB レコードの pcbName プロパティーを指定する必要はありません。この例では、CustomerPSBRecord の customerPCB の前に PCB が 3 つあると想定しています。
次に、入出力域を定義します。 また、SSA を定義し、フォーマットします。 vgLib.VGTDLI() を使用する場合は、SSA の DL/I 規則に従って SSA を正しくフォーマットする必要があります。 これが終了したら、以下のように DL/I FLD 呼び出しを発行することができます。
  vgLib.VGTDLI("FLD", 4, myIOArea, mySSA1, ... mySSAn);
  if (mypsb.customerPCB.statusCode != "  ")
    // エラー処理
  end
PCB の索引 (4) を、呼び出しの 2 番目の引数として指定しています。EGL は、vgLib.VGTDLI() を、DL/I CBLTDLI インターフェースを使用する DL/I 呼び出しに変換する。 呼び出し後、EGL 事前定義レコード DB_PCBRecord 内のフィールドを使用して、呼び出しの結果を判別することができます。

フィードバック