Direktive '#dli'

Verwenden Sie die Direktive '#dli', um die DL/I-Standardaufrufe zu ändern, die EGL aus Ein-/Ausgabe-Schlüsselwörtern generiert.

Stellen Sie die Direktive in dieselbe Zeile wie den durch sie geänderten EGL-Code (siehe folgendes Beispiel) und setzen Sie die Eingabe gegebenenfalls in zusätzlichen Zeilen fort:
get myLocation with #dli{
	GU STSCCST (STQCCNO = :myCustomer.customerNo) 
	   STSCLOC (STQCLNO = :myLocation.locationNo) };

Die Syntax in vorstehendem Beispiel entspricht nicht genau der Syntax in DL/I. EGL unterstützt eine leistungsfähige Pseudo-DL/I-Syntax, die bestimmte DL/I-Formatierungen für Sie durchführt. So konvertiert EGL beispielsweise alle Namen in Großbuchstaben, fügt Leerzeichen zu Namen hinzu, um sie bei Bedarf auf acht Zeichen zu erweitern, und konvertiert EGL-Vergleichsoperatoren wie "!=" in DL/I-Äquivalente. Darüber hinaus akzeptiert EGL in Ihren Pseudo-DL/I-Aufrufen auch Hostvariablen (Variablen, die im EGL-Hostprogramm und nicht in der DL/I-Datenbank definiert wurden). Im vorstehenden Beispielcode beginnen die Hostvariablen mit einem Doppelpunkt (:). Zur Generierungszeit wandelt EGL diese Grundbestandteile in ordnungsgemäß formatierte DL/I-Aufrufe um.

Sie können die Direktive '#dli' in folgenden Fällen verwenden:
  • Zum Hinzufügen eines DL/I-Befehlscodes, um die Funktion des Aufrufs zu erweitern. So können Sie beispielsweise einen verknüpften Schlüssel (*C) verwenden oder ein Segment in einem Pfadaufruf von einer Ersetzungsoperation ausschließen (*N).
  • Zum Absetzen eines Aufrufs 'get' oder 'get next' mithilfe einer dynamischen Feldgruppe als Operand. Beim Füllen einer dynamischen Feldgruppe mit 'get' müssen Sie einen anfänglichen GU-Aufruf absetzen, gefolgt von einer Schleife aus GN-Aufrufen, bis die Feldgruppe voll ist oder in DL/I keine Segmente mehr vorhanden sind. Da es kein Schlüsselfeld für die Feldgruppe selbst gibt (nur für Member der Feldgruppe), funktioniert der von EGL generierte DL/I-Standardcode nicht. Sie müssen einen Code ähnlich wie im folgenden Beispiel erstellen:
    myOrderArray OrderRecordPart[] {maxsize = 20}; //Feldgruppe aus Bestellungen (orders)
    
    get myOrderArray with #dli{
    	GU STSCCST STSCLOC STPCORD
    	GN STPCORD };
    
    //Abruf der nächsten 20 Bestellungen
    get next myOrderArray;
  • Zum Abrufen eines Segments, das auf einem anderen Feld als dem Schlüssel basiert oder auf einem Wert, der sich nicht im Segment selbst befindet.
  • Zum Lesen aller Segmente in der Datenbank, unabhängig vom Segmenttyp. Hierfür ist ein GN-Aufruf ohne Segmentsuchargument (SSA) erforderlich.
Spezielle Anweisungen für eine Reihe dieser Tasks finden Sie unter DL/I-Beispiele.