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 内のフィールドを使用して、呼び出しの結果を判別することができます。