AIBTDLI()

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

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

構文

  dliLib.AIBTDLI()(
    func CHAR(4) in,
    pcbName STRING in
    parms... ANY)
func
ISRT や GHNP などの、4 文字の DL/I 関数名。
pcbName
ランタイム PSB 内の PCB の名前が含まれている文字列。
parms...
DL/I 関数で必要なパラメーターと数および型が一致するパラメーターの完全なリスト。

発行する DL/I 呼び出しに対応する EGL I/O ステートメントがない場合は、dliLib.AIBTDLI() を使用できます。 例えば、主記憶データベース (MSDB) およびデータ入力データベース (DEDB) に対する DL/I FLD 呼び出しに対応する I/O ステートメントは EGL に用意されていません。 この場合は、dliLib.AIBTDLI() を使用して、FLD 呼び出しを発行することができます。

まず最初に PSBRecord パーツを定義し、プログラム変数をその PSBRecord に基づくものにします。
Record CustomerPSBRecordPart type PSBRecord { defaultPSBName="STBICLG" } 
// database PCB 
  customerPCB DB_PCBRecord { @PCB { pcbType = DB, pcbName = "STDCDBL", 
    hierarchy = [ @relationship { segmentRecord = "CustomerRecordPart" },
    ...]}}; 
end

mypsb CustomerPSBRecordPart;
次に、入出力域を定義し、SSA を定義してフォーマットします。dliLib.AIBTDLI() を使用する場合は、DL/I 規則に従って SSA を正しくフォーマットする必要があります。その後で、DL/I FLD 呼び出しを発行できます。
dliLib.AIBTDLI("FLD", "STDCDBL", myIOArea, mySSA1, ... mySSAn);
if (mypsb.customerPCB.statusCode != "  ")
   // エラー処理
end
この例では、STDCDBL がランタイム PCB から取得した PCB 名です。実行時には、以下のアクションが行われます。
  • EGL は、AIB 制御ブロックを使用し、「STDCDBL」を AIB 内のリソース名フィールドに移動する。
  • EGL は、dliLib.AIBTDLI() を、DL/I AIBTDLI インターフェースを使用する DL/I 呼び出しに変換する。
  • EGL は、呼び出し後、customerPCB レコードのアドレスを設定して、AIB 制御ブロックで戻される PCB のアドレスと位置合わせする。 EGL 事前定義レコード DB_PCBRecord 内のフィールドを使用して、呼び出しの結果を判別することができます。

フィードバック