Dieses Dokument beschreibt die zwei von Natural unterstützten Programmiermodi.
Die folgenden Themen werden behandelt:
Natural bietet zwei Formen der Programmierung:
Anmerkung:
Grundsätzlich empfiehlt es sich, ausschließlich im Structured Mode
zu arbeiten, um klar strukturierte Anwendungen zu erhalten.
Der Reporting Mode eignet sich nur für die Erstellung einfacher Reports und Programme, die keine komplexe Daten- und Programmstruktur erfordern. (Falls Sie sich entschließen sollten, ein Programm im Reporting Mode zu schreiben, sollten Sie bedenken, dass kleine Programme schnell umfangreicher und komplexer werden können.)
Bitte achten Sie darauf, dass manche Natural-Statements nur im Reporting Mode verfügbar sind, wohingegen andere eine spezifische Struktur aufweisen, wenn Sie im Reporting Mode benutzt werden. Eine Übersicht der Statements, die im Reporting Mode verwendet werden können, entnehmen Sie dem Abschnitt Statements im Reporting Mode in der Statements-Dokumentation.
Der Structured Mode ist für komplexe Anwendungen gedacht, bei denen es auf eine klare und sinnvoll gegliederte Programmstruktur ankommt. Wesentliche Vorteile des Structured Mode sind:
Die Programme müssen strukturierter geschrieben werden und sind daher leichter zu lesen und folglich auch leichter zu pflegen.
Da alle in einem Programm verwendeten Felder an einer zentralen Stelle definiert werden müssen (und nicht, wie im Reporting Mode, über das ganze Programm verstreut sein dürfen), wird der Überblick über die verwendeten Daten erheblich erleichtert.
Darüber hinaus zwingt der Structured Mode zu einer genaueren Anwendungsplanung, bevor es an das eigentliche Programmieren geht. Viele Fehler und Unzulänglichkeiten bei der Programmierung werden dadurch von vorneherein vermieden.
Eine Übersicht der im Structured Mode zu benutzenden Statements entnehmen Sie dem Abschnitt Statements nach Funktionsgruppen in der Statements-Dokumentation.
Der Standardprogrammiermodus wird vom Natural-Administrator mit dem
Profilparameter SM
festgelegt.
Weitere Informationen zum Profil- und Session-Parameter
SM
, entnehmen Sie dem Abschnitt
SM - Programming in Structured
Mode in der
Parameter-Referenz-Dokumentation.
Sie können den vorgegebenen Modus mit dem Systemkommando
GLOBALS
und
dem Session-Parameter SM
ändern:
Structured Mode: | GLOBALS SM=ON |
---|---|
Reporting Mode: | GLOBALS SM=OFF |
Weitere Informationen, wie Sie den Programmiermodus ändern können, finden Sie in folgenden Dokumenten: Programming Modes in Using Natural und SM - Programming in Structured Mode in der Parameter-Referenz-Dokumentation.
Die wichtigsten funktionalen Unterschiede zwischen Reporting Mode und Structured Mode lassen sich wie folgt zusammenfassen:
Anmerkung:
Ausführliche Informationen zu funktionalen Unterschieden zwischen
den zwei Modi finden Sie in der
Statements-Dokumentation. Sie enthält verschiedene
Syntax-Diagramme und Syntax-Elementbeschreibungen für jedes modus-sensitive
Statement. Eine Funktionsübersicht der im Reporting Mode zu benutzenden
Statements finden Sie im Abschnitt
Statements im
Reporting Mode im der
Statements-Dokumentation.
Reporting Mode: |
|
---|---|
Structured Mode: |
Jede Schleife oder logische Verarbeitungsbedingung muss
ausdrücklich mit einem entsprechenden |
Die beiden folgenden Beispiele veranschaulichen die je nach Programmiermodus unterschiedliche Konstruktion von Verarbeitungsschleifen und logischen Bedingungen.
Im Reporting-Mode-Beispiel werden die Statements
DO
und
DOEND
verwendet, um den Statement-Block einzugrenzen,
der an die AT END OF
DATA
-Bedingung geknüpft ist.
READ EMPLOYEES BY PERSONNEL-ID DISPLAY NAME BIRTH AT END OF DATA DO SKIP 2 WRITE / 'LAST SELECTED:' OLD(NAME) DOEND END
Das END
-Statement
beendet sämtliche aktiven Verarbeitungsschleifen.
Im Structured-Mode-Beispiel wird ein END-ENDDATA
-Statement
verwendet, um die AT END OF
DATA
-Bedingung zu beenden, sowie ein
END-READ
-Statement, um die READ
-Schleife zu beenden. Das
Ergebnis ist ein deutlicher strukturiertes Programm, in dem Sie sofort sehen
können, wo welche Konstruktion anfängt und aufhört:
DEFINE DATA LOCAL 1 MYVIEW VIEW OF EMPLOYEES 2 PERSONNEL-ID 2 NAME 2 BIRTH END-DEFINE READ MYVIEW BY PERSONNEL-ID DISPLAY NAME BIRTH AT END OF DATA SKIP 2 WRITE / 'LAST SELECTED:' OLD(NAME) END-ENDDATA END-READ END
Zum Beenden einer Verarbeitungsschleife können Sie im Reporting Mode
die Statements END
,
LOOP
(bzw. CLOSE
LOOP
) oder SORT
verwenden.
Mit dem LOOP
-Statement können Sie mehrere Schleifen
gleichzeitig schließen. Mit dem END
-Statement können Sie sämtliche
noch nicht beendeten Schleifen schließen. Diese Möglichkeit, mehrere Schleifen
mit einem einzigen Statement zu beenden, stellt einen grundlegenden Unterschied
zum Structured Mode dar.
Ein SORT
-Statement beendet alle Schleifen und initiiert
gleichzeitig eine neue Schleife.
FIND ... FIND ... ... ... LOOP /* closes inner FIND loop LOOP /* closes outer FIND loop ... ...
FIND ... FIND ... ... ... END /* closes all loops and ends processing
FIND ... FIND ... ... ... SORT ... /* closes all loops, initiates loop ... END /* closes SORT loop and ends processing
Im Structured Mode gibt es zum Beenden jeder Verarbeitungsschleife ein
bestimmtes Statement. Mit dem END
-Statement werden keine
Schleifen geschlossen. Bei Verwendung des SORT
-Statements müssen Sie vorher
ein END-ALL
-Statement verwenden, sowie zum Beenden der
SORT
-Schleife ein END-SORT
-Statement.
FIND ... FIND ... ... ... END-FIND /* closes inner FIND loop END-FIND /* closes outer FIND loop ...
READ ... AT END OF DATA ... END-ENDDATA ... END-READ /* closes READ loop ... ... END
READ ... FIND ... ... ... END-ALL /* closes all loops SORT /* opens loop ... ... END-SORT /* closes SORT loop END
Im Reporting Mode können Datenbankfelder benutzt werden, ohne dass
diese vorher in einem DEFINE
DATA
-Statement definiert werden müssen; außerdem können
Benutzervariablen an jeder Stelle eines Programms, d.h. über das ganze Programm
verstreut, definiert werden.
Im Structured Mode dagegen müssen alle verwendeten
Datenelemente an einer zentralen Stelle (entweder im DEFINE
DATA
-Statement am Anfang des Programms oder in einer externen
Data Area) definiert werden.
Im Reporting Mode ist es möglich, Datenbankfelder oder DDMs zu benutzen, ohne diese in einer Data Area definiert zu haben.
Im Structured Mode dagegen muss jedes Datenbankfeld, das benutzt werden
soll, in einem DEFINE
DATA
-Statement angegeben werden (wie in den Abschnitten
Felder
definieren und Datenbankzugriffe
beschrieben).