Anwendungsbezogene Systemvariablen

#### Search Results

Search

# Anwendungsbezogene Systemvariablen

Dieses Dokument behandelt folgende Systemvariablen:

- *APPLIC-ID

- *APPLIC-NAME

- *COM

- *CONVID

- *COUNTER (r)

- *CPU-TIME

- *CURRENT-UNIT

- *DATA

- *EDITOR

- *ERROR-LINE

- *ERROR-NR

- *ERROR-TA

- *ETID

- *ISN (r)

- *LBOUND

- *LENGTH (field)

- *LEVEL

- *LIBRARY-ID

- *LINE

- *LINEX

- *LOAD-LIBRARY-ID

- *NUMBER (r)

- *OCCURRENCE

- *PAGE-EVENT

- *PAGE-LEVEL

- *PROGRAM

- *REINPUT-TYPE

- *ROWCOUNT

- *STARTUP

- *STEPLIB

- *SUBROUTINE

- *THIS-OBJECT

- *TYPE

- *UBOUND

## *APPLIC-ID

Format/Länge: | A8
Inhalt modifizierbar | Nein

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

## *APPLIC-NAME

Format/Länge: | A32
Inhalt modifizierbar | 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 modifizierbar | 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:

- Dialog-Gestaltung

  - Verarbeitung von Daten außerhalb des aktiven Fensters

  - Positionierung des Cursors auf *COM − Terminalkommando %T*

  - Daten vom Bildschirm kopieren

## *CONVID

Format/Länge: | I4
Inhalt modifizierbar | 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 modifizierbar | 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 Sourcecode-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 modifizierbar | 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 TP-Monitor-Systeme auf Großrechnern:

- CICS

- IMS TM

## *CURRENT-UNIT

Format/Länge: | A32
Inhalt modifizierbar | 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 modifizierbar | 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

Die Systemvariable `*EDITOR` zeigt 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 `*EDITOR` 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.

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

Anmerkung
Die Editoren sind auch eingeschaltet (aktiviert), wenn Natural ISPF installiert ist.

## *ERROR-LINE

Format/Länge: | N4
Inhalt modifizierbar | Nein

Diese Systemvariable enthält die Sourcecode-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 modifizierbar | 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 modifizierbar | Ja

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

Weitere Informationen siehe Verwendung eines Fehlertransaktionsprogramms im Leitfaden zur Programmierung.

## *ETID

Format/Länge: | A8
Inhalt modifizierbar | 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 modifizierbar | 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 Sourcecode-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. Wird auf eine Extended ESDS VSAM-Datei zugegriffen, dann wird Format/Länge von `*ISN` zur Unterstützung der 8-Byte-RBA als P19 generiert.
SQL-Datenbanken | `*ISN` kann nicht benutzt werden.

## *LBOUND

Format/Länge: | I4
Inhalt modifizierbar | 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 modifizierbar | 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 modifizierbar | 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 modifizierbar | 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 modifizierbar | 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 modifizierbar | Nein

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

Wenn diese Systemvariable im Sourcecode 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 modifizierbar | 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 modifizierbar | 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 Sourcecode-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.

## *OCCURRENCE

Format/Länge: | I4
Inhalt modifizierbar | 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 modifizierbar | 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 modifizierbar | 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 modifizierbar | Nein

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

## *REINPUT-TYPE

Format/Länge: | A16
Inhalt modifizierbar | 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 modifizierbar | 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 modifizierbar | Ja

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

`*STARTUP` enthält den Namen des Programms, das in Natural Security als Startup-Transaktion im Security-Profil der betreffenden Library eingetragen ist (außer im Batch-Betrieb; vgl. Natural Security-Dokumentation).

Falls keine Startup-Transaktion eingetragen ist oder Natural Security nicht verwendet wird, hängt der Wert von `*STARTUP` davon ab, wie der Profilparameter `MENU` gesetzt ist:

- Wenn `MENU=OFF` gesetzt ist, ist `*STARTUP` leer.

- Wenn `MENU=ON` gesetzt ist, enthält `*STARTUP` den Namen MAINMENU, d.h. das Natural-Hauptmenü wird aufgerufen.

Über ein Natural-Programm können Sie der Systemvariablen `*STARTUP` einen Wert zuweisen, der dann ihren jeweils vorherigen Inhalt überschreibt.

Anmerkung
Ein im Batch-Betrieb verwendetes Startup-Programm muss ein `FETCH`- oder `STACK COMMAND`-Statement enthalten; sonst kann ein Fehler NAT9969 auftreten.

Falls Sie die Kommandoeingabeaufforderung durch Eingabe von `%%` (oder einem gleichwertigen Kommando) aufrufen — entweder in einer Nicht-Security-Umgebung oder in einer Security-Umgebung, in der der Kommando-Modus für die aktuelle Library nicht verboten ist — wird dadurch der Startup-Mechanismus deaktiviert. Um ihn wieder zu aktivieren, müssen Sie sich entweder erneut in die Library begeben oder ein Programm ausführen, das s.o. `*STARTUP` wieder einen Wert zuweist.

Wichtig
Um das Programm zu deaktivieren, das in `*STARTUP` enthalten ist, setzen Sie z.B. mittels eines Statements `RESET *STARTUP` den Wert der Systemvariable auf "leer".

#### Unter Natural Security:

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

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

## *STEPLIB

Format/Länge: | A8
Inhalt modifizierbar | 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 modifizierbar | 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 modifizierbar | 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 modifizierbar | 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 modifizierbar | 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`.

### On this page

- *APPLIC-ID
- *APPLIC-NAME
- *COM
- *CONVID
- *COUNTER (r)
- *CPU-TIME
- *CURRENT-UNIT
- *DATA
- *EDITOR
- *ERROR-LINE
- *ERROR-NR
- *ERROR-TA
- *ETID
- *ISN (r)
- *LBOUND
- *LENGTH (field)
- *LEVEL
- *LIBRARY-ID
- *LINE
- *LINEX
- *LOAD-LIBRARY-ID
- *NUMBER (r)
- *OCCURRENCE
- *PAGE-EVENT
- *PAGE-LEVEL
- *PROGRAM
- *REINPUT-TYPE
- *ROWCOUNT
- *STARTUP
- *STEPLIB
- *SUBROUTINE
- *THIS-OBJECT
- *TYPE
- *UBOUND