@dli

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.

Die komplexe Eigenschaft @dli enthält die folgenden Eigenschaftsfelder:
callInterface DLICallInterfaceKind
Die Eigenschaft callInterface definiert Aspekte der IMS- und DL/I-Aufrufe, die das EGL-generierte COBOL-Programm als Reaktion auf EGL-Anweisungen wie z. B. add und get implementiert. Ein bewährtes Verfahren ist hier, AIBTDLI zu verwenden, auch wenn die Verwendung dieser Einstellung voraussetzt, dass Ihr Unternehmen PSBs entsprechend der AIBTDLI-Schnittstelle konfiguriert.
Die Werte sind wie folgt:
AIBTDLI (Standardeinstellung)
Die neuere Schnittstelle nutzt den IMS Application Interface Block (AIB). Die Schnittstelle verwendet den AIB, um anhand des Namens und nicht über die Adresse auf Laufzeit-PCBs zuzugreifen. Bevor Sie diese Schnittstelle verwenden, müssen Sie sicherstellen, dass Ihr Datenbankadministrator jedem PCB einen symbolischen Namen zugeordnet hat. Konkret muss der Programmierer den Parameter PCBNAME in der PSBGEN-Definition einstellen.

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.

CBLTDLI
Der Zugriff auf einen PCB über diese Schnittstelle erfolgt etwas schneller, weil Ihr Programm eine Adresse anstelle eines PC-Namens verwendet. Die Anforderungen an das Definieren der PSBRecord-Abschnitte sind aber strikter als bei AIBTDLI. Noch wichtiger ist jedoch, dass Sie normalerweise einen PSB-Datensatz oder PCB-Datensätze an aufgerufene Programme übergeben, anstatt einfach einen Namen in einem bestimmten Datensatz im aufgerufenen Programm zu verwenden. Neben der Verarbeitung zusätzlicher Daten in einem Programmaufruf erfordert die Übergabe eines PSB-Datensatzes, dass Sie die Eigenschaft psbParm des aufgerufenen Programms einstellen, und die Übergabe der PCB-Datensätzen setzt voraus, dass Sie die Eigenschaft pcbParms des aufgerufenen Programms einstellen. (Wenn Sie einen PSB-Datensatz und gleichzeitig PCB-Datensätze übergeben, wird der PSB ignoriert.)
psb STRING
Die Eigenschaft psb gibt die Programmvariable an, die auf dem PSBRecord basiert, der wiederum dem Program Specification Block (Lauftzeit-PSB) entspricht, der von dem Programm verwendet werden soll.
Beispiel:
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.

pcbParms STRING[]
Wie bei der Verwendung in einem aufgerufenen Programm, das PCB-Datensätze als Parameter empfängt, stellt das Eigenschaftsfeld pcbParms eine Liste mit Zeichenfolgen zur Verfügung, die EGL verwendet, um jeden Parameter (des Typs 'PCB-Datensatz') einem PCB-Datensatz im PSB-Datensatzabschnitt des Programms zuzuordnen. Wenn die Eigenschaft callInterface den Wert AIBTDLI hat, wirkt sich die Eigenschaft nicht aus.

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.

Auch wenn eine leere Zeichenfolge für jeden PCB-Datensatz verwendet wird, der im PSB-Datensatzabschnitt enthalten ist, dem aber kein Parameter entspricht, können Sie es vermeiden, die letzten Elemente in der Feldgruppe angeben zu müssen, wenn sich diese Elemente auf PCB-Datensätze beziehen, denen kein Parameter entspricht. Die folgende Zuordnung ist auch im aktuellen Beispiel gültig:
   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.

psbParm STRING

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.

Das folgende Beispiel zeigt die Eigenschaft psbParm:
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.

handleHardDLIErrors BOOLEAN
Legt den Standardwert für die Systemvariable vgVar.handleHardDLIErrors fest. Die Variable steuert, ob die Ausführung eines Programms beim Auftreten eines permanenten Fehlers bei einer in einem try-Block ausgeführten DL/I- oder Datenbank-E/A-Operation fortgesetzt wird. Der Standardwert für die Eigenschaft ist YES, wodurch die Variable auf 1 eingestellt wird.

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".


Feedback