Anwendungsbezogene Systemvariablen

Dieses Dokument behandelt folgende Systemvariablen:


*APPLIC-ID

Format/Länge: A8
Inhalt änderbar Nein

Diese Systemvariable enthält die ID der Library, in der der Benutzer zurzeit angemeldet ist.

*APPLIC-NAME

Format/Länge: A32
Inhalt änderbar Nein

Unter Natural Security

Wenn Natural Security installiert ist, enthält diese Systemvariable den Namen der Library , in der der Benutzer zurzeit angemeldet ist, oder, wenn der Benutzer über einen speziellen Link angemeldet ist, den Link-Namen. Wenn Natural Security nicht installiert ist, enthält diese Systemvariable den Namen SYSTEM.

Die allgemeine Option Set *APPLIC-NAME always to library name kann so gesetzt werden, dass *APPLIC-NAME immer den Namen der Library enthält, und zwar unabhängig davon, ob der Benutzer über einen speziellen Link angemeldet ist oder nicht. Siehe Set *APPLIC-NAME always to library name in der Natural Security-Dokumentation.

*COM

Format/Länge: A128
Inhalt änderbar Ja

Diese Systemvariable stellt einen Kommunikationsbereich dar, der es ermöglicht, Daten von außerhalb eines Bildschirmfensters zu verarbeiten.

Wenn ein Fenster aktiv ist, können normalerweise keine Daten außerhalb des Fensters auf dem Bildschirm eingegeben werden. Wenn jedoch eine Map *COM als modifizierbares Feld enthält, kann ein Benutzer in dieses Feld auch dann Daten eingeben, wenn gerade ein Fenster auf dem Bildschirm aktiv ist.

Die weitere Verarbeitung kann dann vom Inhalt von *COM abhängig gemacht werden. Auf diese Weise können Sie Benutzeroberflächen implementieren, bei denen ein Benutzer auch dann Daten in der Kommandozeile eingeben kann, wenn ein Fenster mit eigenen Eingabefeldern aktiv ist.

Anmerkung:
Obwohl *COM als modifizierbares Feld in einem INPUT-Statement verwendet werden kann, wird es nicht als Eingabefeld, sondern als Systemvariable behandelt; d.h. Eingaben, die in *COM gemacht werden, werden genommen, wie sie sind, ohne dass eine Eingabeverarbeitung (z.B. Umsetzung in Großbuchstaben) erfolgt. Sobald *COM über ein INPUT-Statement auf dem Bildschirm angezeigt wurde, wird mit jedem anschließenden INPUT- oder REINPUT-Statement der jeweils aktuelle Inhalt von *COM ausgegeben.

Siehe auch die folgenden Abschnitte im Leitfaden zur Programmierung:

*CONVID

Format/Länge: I4
Inhalt änderbar Ja

Diese Systemvariable enthält die Konversations-ID des aktuellen konversationalen Remote Procedure Calls (RPC). Diese ID wird von einem OPEN CONVERSATION-Statement gesetzt.

Mit einem OPEN CONVERSATION-Statement kann ein Client einen Server zur alleinigen Benutzung erhalten, um eine Reihe von Services (Subprogrammen) innerhalb eines Server-Prozesses auszuführen. Diese alleinige Benutzung wird als Konversation bezeichnet. Das OPEN CONVERSATION-Statement dient dazu, eine Konversation zu eröffnen und die an ihr beteiligten Subprogramme anzugeben. Wenn ein OPEN CONVERSATION-Statement ausgeführt wird, weist es der Systemvariablen *CONVID eine eindeutige ID zu, die die Konversation identifiziert.

Es können mehrere Konversationen gleichzeitig offen sein. Um von einer offenen Konversation zu einer anderen zu wechseln, weisen Sie *CONVID die entsprechende Konversations-ID zu.

Weitere Informationen zu Natural RPC finden Sie in der Natural RPC (Remote Procedure Call)-Dokumentation.

*COUNTER (r)

Format/Länge: P10
Inhalt änderbar Ja

Diese Systemvariable enthält die Anzahl, wie oft eine mit einem FIND-, READ-, HISTOGRAM- oder PARSE-Statement initiierte Verarbeitungsschleife durchlaufen wurde.

Durch Angabe von (r) in Klammern hinter *COUNTER können Sie eine bestimmte Schleife referenzieren, wobei r das Statement-Label bzw. die Quellcode-Zeilennummer des betreffenden FIND-, READ-, HISTOGRAM- oder PARSE-Statements ist. Wenn Sie keine bestimmte Schleife referenzieren, bezieht sich *COUNTER auf die gerade aktive Verarbeitungsschleife.

Datensätze, die aufgrund einer WHERE-Klausel nicht weiterverarbeitet werden, werden im *COUNTER nicht mitgezählt. Datensätze, die aufgrund eines ACCEPT/REJECT-Statements nicht weiterverarbeitet werden, werden mitgezählt.

*CPU-TIME

Format/Länge: I4
Inhalt änderbar Nein

Diese Systemvariable enthält die aktuell vom Natural-Prozess benutzte CPU-Zeit in Einheiten von 10 ms.

Diese Systemvariable enthält den Wert Null für die folgenden Betriebs- oder TPMonitor-Systeme auf Großrechnern:

  • z/VSE

  • CICS

  • IMS TM

  • openUTM

*CURRENT-UNIT

Format/Länge: A32
Inhalt änderbar Nein

Diese Systemvariable enthält den Namen der aktuell ausgeführten Einheit. Dies ist

  • im Falle des Objekttyps Function der Name der Function,

  • der Name der internen Subroutine, falls eine interne Subroutine ausgeführt wird,

  • der Name der externen Subroutine im Falle des Objekttyps Subroutine (siehe auch Systemvariable *SUBROUTINE),

  • im Falle aller anderen Objekttypen (Programm, Subprogramm, Map, Dialog usw.) der Name des Objekts (siehe auch Systemvariable *PROGRAM).

Der Inhalt von *CURRENT-UNIT liegt immer in Großbuchstaben vor.

*DATA

Format/Länge: N3
Inhalt änderbar Nein

Diese Systemvariable enthält die Anzahl der im Natural-Stack gelagerten Datenelemente, die dem nächsten INPUT-Statement als Eingabedaten zur Verfügung stehen. Ist der Stack leer, enthält *DATA den Wert null (0). Ein Wert von −1 bedeutet, dass das zuoberst im Stack gelagerte Element ein Kommando oder der Name einer Natural-Transaktion ist.

Die Werte der Profil/Session-Parameter IA und ID zum Zeitpunkt der Ausführung des STACK-Statements dienen dazu, den Wert von *DATA zu bestimmen.

*EDITOR

Format/Länge: L
Inhalt änderbar Nein

Diese Systemvariable gibt an, ob der Natural-Programm-Editor, der Datenbereich-Editor (Data Area Editor) und der Masken-Editor (Map Editor) eingeschaltet (aktiviert) sind und benutzt werden können.

Die Systemvariable kann einen der folgenden Werte enthalten:

Wert Beschreibung
TRUE Die Editoren sind eingeschaltet (aktiviert).
FALSE Die Editoren sind nicht eingeschaltet (deaktiviert) und können nicht benutzt werden (Standard-Lizenz-Einstellung).

Weitere Informationen siehe NaturalONE als Standard-Entwicklungsumgebung benutzen in der Editoren-Dokumentation.

Anmerkung:
Wenn Natural ISPF installiert ist, sind die Natural Editoren ebenfalls eingeschaltet (aktiviert).

*ERROR-LINE

Format/Länge: N4
Inhalt änderbar Nein

Diese Systemvariable enthält die Quellcode-Zeilennummer des Statements, das einen Fehler verursacht hat.

*ERROR-LINE wird auf Null (0) zurückgesetzt, wenn ein Level-1-Programm mit der Ausführung beginnt.

*ERROR-NR

Als alternative Schreibweise können Sie auch *ERROR verwenden.

Format/Länge: N7
Inhalt änderbar Ja

Diese Systemvariable enthält die Fehlernummer des Fehlers, der die Verzweigung zu einer ON ERROR-Bedingung bewirkt hat.

Es werden nur Fehlernummern im Bereich von 0 bis 9999 unterstützt.

Normalerweise enthält *ERROR-NR die Natural-System-Fehlernummer, die das Eintreten der Fehlerbedingung verursacht hat; wenn allerdings ein Statement REINPUT WITH TEXT *nnnn ausgeführt wird, wird *ERROR-NR mit der betreffenden anwendungsspezifischen Fehlernummer nnnn gefüllt.

Sie können dieser Systemvariablen in einem Natural-Programm einen anderen Wert zuweisen, allerdings nicht innerhalb eines ON ERROR-Statement-Blocks.

*ERROR-NR wird auf Null (0) zurückgesetzt, wenn ein Level-1-Programm mit der Ausführung beginnt.

*ERROR-TA

Format/Länge: A8
Inhalt änderbar Ja

Diese Systemvariable enthält den Namen des Programms, an das die Kontrolle im Falle einer Fehlerbedingung übergeben wird.

Im Falle eines Fehlers führt Natural ein STACK TOP DATA-Statement aus und legt folgende Informationen, welche von einer Error-Transaktion als INPUT-Daten verwendet werden können, oben auf dem Stack ab:

  • Fehlernummer (N4 bei SG=OFF; N5 bei SG=ON)

  • Zeilennummer (N4)

  • Status (A1)

  • Programmname (A8)

  • Level (N2)

Status kann sein:

C Kommandoverarbeitungsfehler.
L Logon-Fehler. Bei Status L ist die Zeilennummer 0.
O Objektzeitfehler.
S Nicht korrigierbarer Syntaxfehler.
R Fehler auf Remote-Server (im Zusammenhang mit Natural RPC).

Wenn der Natural-Profilparameter SYNERR auf ON gesetzt ist und ein Syntaxfehler auftritt, ist *LEVEL Null, und die folgenden Informationen werden außerdem in den Stack gestellt:

  • Position des Fehler verursachenden Elements in der Source-Zeile (N3).

  • Länge des Fehler verursachenden Elements (N3).

*ETID

Format/Länge: A8
Inhalt änderbar Nein

Diese Systemvariable enthält den Wert zur Identifizierung von Transaktionsdaten (End of Transaction ID) für Adabas. Dieser Wert kann folgendes sein:

  • der Wert des Natural-Profilparameters ETID,

  • die vom TP-Monitor übergebene Benutzer-ID (nur auf Großrechnern),

  • der bei der Natural-Initialisierung im User Exit angegebene Wert (nur auf Großrechnern),

  • die im Security-Profil des gerade aktiven Benutzers definierte ETID (falls Natural Security eingesetzt wird).

*ISN (r)

Format/Länge: P10
Inhalt änderbar Ja

Diese Systemvariable enthält die Adabas-ISN des Datensatzes, der gerade in einer mit einem FIND- oder READ-Statement initiierten Verarbeitungsschleife verarbeitet wird.

Mit r in Klammern hinter *ISN können Sie eine bestimmte Schleife referenzieren, wobei r das Label bzw. die Quellcode-Zeilennummer des betreffenden FIND- oder READ-Statements ist. Wenn Sie keine bestimmte Schleife referenzieren, bezieht sich *ISN auf die gerade aktive Verarbeitungsschleife.

Bei einer mit HISTOGRAM initiierten Verarbeitungsschleife enthält *ISN die Nummer der Ausprägung, in der der zuletzt gelesene Wert des gerade verarbeiteten Deskriptors enthalten ist. Ist der Deskriptor nicht Teil einer Periodengruppe, enthält *ISN den Wert null (0).

Datenbank-spezifische Anmerkungen:

VSAM Bei VSAM-Datenbanken kann *ISN nur für ESDS und RRDS verwendet werden. Bei ESDS enthält *ISN die relative Byte-Adresse (RBA) und bei RRDS die relative Satznummer (RRN) des Datensatzes, der gerade in einer mit einem FIND- oder READ-Statement initiierten Verarbeitungsschleife verarbeitet wird.
SQL-Datenbanken *ISN kann nicht benutzt werden.
DL/I *ISN kann nicht benutzt werden.

*LBOUND

Format/Länge: I4
Inhalt änderbar Nein

*LBOUND enthält die aktuelle Untergrenze (Indexwert) eines Arrays für die angegebene(n) Dimension(en) (1, 2 oder 3) oder für alle Dimensionen (Stern-Notation (*)).

Syntax:

*LBOUND (operand1 [,dim])

Operanden-Definitionstabelle:

Operand Mögliche Struktur Mögliche Formate Referenzierung erlaubt Dynam. Definition
operand1     A     A U N P I F B D T L C G O ja nein

operand1 ist das Array, für das die Untergrenze angegeben wird. Die Index-Notation des Arrays ist optional. Als Index-Notation ist nur die Stern-Notation (*) für den vollständigen Bereich für jede Dimension zulässig.

dim ist die Dimensionsnummer, für die die aktuelle Untergrenze zurückgegeben wird:

dim =

1

2
3
*

Wenn keine Dimension angegeben wird, wird die Untergrenze der ersten Dimension zurückgegeben.

Wenn 1, 2 oder 3 angegeben wird, wird die Untergrenze der ersten, zweiten oder dritten Dimension zurückgegeben.

Wird Stern-Notation (*) verwendet, wird die Untergrenze aller definierten Dimensionen zurückgegeben, d.h.

1 im Falle eines eindimenisionalen Arrays
2 im Falle eines zweidimensionalen Arrays
3 im Falle eines dreidimensionalen Arrays

Wenn ein X-Array nicht zugewiesen wird und die Untergrenze der angegebenen Dimension dieses X-Arrays die variable Indexgrenze ist, d.h., wenn sie durch einen Stern (*) in der Indexdefinition dargestellt wird, dann ist die Untergrenze dieses X-Arrays nicht definiert, und der Zugriff auf *LBOUND führt zu einem Laufzeitfehler. Um den Laufzeitfehler zu vermeiden, kann die Systemvariable *OCCURRENCE benutzt werden, um auf Null-Ausprägungen abzuprüfen:

DEFINE DATA LOCAL
  1 #XA(A5/1:*)
END-DEFINE
IF *OCCURRENCE (#XA) NE 0 AND *LBOUND(#XA) > 10 
  THEN ...

Beispiele:

DEFINE DATA LOCAL
  1 #I  (I4)
  1 #J  (I4/1:3)
  1 #XA (A5/10:*,20:*)
END-DEFINE
#I  := *LBOUND(#XA)       /* lower bound of 1st dimension is 10 
#I  := *LBOUND(#XA,1)     /* lower bound of 1st dimension is 10
#I  := *LBOUND(#XA,2)     /* lower bound of 2nd dimension is 20
#J(1:2):= *LBOUND(#XA,*)  /* lower bound of all dimensions
                          /* #J(1) is 10 and #J(2) is 20
END

Siehe auch Systemvariablen *UBOUND und *OCCURRENCE.

*LENGTH (field)

Format/Länge: I4
Inhalt änderbar Nein

Diese Systemvariable gibt die gerade benutzte Länge (in Bytes) eines Feldes zurück, das als dynamische Variable in Form von Code-Einheiten definiert ist. Für Format A und B ist die Länge einer Code-Einheit 1 Byte, und für Format U ist die Länge einer Code-Einheit 2 Bytes (UTF−16).

*LENGTH(field) gilt nur für dynamische Variablen.

Siehe auch Aktuell für eine dynamische Variable benutzter Wertespeicher im Leitfaden zur Programmierung.

*LEVEL

Format/Länge: N2
Inhalt änderbar Nein

Diese Systemvariable enthält die Stufennummer (Level Number) des Objekts (Programm, Subprogramm, externe Subroutine, Map, Helproutine oder Dialog), das gerade ausgeführt wird. Stufennummer 1 bezeichnet jeweils ein Hauptprogramm. Falls zur Laufzeit höhere Stufennummern auftreten (maximal 1024), dann hat *LEVEL den Inhalt 99.

Interne Subroutinen werden von *LEVEL nicht berücksichtigt.

Siehe auch Verwendung eines Fehlertransaktionsprogramms im Leitfaden zur Programmierung.

*LIBRARY-ID

Format/Länge: A8
Inhalt änderbar Nein

Diese Systemvariable enthält die (mit dem LOGON-Kommando angegebene) Kennung der Bibliothek (Library-ID), in der der Benutzer gerade arbeitet.

Diese Systemvariable entspricht der Systemvariablen *APPLIC-ID.

*LINE

Format/Länge: I4
Inhalt änderbar Nein

Diese Systemvariable enthält die Nummer der gerade in einem Natural-Objekt ausgeführten Zeile.

Wenn ein Natural-Programmierobjekt mit dem Natural Optimizer Compiler kompiliert wurde, reflektiert der Wert von *LINE möglicherweise nicht die korrekte Zeilennummer, wenn die Source-Zeile, in der die Systemvariable benutzt wird, Bestandteil einer Folge von Statements ist, die vom Natural Optimizer Compiler optimiert wurden.

*LINEX

Format/Länge: A100
Inhalt änderbar Nein

Diese Systemvariable enthält die Zeilennummer des gerade ausgeführten Statements und alle Zeilennummern der verwendeten INCLUDE-Statement-Ebenen.

Wenn diese Systemvariable im Quellcode des Haupt-Programms (nicht innerhalb eines Copycode) verwendet wird, enthält sie nur die Nummer der Zeile, in der sie referenziert wird. In diesem Fall handelt es sich um den gleichen Wert, der von der Systemvariablen *LINE geliefert wird, lediglich das Format ist ein anderes (A100).

Wird die Systemvariable *LINEX in einer geschachtelten INCLUDE-Statement-Struktur verwendet, dann enthält dieses Feld alle Zeilennummern vom ersten bis zum letzten INCLUDE-Statement und die Zeilennummer des Statements, wobei die einzelnen Nummern durch einen Schrägstrich voneinander abgetrennt sind.

Beispiel:

....
3200
3210 INCLUDE COPY01
     0010 ...
     0020 ...
     ....     
     0200 INCLUDE COPY02
          0010 ...
          0020 ...
          ....
          0050 PRINT *LINEX

In diesem Beispiel erzeugt das PRINT-Statement die Ausgabe 3210/0200/0050. Diese gibt den vollständigen Zeilennummernpfad an, der benötigt wird, um genau die Stelle im Programm zu lokalisieren, an der die Systemvariable *LINEX zuerst referenziert worden ist.

*LOAD-LIBRARY-ID

Format/Länge: A8
Inhalt änderbar Nein

Diese Systemvariable enthält die ID der Library, aus der das zurzeit ausgeführte Objekt geladen wurde.

*NUMBER (r)

Format/Länge: P10
Inhalt änderbar Ja

Diese Systemvariable enthält eine der folgende Informationen:

  • Die Anzahl der Datensätze, die mit einem FIND-Statement (unter Erfüllung der WITH-Bedingung) gelesen wurden.

  • Die Anzahl der Werte, die als Ergebnis eines HISTOGRAM-Statements ausgewählt wurden.

  • Den Ende-Versatz des abgerufenen Segments als Ergebnis eines READLOB-Statements.

  • Den Ende-Versatz des eingefügten Segments als Ergebnis eines UPDATELOB-Statements.

Mit der Notation (r) hinter *NUMBER können Sie ein zugehöriges Statement referenzieren, wobei r das Label bzw. die Quellcode-Zeilennummer des Statements ist. Wenn Sie r nicht angeben, bezieht sich *NUMBER standardmäßig automatisch auf die innerste aktive FIND-, HISTOGRAM- oder READLOB-Schleife. Die Notation r ist immer erforderlich, wenn sich *NUMBER auf ein UPDATELOB-Statement bezieht.

Anmerkung:
Wenn *NUMBER zusammen mit einem FIND-Statement benutzt wird und die Adabas-Datei, auf die zugegriffen wird, durch die Adabas-Funktion Security By Value geschützt ist, enthält *NUMBER den Wert 9999999999, wenn mehr als 1 Datensatz gefunden wurde. Wenn 1 Datensatz gefunden wurde, enthält *NUMBER den Wert 1. Wenn kein Datensatz gefunden wurde, enthält *NUMBER den Wert 0.

Datenbank-spezifische Anmerkungen:

VSAM Bei VSAM-Datenbanken enthält *NUMBER die Anzahl der gefundenen Datensätze nur bei einem HISTOGRAM-Statement oder bei einem FIND-Statement, in dem der Operator EQUAL TO im Suchkriterium verwendet wird. Bei jedem anderen Operator enthält *NUMBER nicht die Anzahl der gefundenen Datensätze: Werden keine Datensätze gefunden, enthält *NUMBER den Wert 0; jeder andere Wert bedeutet, dass Datensätze gefunden wurden, aber der Wert steht in keinem Zusammenhang mit der tatsächlichen Anzahl der gefundenen Datensätze.
SQL-Datenbanken Bei SQL-Datenbanken enthält *NUMBER nur die Anzahl der gefundenen Zeilen, wenn *NUMBER mit einem FIND NUMBER- oder einem HISTOGRAM-Statement ohne WHERE-Klausel benutzt wird. In allen anderen Fällen enthält *NUMBER nicht die Anzahl der gefundenen Zeilen: Werden keine Zeilen gefunden, enthält *NUMBER den Wert null (0); jeder andere Wert bedeutet, dass Zeilen gefunden wurden, aber der Wert steht in keinem Zusammenhang mit der tatsächlichen Anzahl der gefundenen Zeilen.
DL/I Bei DL/I-Datenbanken enthält *NUMBER nicht die Anzahl der gefundenen Segment-Ausprägungen. *NUMBER enthält 0, wenn keine Segment-Ausprägung das Suchkriterium erfüllt, und den Wert 8.388.607=X'7FFFFF', wenn mindestens eine Segment-Ausprägung das Suchkriterium erfüllt.

*OCCURRENCE

Format/Länge: I4
Inhalt änderbar Nein

Diese Systemvariable liefert die aktuelle Anzahl der Ausprägungen eines variablen Arrays. Sie kann bei allen Arten von Array-Feldern mit einer festen oder änderbaren Anzahl an Ausprägungen angewendet werden.

Dazu gehören:

  • statische Arrays mit einer konstanten Anzahl an Ausprägungen

    Beispiel: (1:5)

  • X-Arrays mit einer änderbaren Anzahl an Ausprägungen

    Beispiel: (1:*)

  • Parameter-Arrays, definiert als (1:V)

Syntax:

*OCCURRENCE (operand1 [,dim])

Operanden-Definitionstabelle:

Operand Mögliche Struktur Mögliche Formate Referenzierung erlaubt Dynam. Definition
operand1     A     A U N P I F B D T L C G O ja nein

Operand1 ist das Array, für das die Anzahl der Ausprägungen zurückgegeben wird. Die Index-Notation des Arrays ist optional. Falls sie angegeben wird, ist nur die Stern-Notation (*) für den vollständigen Bereich für jede Dimension zulässig, zum Beispiel *OCC(#X(*)) oder *OCC(#Y(*,*)).

dim ist die Dimensions-Nummer, für die die aktuelle Anzahl der Ausprägungen zurückgegeben wird:

dim =

1

2
3
*

Erklärung:

1 Eindimensionales Array. Dies ist die Voreinstellung, wenn dim nicht angegeben wird.
2 Zweidimensionales Array.
3 Dreidimensionales Array.
* Alle für das entsprechende Array definierten Dimensionen sind gültig.

In einer Parameter Data Area können Sie mit der Index-Notation 1:V ein Array mit einer variablen Anzahl von Ausprägungen definieren (vgl. DEFINE DATA-Statement). Die tatsächliche Anzahl der Ausprägungen eines solchen variablen Arrays wird erst zur Laufzeit bestimmt. Mit *OCCURRENCE können Sie die tatsächliche Anzahl der Array-Ausprägungen ermitteln.

Beispiele:

DEFINE DATA                 
PARAMETER                   
  1 #PARR  (I2/1:V)          
LOCAL                       
  1 #FARR  (I2/1:5)          
  1 #XARR1 (I2/1:*) 
  1 #XARR2 (I2/1:*,1:*)         
  1 #I     (I2)              
  1 #J     (I2)
END-DEFINE                  
FOR #I = 1 TO *OCC(#PARR)       /* Parameter array
  WRITE 2X #I               
END-FOR                     
FOR #I = 1 TO *OCC(#FARR)       /* Fixed array
  WRITE 4X #I               
END-FOR                     
EXPAND ARRAY #XARR1 TO (1:4)   
FOR #I = 1 TO *OCC(#XARR1)      /* X-Array
  WRITE 6X #I               
END-FOR                     
EXPAND ARRAY #XARR2 TO (1:3,1:4)   
FOR #I = 1 TO *OCC(#XARR2,1)    /* X-Array
  FOR #J = 1 TO *OCC(#XARR2,2)  
    WRITE 8X #I #J               
  END-FOR                       
END-FOR                     
END 

Siehe auch Beispiel-Programme OCC1P und OCC2P.

In Zusammenhang mit X-Arrays enthält *OCCURRENCE die aktuelle Anzahl der Ausprägungen:

DEFINE DATA LOCAL
  1 #I   (I4)
  1 #J   (I4/1:3)
  1 #XA  (A5/1:*,1:*)
END-DEFINE
EXPAND ARRAY #XA TO (1:10,1:20)
#I      := *OCC(#XA)    /* #I=10 
#I      := *OCC(#XA,1)  /* #I=10
#I      := *OCC(#XA,2)  /* #I=20
#J(1:2) := *OCC(#XA,*)  /* #J(1)=10  #J(2)=20
END

*PAGE-EVENT

Format/Länge: U (dynamisch)
Inhalt änderbar Nein

Diese Systemvariable enthält den von Natural for Ajax gelieferten Namen des aktuellen Ereignisses.

Diese Systemvariable wird mit dem PROCESS PAGE-Statement zur Programmierung von Rich GUI-Anwendungen verwendet.

Weitere Informationen finden Sie in der Natural for Ajax-Dokumentation.

*PAGE-LEVEL

Format/Länge: I4
Inhalt änderbar Nein

Diese Systemvariable enthält den Level des aktiven PROCESS PAGE MODAL-Statement-Blocks.

Ist kein PROCESS PAGE MODAL-Statement-Block aktiv ist, dann ist der Wert von *PAGE-LEVEL Null (0).

Anmerkung:
Ist der Wert von *PAGE-LEVEL größer als Null, dann ist keine Ausgabe an Report 0 über ein INPUT-, PRINT-, WRITE- oder DISPLAY-Statement möglich.

*PROGRAM

Format/Länge: A8
Inhalt änderbar Nein

Diese Systemvariable enthält den Namen des Natural-Objekts, das gerade ausgeführt wird.

*REINPUT-TYPE

Format/Länge: A16
Inhalt änderbar Nein

Diese Systemvariable gibt an, ob sich die Anwendung in einem Status befindet, der die Ausführung eines REINPUT- oder eines PROCESS PAGE UPDATE-Statements zulässt.

Eine Anwendung kann ein INPUT-Statement und (falls sie mit Natural for Ajax läuft) ein PROCESS PAGE USING-Statement verwenden, um eine Ein-/Ausgabeverarbeitung auszuführen. Unter bestimmten Bedingungen kann eine Anwendung diese Ein-/Ausgabe-Statements mit einem REINPUT- oder PROCESS PAGE UPDATE-Statement zurückgeben oder erneut ausführen.

Der von dieser Systemvariablen zurückgegebene Wert gibt an, ob ein solches Statement zur erneuten Ausführung an dieser Stelle möglich ist oder nicht. Sie enthält einen der folgenden Werte:

Wert Beschreibung
(Leerzeichen) Die Anwendung kann weder ein REINPUT- noch ein PROCESS PAGE UPDATE-Statement ausführen.
REINPUT Die Anwendung kann ein REINPUT-Statement, aber kein PROCESS PAGE UPDATE-Statement ausführen.
UPDATE Die Anwendung kann ein PROCESS PAGE UPDATE-Statement, aber kein REINPUT-Statement ausführen.

*ROWCOUNT

Format/Länge: I4
Inhalt änderbar Nein

Diese Systemvariable enthält die Anzahl der Zeilen, die mit einem der Natural-SQL-Statements "Searched" DELETE, "Searched"UPDATE oder INSERT (mit select-expression) in einer Datenbanktabelle gelöscht, geändert bzw. hinzugefügt wurden. *ROWCOUNT bezieht sich jeweils auf das zuletzt ausgeführte dieser Statements.

*STARTUP

Format/Länge: A8
Inhalt änderbar Ja

Das Programm, dessen Name in dieser Systemvariablen steht, wird immer dann ausgeführt, wenn Natural normalerweise die Kommandoeingabeaufforderung (NEXT-Prompt bzw. Direktkommando-Zeile/-Fenster) anzeigen würde.

Aktivierung der Systemvariablen *STARTUP

Anfangseinstellung ohne Natural Security

Wenn Natural Security nicht benutzt wird, ist der Wert von *STARTUP abhängig von der Einstellung des Profilparameters MENU.

  • Wenn MENU=OFF gesetzt ist, dann ist *STARTUP leer.

  • Wenn MENU=ON gesetzt ist, dann enthält *STARTUP den Wert MAINMENU, d.h., es wird das Natural-Hauptmenü angezeigt.

Anfangseinstellung mit Natural Security

Wenn Natural Security benutzt wird und wenn eine Anmeldung (Logon) bei einer Library ausgeführt wird, dann enthält *STARTUP den Namen des Programms, das in Natural Security im Profil der betreffenden Library als Eröffnungstransaktion eingetragen worden ist (außer im Batch-Modus, siehe auch Natural Security-Dokumentation).

Einstellung zur Laufzeit

Sie können der Systemvariablen *STARTUP einen Programmnamen zuweisen, der den Inhalt von *STARTUP immer überschreibt.

Deaktivierung der Systemvariablen *STARTUP

Führen Sie folgende Schritte aus, um das in *STARTUP angegebene Programm zu deaktivieren:

  • Je nach dem Kontext, in dem *STARTUP benutzt wird, können Sie eine der folgenden Möglichkeiten wählen, um ein Eröffnungsprogramm ordnungsgemäß zu beenden, ohne eine Programmschleife bzw. den Natural-Fehler NAT9969 zu verursachen:

    1. Setzen Sie den Wert der Systemvariablen *STARTUP auf leer (zum Beispiel, indem Sie das Statement RESET *STARTUP benutzen) und beenden Sie den Eröffnungsvorgang danach.

    2. Beenden Sie die Session.

    3. Erzwingen Sie eine Abmeldung (Logoff) oder eine Anmeldung (Logon) bei einer anderen Library.

  • Falls das *STARTUP-Programm die Kommandoeingabeaufforderung MORE ausgibt, geben Sie ein Kommando oder eine andere Eingabe ein, um das Programm zu unterbrechen.

  • Falls das *STARTUP-Programm eine beliebige Ausgabe ausgibt, fordern Sie ein Kommandoeingabeaufforderung an, indem Sie das Natural-Terminalkommando %% absetzen.

    Das Kommando %% deaktiviert das Eröffnungsprogramm in einer Nicht-Security-Umgebung oder in einer Security-Umgebung, in der der Kommando-Modus für die aktuelle Library erlaubt ist.

Vermeidung unerwünschter Ergebnisse bei Benutzung der Systemvariablen *STARTUP

Bei der Definition eines Eröffnungsprogramms sollten Sie berücksichtigen, dass das Ergebnis des Programms durch Werte beeinträchtigt werden kann, die für die Systemvariablen *DEVICE, *SERVER-TYPE oder *SCREEN-IO zurückgegeben werden. Um unerwünschte Ergebnisse zu vermeiden, können Sie beispielsweise folgende Schritte ausführen:

  • Nehmen Sie im Batch-Modus (*DEVICE oder *SCREEN-IO) ein FETCH-Statement oder ein STACK COMMAND-Statement in das Eröffnungsprogramm auf. Andernfalls kann eine Programmschleife bzw. der Natural-Fehler NAT9969 auftreten.

  • Wenn Sie von NaturalONE aus eine Natural Development Server-Umgebung (*SERVER-TYPE) per Mapping aufrufen und eine Library mit einer aktiven *STARTUP-Systemvariablen auswählen, vergewissern Sie sich, dass das Eröffnungsprogramm keine Bildschirm-Ein-/Ausgaben ausführt und in der betreffenden Library ordnungsgemäß beendet wird (eine Anmeldung (Logon) bei einer anderen Library ist nicht erlaubt). Sie können die Anwendungsprogrammierschnittstelle USR4218N benutzen, um herauszufinden, ob NaturalONE in Ihrer aktuellen Systemumgebung ist. Siehe auch Beschreibung der Eröffnungstransaktionen in den Abschnitten Using an Exisiting Natural Development Server Environment und Frequently Asked Questions und im Glossary in der NaturalONE-Dokumentation.

Systemvariable *STARTUP unter Natural Security:

In einer Natural-Security-Umgebung, in der der Kommando-Modus für die aktuelle Library untersagt ist, bewirkt %%, dass das Programm aufgerufen wird, dessen Name in der Systemvariablen *STARTUP steht.

Im Eröffnungsprogramm muss ein FETCH-Statement oder ein STACK COMMAND-Statement enthalten sein, wenn im Security-Profil der Library, in der das Programm gespeichert ist, die NEXT/MORE-Zeile nicht erlaubt ist. Siehe Einstellung der entsprechenden Option im Abschnitt Security Options im Kapitel Library Maintenance in der Natural Security-Dokumentation.

Wenn ein durch eine Eröffnungstransaktion (*STARTUP) verursachter Natural-Laufzeitfehler auftritt, kann die Fehlerverarbeitung durch Natural dazu führen, dass die Eröffnungstransaktion erneut ausgeführt wird. Das würde eine Fehlerschleifensitutation verursachen. Um eine solche Schleife zu verhindern, steht die allgemeine Option Logoff in error case if *STARTUP is active zur Verfügung. Siehe Logoff in Error Case if *STARTUP is Active in der Natural Security-Dokumentation.

*STEPLIB

Format/Länge: A8
Inhalt änderbar Nein

Diese Systemvariable enthält den Namen der Steplib-Library, die mit der Natural-Library, in der der Benutzer gerade arbeitet, verknüpft ist.

Wenn Natural Security nicht installiert ist, enthält *STEPLIB den mit dem Profilparameter STEPLIB angegebenen Namen.

Wenn Natural Security installiert ist, kann die Steplib im Security-Profil der betreffenden Library eingetragen werden.

Anmerkung:
Bei der Steplib-Library wird immer davon ausgegangen, dass sie dieselbe Datenbank-ID und Dateinummer hat wie die aktuelle Library des Benutzers. Es wird davon ausgegangen, dass außer der Library SYSTEM die Libraries mit dem Namen SYSxxx sich in der Systemdatei FNAT und andere Libraries sich in FUSER befinden.

*SUBROUTINE

Format/Länge: A32
Inhalt änderbar Nein

Diese Systemvariable enthält den Namen der externen Subroutine, die gerade ausgeführt wird. Der Inhalt von *SUBROUTINE steht stets in Großbuchstaben.

*THIS-OBJECT

Format/Länge: HANDLE OF OBJECT
Inhalt änderbar Nein

Diese Systemvariable enthält eine Handle zum gerade aktiven Objekt. Das gerade aktive Objekt benutzt *THIS-OBJECT, um entweder seine eigenen Methoden auszuführen oder eine Referenz auf sich selbst an ein anderes Objekt zu übergeben.

*THIS-OBJECT enthält nur einen tatsächlichen Wert, wenn eine Methode ausgeführt wird. Sonst enthält es NULL-HANDLE.

*TYPE

Format/Länge: A32
Inhalt änderbar Nein

Diese Systemvariable enthält den Typ des Natural-Objekts, das gerade ausgeführt wird.

Gültige Werte für *TYPE:

Wert Objekttyp
PROGRAM Programm
FUNCTION Function
SUBPROGRAM Subprogramm
SUBROUTINE Subroutine
HELPROUTINE Helproutine
MAP Map
ADAPTER Adapter

*UBOUND

Format/Länge: I4
Inhalt änderbar Nein

*UBOUND enthält die aktuelle Obergrenze (Indexwert) eines Arrays für die angegebene(n) Dimension(en) (1, 2 oder 3) oder für alle Dimensionen (Stern-Notation (*)).

Syntax:

*UBOUND (operand1 [,dim])

Operanden-Definitionstabelle:

Operand Mögliche Struktur Mögliche Formate Referenzierung erlaubt Dynam. Definition
operand1     A     A U N P I F B D T L C G O ja nein

operand1 ist das Array, für das die Obergrenze angegeben wird. Die Index-Notation des Arrays ist optional. Als Index-Notation ist nur die *-Notation für den vollständigen Bereich für jede Dimension zulässig.

dim ist die Dimensionsnummer, für die die aktuelle Obergrenze zurückgegeben wird:

dim =

1

2
3
*

Wenn keine Dimension angegeben wird, wird die Obergrenze der ersten Dimension zurückgegeben.

Wenn 1, 2 oder 3 angegeben wird, wird die Obergrenze der ersten, zweiten oder dritten Dimension zurückgegeben.

Wenn * angegeben wird, wird die Obergrenze aller definierten Dimensionen zurückgegeben, d.h.

1 im Falle eines eindimenisionalen Arrays
2 im Falle eines zweidimensionalen Arrays
3 im Falle eines dreidimensionalen Arrays

Wenn ein X-Array nicht zugewiesen wird und die Obergrenze der angegebenen Dimension dieses X-Arrays die variable Indexgrenze ist, d.h., wenn sie durch einen Stern (*) in der Indexdefinition dargestellt wird, dann ist die Obergrenze dieses X-Arrays nicht definiert, und der Zugriff auf *UBOUND führt zu einem Laufzeitfehler. Um den Laufzeitfehler zu vermeiden, kann die Systemvariable *OCCURRENCE benutzt werden, um auf Null-Ausprägungen abzuprüfen:

DEFINE DATA LOCAL
  1 #XA(A5/1:*)
END-DEFINE
IF *OCCURRENCE (#XA) NE 0 AND *UBOUND(#XA) > 10 
  THEN ...

Beispiele:

DEFINE DATA LOCAL
  1 #I  (I4)
  1 #J  (I4/1:3)
  1 #XA (A5/*:10,*:20)
END-DEFINE
#i  := *UBOUND(#XA)        /* upper bound of 1st dimension is 10 
#i  := *UBOUND(#XA,1)      /* upper bound of 1st dimension is 10
#i  := *UBOUND(#XA,2)      /* upper bound of 2nd dimension is 20
#j(1:2):= *UBOUND(#XA,*)   /* upper bound of all dimensions
                           /* (1st and 2nd)
                           /* #J(1) is 10 and #J(2) is 20

Siehe auch die Systemvariablen *LBOUND und *OCCURRENCE.