Verwenden Sie die komplexe Eigenschaft @dli, um das Verhalten für DL/I-Aufrufe von Ihrem Programm unter Verwendung eines SET-Werteblocks anzugeben.
Sie müssen diese Eigenschaft für jedes Programm hinzufügen, das DL/I-Datenbankeingabe-/ausgabe ausführt oder das Sie für die IMS/VS- oder IMS BMP-Zielplattform generieren wollen.
In EGL geben Sie den Namen durch Einstellen der Eigenschaft PCBName im PCB-Datensatz an. Der Standardwert für die Eigenschaft ist der Name des Datensatzes.
program Prog1 type basicProgram
{ @DLI { psb = "myPSB" }}
// Deklarieren der Variable auf der Basis der PSBRecord-Definition
myPSB CustomerPSBRecord;
Der PSBRecord stellt die Informationen zur Datenbankhierarchie zur Verfügung, die EGL beim Erstellen von Standard-SSAs verwendet, wenn Sie implizite DL/I-Datenbankeingabe/-ausgabe verwenden. Darüber hinaus stellt der PSBRecord bei CICS den Standard-PSB bereit, den EGL terminiert, wenn die erste DL/I-Datenbankeingabe/-ausgabe erfolgt.
Wie aus dem folgenden Beispiel hervorgeht, muss die Position der Zeichenfolgen in der Feldgruppe der Position von PCB-Datensätzen im PSB-Datensatzabschnitt des Programms entsprechen. Außerdem muss jede nicht leere Zeichenfolge in der Feldgruppe mit dem Namen eines PCB-Datensatzes in der Liste der Programmparameter übereinstimmen.
Record PSBRecordPart type PSBRecord {defaultPSBName = "ibmPSB"}
// Details zu folgenden Datensätzen werden in diesem Beispiel ausgelassen.
ioPCB IO_PCBRecord;
dbPCB DB_PCBRecord; // passed in
db2PCB DB_PCBRecord;
gsamPCB GSAM_PCBRecord; // passed in
gsam2PCB GSAM_PCBRecord;
end
program Prog2 type 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;
Wenn Sie die Eigenschaften pcbParms und psbParm angeben, überschreiben PCB-spezifische Adressen in der ersten Eigenschaft die entsprechenden Adressen in der zweiten Eigenschaft.
pcbParms = ["", "DB_PCB_parm", "", "GSAM_PCB_parm"]
Wenn Sie später einen PCB-Datensatz zum PSB-Datensatzabschnitt hinzufügen, können Sie einen Fehler bei der Positionierung der Feldgruppenelemente vermeiden, indem Sie (ohne Ausnahme) ein Feldgruppenelement für jeden PCB-Datensatz im PSB-Datensatzabschnitt einfügen.
Wenn ein PCB-Datensatz im PSB-Datensatzabschnitt eine Neudefinition eines anderen PCB-Datensatzes in diesem Abschnitt ist, stellen der ursprüngliche und der neu definierte Datensatz denselben Speicherbereich dar und werden nur einmal gezählt, wenn Sie die Feldgruppe für pcbParms erstellen.
EGL speichert PSB-Informationen in der Systemvariablen dliLib.psbData. Diese ist ein 12-Byte-Bereich, der den Namen und die Adresse für den Zugriff auf einen Laufzeit-PSB enthält. EGL stellt einen vordefinierten Datensatz mit dem Namen PSBDataRecord bereit, der die Feldstruktur für den 12-Byte-Bereich zur Verfügung stellt. Wenn CBLTDLI der Wert der Eigenschaft callInterface ist und Sie den gesamten PSB als Parameter in einem aufgerufenen Programm empfangen müssen, verwenden Sie die Eigenschaft psbParm, um anzugeben, welcher der Programmparameter die PSB-Informationen enthält. Verwenden Sie den PSBDataRecord als Typdefinition für diesen Parameter.
program Prog3 type basicProgram
( psbData PSBDataRecord ) // Parameter, der den PSB empfangen soll
{ @DLI { psb = "myPSB", psbParm = "psbData",
callInterface = CBLTDLI
}
}
// Deklarieren der Variable auf der Basis der PSBRecord-Definition
myPSB CustomerPSBRecord;
Wenn das EGL-Programm aufgerufen wird, ordnet EGL der Systemvariable dliLib.psbData automatisch die Informationen von dem Parameter zu, der durch die Eigenschaft psbParm angegeben wird.
Wenn Sie die Eigenschaften pcbParms und psbParm angeben, überschreiben PCB-spezifische Adressen in der ersten Eigenschaft die entsprechenden Adressen in der zweiten Eigenschaft.
Code, der von VisualAge Generator migriert wurde, funktioniert möglicherweise nicht wie zuvor, es sei denn, Sie stellen handleHardDLIErrors auf NO, wodurch die Variable auf 0 eingestellt wird.
Weitere Informationen finden Sie unter "Ausnahmebedingungsbehandlung".