Unterstützte Natural-Merkmale

#### Search Results

Search

# Unterstützte Natural-Merkmale

In diesem Kapitel wird beschrieben, welche Natural-Funktionen und -Merkmale von Natural Advanced Facilities unterstützt werden und wie Sie diese benutzen können.

- DEFINE PRINTER Statement

- Texte mittels Con-form hervorheben

- Hardcopy-Funktion - %H

- FETCH- und STACK-Statements benutzen

- ET/BT-Logik

- Wiederherstellung nach abnormaler Beendigung

- Batch-Utilities NSPOBAT, SPPBATPR und SPPPRINT

- Spezielle User-Exits

- Lade- und Entladeprogramme SPPULDUS und SPPLODUS

## DEFINE PRINTER Statement

Das Statement `DEFINE PRINTER` wird verwendet, um einer Report-Nummer einen symbolischen Namen zuzuordnen und um die Zuordnung eines Reports zu einem logischen Ziel (Destination, d.h. Drucker) zu steuern.

Anmerkung
Das Statement `DEFINE PRINTER` ist in der Natural-Statements-Dokumentation ausführlich beschrieben. Im vorliegenden Abschnitt werden nur die Klauseln beschrieben, die für Natural Advanced Facilities gelten.

Dieser Abschnitt enthält außerdem Informationen zum Thema Gemischte Reports unter Verwendung von DEFINE PRINTER (siehe unten).

Die folgende Syntax des `DEFINE PRINTER`-Statements für NAF unterscheidet sich von der allgemeinen `DEFINE PRINTER`-Syntax, weil nicht alle Schlüsselwörter zutreffen:

`DEFINE PRINTER` | `([`logical-printer-name = `]`n `)`
`[OUTPUT` operand1 `]`
| `PROFILE` operand2 `DISP` operand3 `COPIES` operand3 `PRTY` operand4 |  |  |
4

`logical-printer-name` ist der Name, der dem Drucker `n` zugewiesen werden soll. Dies ist der Name, der für die `rep`-Notation in einem `DISPLAY`- oder `WRITE`-Statement verwendet wird. Der Wert für `n` kann im Bereich von `1` bis `31` liegen.

Der Operand `OUTPUT` ist das Ziel (Destination) innerhalb des Online-Spooling-Systems und ist ein logischer Drucker (LPF). Dieser logische Drucker muss in der Spool-Datei definiert sein (siehe Funktion 31.2), muss aber nicht Teil des derzeit aktiven Benutzerprofils sein.

Mit der `PROFILE`-Klausel geben Sie als `operand2` den Namen einer Druckersteuerzeichentabelle an, wie sie im NTCC-Makro oder in der Spool-Datei definiert ist (siehe NTCC-Tabelle, Funktion 31.8).

Bei der `DISP`-Klausel sind die möglichen Werte für `operand2` `DEL`, `HOLD` und `KEEP`. Wenn die `DISP`-Klausel weggelassen wird, wird die für den logischen Drucker angegebene Disposition verwendet.

Mit der `COPIES`-Klausel geben Sie die Anzahl der zu druckenden Exemplare an. Die möglichen Werte für `operand3` sind `1` bis `255`. Wenn die `COPIES`-Klausel weggelassen wird, wird die für den logischen Drucker angegebene Anzahl von Exemplaren verwendet.

Mit der `PRTY`-Klausel geben Sie die Priorität für den Spool-Out an. Die möglichen Werte für `operand4` sind `1` bis `255` (wobei `1` für die niedrigste und `255` für die höchste Priorität steht). Wenn die `PRTY`-Klausel weggelassen wird, wird die für den logischen Drucker angegebene Priorität verwendet.

Im Allgemeinen verwendet Natural Advanced Facilities die logischen Druckerdefinitionen im physischen Hauptspeicher (nicht die in der Spool-Datei). Es sind zwei verschiedene Situationen zu unterscheiden:

- Der angeforderte logische Drucker ist im aktiven Benutzerprofil enthalten.

- Der angeforderte logische Drucker ist nicht im aktiven Benutzerprofil enthalten.

Wenn ein `DEFINE PRINTER`-Statement für Drucker `n` einen logischen Drucker anfordert, der im aktiven Benutzerprofil enthalten ist (siehe Beispiel 1 unten), werden die logischen Druckerdefinitionen im Speicher nicht überschrieben. Ein nachfolgendes Natural-Programm wird daher dieselben logischen Druckerdefinitionen antreffen. Die logischen Druckerdefinitionen sind so lange gültig, bis ein anderes `DEFINE PRINTER`-Statement veranlasst, dass sie überschrieben werden.

Wenn ein `DEFINE PRINTER`-Statement für Drucker `n` einen logischen Drucker anfordert, der nicht im aktiven Benutzerprofil enthalten ist (siehe Beispiel 2 unten), wird die `n-`-te logische Druckerdefinition im Speicher durch die angeforderte überschrieben. Ein nachfolgendes Natural-Programm wird auf geänderte logische Druckerdefinitionen stoßen, die durch das vorherige `DEFINE PRINTER`-Statement festgelegt wurden (weil davon ausgegangen wird, dass die geänderten logischen Druckerdefinitionen auch von nachfolgenden Natural-Programmen verwendet werden sollen).

Die folgenden Beispiele zeigen, wie das Statement `DEFINE PRINTER` funktioniert.

#### Beispiel 1 - Logischer Drucker ist im aktiven Benutzerprofil enthalten:

    DEFINE PRINTER (2) OUTPUT 'LPF1'
    ...
    ...
    WRITE (2) 'text'
    ...
    WRITE (1) 'different text'
    ...

Wenn das obige Natural-Programm ausgeführt wird, wird die Ausgabe des `WRITE (2)`-Statement unter Verwendung der Definitionen von `LPF1` gespoolt. Das Statement `WRITE (1)` verwendet standardmäßig `LPF1`, da es kein Statement `DEFINE PRINTER (1)` gibt. Daher verwenden sowohl das `WRITE (1)`- als auch das `WRITE (2)`-Statement denselben logischen Drucker.

Wenn ein nachfolgendes Natural-Programm ein `WRITE (2)`-Statement ausführt und das Programm kein `DEFINE PRINTER (2)`-Statement enthält, wird die Ausgabe unter Verwendung der Definitionen von `LPF2` gespoolt.

#### Beispiel 2 - Logischer Drucker ist nicht im aktiven Benutzerprofil enthalten:

Wenn der `OUTPUT`-Operand des `DEFINE PRINTER`-Statement nicht mit einem der logischen Druckernamen im aktiven Benutzerprofil identisch ist, werden die Werte für das Druckerprofil mit den im `OUTPUT`-Operanden angegebenen neuen Werten überschrieben.

    ...
    DEFINE PRINTER (2) OUTPUT 'LPF9'
    ...

Der Operand `OUTPUT` des obigen `DEFINE PRINTER`-Statement bewirkt, dass die Definitionen von `LPF2` mit den Werten überschrieben werden, die `LPF9` zugewiesen sind, einschließlich des logischen Druckernamens. Das aktive Benutzerprofil wird wie folgt geändert:

Diese Definition bleibt für das Benutzerprofil so lange gültig, bis ein anderes `DEFINE PRINTER (2)`-Statement ausgeführt wird. So wird die Ausgabe aller nachfolgenden `WRITE (2)`-Statements innerhalb derselben Natural-Sitzung unter Verwendung der Definitionen von `LPF9` gespoolt, wenn kein weiteres `DEFINE PRINTER (2)`-Statement ausgeführt wird.

### Gemischte Reports unter Verwendung von DEFINE PRINTER

Natural-Programme müssen manchmal verschiedene Reports für denselben physischen Drucker erstellen. In diesem Fall muss auf den `OUTPUT`-Operanden des `DEFINE PRINTER`-Statement geachtet werden.

Wenn Sie `DEFINE PRINTER`-Statements für verschiedene logische Drucker, aber mit demselben `OUTPUT`-Operanden (d.h. demselben logischen Druckernamen) verwenden, wird nur ein Report erstellt. Dieser Report enthält die Ausgaben aller `WRITE`-, `PRINT`- oder `DISPLAY`-Anweisungen in gemischter Reihenfolge.

#### Beispiel:

    DEFINE PRINTER (1) OUTPUT 'LPF1'     /* LPF same as in (0020)
    DEFINE PRINTER (2) OUTPUT 'LPF1'     /* LPF same as in (0010)
    WRITE (1) 'This is for report 1'
    WRITE (2) 'This is for report 2'
    WRITE (1) 'This is for report 1'
    END

Wenn Sie `DEFINE PRINTER`-Statements für verschiedene logische Drucker und mit verschiedenen `OUTPUT`-Operanden (d. h. verschiedenen logischen Druckernamen) verwenden, werden mehrere Reports erstellt. Um diese Reports an denselben physischen Drucker weiterzuleiten, muss für die logischen Drucker dasselbe Ziel/Formular angegeben werden.

#### Beispiel:

    DEFINE PRINTER (1) OUTPUT 'LPF1'     /* LPF different from (0020)
    DEFINE PRINTER (2) OUTPUT 'LPF2'     /* LPF different from (0010)
    WRITE (1) 'This is for report 1'
    WRITE (2) 'This is for report 2'
    WRITE (1) 'This is for report 1'
    END

## Texte mittels Con-form hervorheben

Sie können alle gedruckten Reports oder Teile davon hervorheben., indem Sie mit Con-form-Anweisungen benutzen, z.B. während einer Con-nect-Session.

Folgende Con-form-Anweisungen werden unterstützt:

Anweisung | Beschreibung
--- | ---
`.BF` | Die Textzeilen zwischen zwei `.BF`-Anweisungen werden fett gedruckt.
`.BP` | Der in der nächsten Eingabezeile enthaltene Text wird fett gedruckt.
`.US` | Der in der nächsten Eingabezeile enthaltene Text wird unterstrichen.
`char B` | Rückschritt zur Überlagerung eines Zeichens durch ein anderes.
`char U1... char U0` | Text zwischen den Symbolen `U1` und `U0` wird unterstrichen.
`char M1... char M0` | Text zwischen den Symbolen `M1` und `M0` wird fett gedruckt.

Dabei steht `char` für ein beliebiges Sonderzeichen, das unter Verwendung der folgenden Con-form-Anweisung als Escape-Zeichen definiert worden ist:

    .OP ESC=char

Anmerkung:
Text kann nur in Fettdruck gedruckt werden, wenn der Natural-Profileparameter `INTENS` (siehe Natural Parameter-Referenz-Dokumentation) auf einen Wert größer als `1` gesetzt worden ist.

## Hardcopy-Funktion - %H

Wenn das Natural-Terminalkommando %H als Antwort auf eine Eingabeaufforderung abgesetzt wird, erzeugt es die Ausgabe von Natural-Reports und Dialogbildschirm-Layouts auf einem Drucker. Die Ausgabe erfolgt auf dem ersten freien (`FREE`) physischen Drucker, der für den definierten logischen Drucker für Hardcopy zugeordnet ist (siehe Funktionen 12, 30.5, 31.1 und 33). Das `%H`-Kommando ist für die aktuelle Seite wirksam und wird am Ende der Programmausgabe automatisch deaktiviert.

Wird `%H` bei einer durch ein `INPUT`-Statement erzeugten Bildschirm-Maske (Objekttyp Map) verwendet, wird der gesamte Inhalt des Seitenpuffers auf das Ausgabegerät gespoolt.

Das gleiche gilt für das Statement `SET CONTROL 'H'`.

## FETCH- und STACK-Statements benutzen

Der `NATSPOOL`-Nukleus schließt die Reports, wenn Natural in den Kommandomodus zurückkehrt. Wenn ein Natural-Anwendungsprogramm ein `STACK COMMAND`-Statement verwendet, um ein anderes Natural-Programm zu laden, wird der Kommandomodus aktiviert und die vom aufrufenden Programm erstellten Reports werden geschlossen und entsprechend ihrem Ziel (Disposition) gedruckt (vorausgesetzt, Natural befindet sich im ET-Status, d.h. es steht kein `END OF TRANSACTION`-Statement des Benutzers an).

Wenn jedoch ein `FETCH`-Statement verwendet wird, wird intern nicht in den Kommandomodus gewechselt, und die vom aufrufenden Programm erstellten Reports werden erst geschlossen und gedruckt, wenn das aufgerufene Programm endet. Auf diese Weise können mehrere Natural-Programme an der Erstellung eines einzigen Reports beteiligt sein.

#### Beispiel 1 - STACK-Statement benutzen:

    * PGM-1
    WRITE (1) 'output from PGM-1'
    STACK COMMAND 'PGM-2'
    END

    * PGM-2
    INPUT 'something' F1 (A8) (AD=MI)
    END

Wenn das Programm `PGM-1` ausgeführt wird, wird der durch das `WRITE (1)`-Statement erstellte Report geschlossen und sofort gedruckt.

#### Beispiel 2 - FETCH-Statement benutzen:

    * PGM-1
    WRITE (1) 'output from PGM-1'
    FETCH 'PGM-2'
    END

    * PGM-2
    WRITE (1) 'output from PGM-2'
    INPUT 'something' F1 (A8) (AD=MI)
    END

Wenn das Programm `PGM-1` ausgeführt wird, wird der mit dem Statement `WRITE (1)` erstellte Report nicht sofort gedruckt. Wenn das `INPUT`-Statement im Programm `PGM-2` ausgeführt wird, hat der Report den Status `LOAD` (der Report ist noch nicht geschlossen). Der Report wird erst nach Beendigung von `PGM-2` geschlossen und gedruckt. Die von `PGM-2` erzeugte Ausgabe wird in denselben Report geschrieben wie die Ausgabe von `PGM-1`.

## ET/BT-Logik

Der `NATSPOOL`-Nukleus versucht nur dann, ein Adabas-`ET`-Kommando für einen bestimmten Report zu erteilen, wenn die Schließen-Anforderung (`Close`) ausgeführt wird. Die Schließen-Anforderung wird ausgeführt, wenn Natural (intern) in den Kommandomodus zurückkehrt oder wenn ein `CLOSE PRINTER`-Statement ausgeführt wird. Zu diesem Zeitpunkt wird geprüft, ob sich Natural im `ET`-Status befindet, d.h. ob ein `END OF TRANSACTION`-Statement des Benutzers anhängig ist. Der `NATSPOOL`-Nukleus gibt nur dann ein `ET`-Kommando aus, wenn Natural im `ET`-Status ist (wenn kein Benutzer-`ET` ansteht). Dadurch wird sichergestellt, dass die Reports vollständig in der Spool-Datei gespeichert werden und dass die Logik der Benutzertransaktionen nicht beeinträchtigt wird.

Besondere Aufmerksamkeit muss der Reihenfolge der Statements `END OF TRANSACTION` und `CLOSE PRINTER (rep)` gewidmet werden, wie in den Beispielen 6 bis 8 unten gezeigt wird.

Bei der Erstellung von langen Reports in einer Adabas-Spool-Datei muss das Transaktionszeitlimit für `ET`-Logik-Benutzer (Parameter `ADARUN` `TT`) entsprechend definiert sein. Wenn das Zeitlimit überschritten wird, wird der Report aus der Spool-Datei zurückgezogen.

Die Größe der Hold-Warteschlange (Parameter `ADARUN` `NH`) muss ausreichend sein, um den Rückmeldecode 145 (`HOLD QUEUE OVERFLOW`) während der Erstellung eines Reports zu verhindern.

Der Datenschutzbereich (Parameter `ADARUN` `LP`) muss groß genug sein, um Rückmeldecode 9 zu verhindern.

#### Beispiel 1:

    READ (1) PERSONNEL BY NAME
      UPDATE ...
        WRITE (1) 'string'
      END OF TRANSACTION
    END

Die Datei `PERSONNEL` wird aktualisiert, und der Report wird gedruckt. Ein `ET` wird durch Natural (und nicht durch `NATSPOOL`) ausgegeben.

#### Beispiel 2:

    READ (1) PERSONNEL BY NAME
      UPDATE ...
        WRITE (1) 'string-1'
      END OF TRANSACTION
        WRITE (1) 'string-2'
    END

Die Datei `PERSONNEL` wird aktualisiert, und der Report wird gedruckt.

Das Statement `END OF TRANSACTION` zwingt Natural zur Ausgabe eines `ET`. Sobald dieser `ET` ausgeführt ist, wird die Datei `PERSONNEL` aktualisiert, die Ausgabe `string-1` wird in der Spool-Datei gespeichert und der Report befindet sich im Status `LOAD`. Da Natural sich jetzt im Status `ET` befindet, gibt `NATSPOOL` einen weiteren `ET` aus, um die Ausgabe `string-2` zu speichern. Der Status des Reports wird auf `TOBE` gesetzt.

Tritt zwischen der Ausführung von `END OF TRANSACTION` und dem nachfolgenden `ET` von `NATSPOOL` eine Unterbrechung auf, wird die Ausgabe `string-2` aus der Spool-Datei zurückgesetzt und der Report bleibt im Status `LOAD`. Wenn das obige Programm kein `END OF TRANSACTION` hätte und die Taste CLEAR gedrückt würde, dann würde der gesamte Report zurückgesetzt werden. Dies liegt daran, dass Natural beim Drücken der CLEAR-Taste einen `BT` ausgibt.

Der Report kann wiederhergestellt werden (d.h. der Status `TOBE` kann erzwungen werden), indem der Funktionscode `RC` mit Funktion 10 ausgegeben wird.

#### Beispiel 3:

    READ (1) PERSONNEL BY NAME
      UPDATE ...
      WRITE (1) 'string'
    END

Die Datei `PERSONNEL` und der Report befinden sich im Status `HOLD`. Wenn der Benutzer die Taste CLEAR drückt oder die Natural-Sitzung beendet, wird der Report aus der Spool-Datei zurückgesetzt (Backout).

Es wird kein `ET` ausgegeben, und der Report kann weder storniert noch von einem anderen Benutzer wiederhergestellt werden.

#### Beispiel 4:

    READ (1) PERSONNEL BY NAME
      UPDATE ...
      WRITE (1) 'string'
    BACKOUT TRANSACTION
    END

Die Änderung an der Datei `PERSONNEL` und der Report werden zurückgesetzt (Backout). Es wird kein `ET` ausgegeben.

#### Beispiel 5:

    READ (1) PERSONNEL BY NAME
      WRITE (1) 'string'
    END

Der Report wird gedruckt und es wird von `NATSPOOL` (nicht von Natural) ein `ET` ausgegeben.

#### Beispiel 6:

    READ (1) PERSONNEL BY NAME
      UPDATE ...
        WRITE (1) 'string'
      END OF TRANSACTION
      CLOSE PRINTER (1)
    END

Die Datei `PERSONNEL` wird aktualisiert und der Report wird gedruckt, sobald das `CLOSE PRINTER`-Statement ausgeführt wird. Es wird von Natural (nicht von `NATSPOOL`) ein `ET` ausgegeben.

#### Beispiel 7:

    READ (1) PERSONNEL BY NAME
      UPDATE ...
        WRITE (1) 'string'
      CLOSE PRINTER (1)
      END OF TRANSACTION  /* issued too late
    END

Während der Close-Verarbeitung (erzwungen durch das Statement `CLOSE PRINTER`) befindet sich die Datei `PERSONNEL` noch im Hold-Zustand. Da der Druckbeginn während der Close-Verarbeitung ausgelöst wird, wird der Report nicht gedruckt, sondern verbleibt in der Spool-Datei im Status `TOLA` (`END OF TRANSACTION` zu spät ausgegeben). Ein `ET` wird von Natural (nicht von `NATSPOOL`) ausgegeben.

#### Beispiel 8:

    READ (1) PERSONNEL BY NAME
      UPDATE ...
        WRITE (1) 'string'
      CLOSE PRINTER (1)
    END

Während der Close-Verarbeitung (erzwungen durch das Statement `CLOSE PRINTER`) befindet sich die Datei `PERSONNEL` noch in Wartestellung. Da der Druckbeginn während der Close-Verarbeitung ausgelöst wird, wird der Report nicht gedruckt, sondern verbleibt in der Spool-Datei im Status "nicht geschlossen, Transaktionsende fehlt" (`NOCL` = not closed, `END OF TRANSACTION` missing).

Es wird kein `ET` ausgegeben, und der Report kann weder storniert noch von einem anderen Benutzer wiederhergestellt werden.

## Wiederherstellung nach abnormaler Beendigung

Wenn der TP-Monitor während des `NATSPOOL`-Druckvorgangs abnormal beendet wird, geht der Report nicht verloren. Der Report verbleibt mit Status `ONPR` in der Spool-Datei.

Nach einem Neustart des TP-Monitors kann der Report wiederhergestellt werden, indem der Funktionscode `RC` mit der Funktion 10 abgesetzt wird. Dadurch wird der Report-Status `TOBE` erzwungen. Danach kann der Drucker neu gestartet werden, um den Report zu drucken.

## Batch-Utilities NSPOBAT, SPPBATPR und SPPPRINT

Diese Utility-Module dienen zum Lesen der Spool-Datei und zum Drucken von Reports im Batch-Modus. Die Module sind als `SPPBATPR`, `NSPOBAT` und `SPPPRINT` in der Natural-System-Library SYSPOOL katalogisiert.

Nachfolgend finden Sie Informationen über:

- NSPOBAT

- SPPBATPR

- SPPPRINT

- Beispiel - Formular A und ROOM*

- Löschen ohne Printout

### NSPOBAT

Reports, die mit `NSPOBAT` gedruckt werden, werden, ähnlich wie in Funktion 10 (Reports/Queues), nach ihrer Ziel-/Formularidentifikation ausgewählt.

Alle Reports, die mit Disposition `D`, `K` oder `H` ausgewählt wurden, werden so oft gedruckt, wie bei der Erstellung des Reports angefordert wurde. Reports mit anderen Dispositionen werden nicht gedruckt.

Um nach Beendigung des Druckjobs alle Reports mit Disposition `D` oder `H` aus der Spool-Datei zu löschen, geben Sie als letzten Parameter `PURGE` an. Reports mit anderen Dispositionen werden nicht gelöscht.

### SPPBATPR

Reports, die mit `SPPBATPR` gedruckt werden, werden, ähnlich wie in Funktion 10 (Reports/Queues), nach ihrer Ziel-/Formularidentifikation ausgewählt.

Alle Reports, die mit Disposition `D` oder `K` ausgewählt wurden, werden so oft gedruckt, wie bei der Erstellung des Reports angefordert wurde.

Um nach Beendigung des Druckjobs alle Reports mit Disposition `D` oder `H` aus der Spool-Datei zu löschen, geben Sie als letzten Parameter `PURGE` an.

### SPPPRINT

Mit `SPPPRINT` gedruckte Reports werden nach Ziel/Formular, Disposition, Benutzerkennung und nach der Anzahl der Tage (Alter in Tagen) oder dem Erstellungsdatum ausgewählt.

Die Anzahl der Tage bestimmt, dass alle Reports gedruckt werden, die die Anzahl der Tage überschreiten, die als Speicherlimit für die Spool-Datei angegeben ist.

Das Erstellungsdatum bestimmt, dass alle Reports gedruckt werden, deren Erstellungsdatum vor dem definierten Datum liegt.

Alle ausgewählten Reports werden so oft gedruckt, wie bei der Erstellung des Reports angegeben.

Um alle Reports nach Beendigung des Druckjobs aus der Spool-Datei zu löschen, geben Sie `PURGE` als letzten Parameter an.

### Beispiel - Formular A und ROOM*

Im folgenden Beispiel werden aus der Spool-Datei alle Reports mit Formular A und einer Zielangabe (Destination) beginnend mit `ROOM` gedruckt.

#### Beispiel - Batch-Ausführung unter z/OS:

    //SPPBATPR  JOB SPPBATPR,CLASS=G,MSGCLASS=X
    //LIST      EXEC PGM=NATBATCH,PARM='IM=F,FSPOOL=(,XXX)'
    //STEPLIB   DD   DSN=NATURAL.V41.LOAD,DISP=SHR
    //          DD   DSN=ADABAS.V61.LOAD,DISP=SHR
    //DDCARD    DD   DSN=NATURAL.V41.SOURCE(ADAPARM),DISP=SHR
    //CMPRINT   DD   SYSOUT=X
    //CMPRT01   DD   SYSOUT=X
    //CMSYNIN   DD   *
    LOGON SYSPOOL
    SPPBATPR DESTINATION=ROOM*,FORM=A
    FIN
    /*

### Löschen ohne Printout

Wenn Sie Reports unter Verwendung von `NSPOBAT`, `SPPBATPR` oder `SPPPRINT` löschen möchten, ohne sie zu drucken, können Sie zu `DUMMY` zuweisen.

#### Beispiel 1:

    LOGON SYSPOOL
    SPPBATPR DESTINATION=xxxxxxxx,FORM=y,PURGE=PURGE
    FIN

Alle Reports mit Ziel (Destination) xxxxxxxx und Formular y werden nach erfolgtem Druck aus der Spool-Datei gelöscht.

#### Beispiel 2:

Alle Reports aus der Spool-Datei werden gedruckt und nach erfolgtem Druck aus der Spool-Datei gelöscht.

    LOGON SYSPOOL
    SPPBATPR DESTINATION=*,FORM=*,PURGE=PURGE
    FIN

## Spezielle User-Exits

- USPINIT

- USPEXIT

- USPSER01

### USPINIT

Nach dem Start des Programms `MENU` in der Library `SYSPOOL` wird dieses Unterprogramm aufgerufen. Mit diesem Unterprogramm können Sie Ihre eigenen Einstellungen, Berechtigungen usw. festlegen. Die Einstellungen für die Meldungszeile (`%M`) und die PF-Tastenzeile (`%Y`) dürfen Sie nicht verändern.

### USPEXIT

Nach Beendigung der `SYSPOOL`-Anwendung wird dieses Unterprogramm aufgerufen. Sie können dieses Unterprogramm zur Steuerung Ihres Umfeldes verwenden.

### USPSER01

Dieses Unterprogramm wird vom Spool-Server während einer Natural-Session verwendet. Es erhält die Kontrolle, bevor ein Block an den Drucker gesendet wird. Die gelieferte Source enthält alle Parameterinformationen. Wenn Sie Daten in diesem Unterprogramm ändern, werden die geänderten Daten ungeprüft an den Drucker gesendet.

Wenn Ihr Drucker einen anderen User-Exit benötigt, können Sie mit den mit `USPSER01` gelieferten Parameterinformationen ein User-Exit-Unterprogramm schreiben, das Ihren Anforderungen entspricht, und es in der Natural-System-Library `SYSPRINT` katalogisieren. Um den User-Exit dem Drucker zuzuweisen, verwenden Sie die Funktion 31.4. Dort tragen den Namen des User-Exit-Unterprogramms in das Feld `Server-Exit` ein. Ihr User-Exit übernimmt dann die Kontrolle, bevor ein Block an den Drucker gesendet wird.

Weitere Einzelheiten finden Sie unter Funktion 31.4 (Printer) im Abschnitt Objekte - Funktion 31.

## Lade- und Entladeprogramme SPPULDUS und SPPLODUS

Mit dem Programm `SPPULDUS` kann der Natural-Administrator Objekte (Benutzerprofile, logische Drucker, physische Drucker usw.) aus einer Spool-Datei in die Arbeitsdatei (Work File) 3 entladen. `SPPULDUS` wird in der Library `SYSPOOL` ausgeliefert.

Die folgenden Funktionscodes stehen bei `SPPULDUS` zur Verfügung:

Code | Beschreibung
--- | ---
`1` | Benutzerprofil entladen.
`2` | Logischen Drucker entladen.
`3` | Zuordnungstabelle entladen.
`4` | Physischen Drucker entladen.
`5` | Deckblätter entladen.
`6` | Anwendung entladen.
`7` | Cluster entladen.
`8` | NTCC-Tabelle entladen.
`9` | Kalender entladen.
`*` | Alle Objekte entladen.

Um Objekte aus der Arbeitsdatei (Work File) 3 in eine Spool-Datei zu laden, kann der Administrator das Programm `SPPLODUS` verwenden. `SPPLODUS` wird in der Library `SYSPOOL` ausgeliefert.

Im Batch-Modus kann `SPPLODUS` außerdem verwendet werden, um Objekte aus einer vom Benutzer erstellten Arbeitsdatei, die zu `CMWKF03` zugewiesen ist, in eine Spool-Datei zu laden. Um mehrere Objekte im Batch-Modus zu ändern, entladen Sie zunächst die Objekte mit `SPPULDUS` in diese Arbeitsdatei, ändern dann die Objekte mit einem beliebigen Bearbeitungs-/Änderungswerkzeug und laden schließlich die Objekte mit `SPPLODUS` zurück. Informationen zum Layout der entladenen Objekte finden Sie in der Online-Hilfe von Natural Advanced Facilities (wählen Sie im Hilfe-Menü Funktion 99 und dann Funktion 1).

Anmerkung
Beim Ausführen von `SPPLODUS` muss keiner der oben aufgeführten Funktionscodes angegeben werden.

#### Beispiel - SPPULDUS bei Funktionscode *:

    //SPPULDUS  JOB  CLASS=K,MSGCLASS=X
    //SPPULDUS  EXEC PGM=NAT41OBT,REGION=2000K,PARM='FSPOOL=(XXX,XXX),IM=D'
    //STEPLIB   DD   DSN=NATURAL.V41.LOAD,DISP=SHR
    //          DD   DSN=ADABAS.V61.LOAD,DISP=SHR
    //DDCARD    DD   DSN=NATURAL.V41.SOURCE(ADAPARM),DISP=SHR
    //CMPRINT   DD   SYSOUT=X
    //CMWKF03   DD   DSN=NAF41.UNLOAD,DISP=SHR
    //CMSYNIN   DD   *
    LOGON SYSPOOL
    SPPULDUS
    *
    .
    FIN

The Beispiel-Job zur Ausführung von `SPPULDUS` bewirkt folgende Ausgabe:

    NEXT LOGON SYSPOOL
    LOGON ACCEPTED TO LIBRARY SYSPOOL
    NEXT SPPULDUS

    DATA *
    UNLOADED USER PROFILES            :               17
    UNLOADED LOGICAL PRINTERS         :               33
    UNLOADED ALLOCATIONS              :              101
    UNLOADED PHYSICAL PRINTERS        :               48
    UNLOADED EJECT CONTROLS           :               51
    UNLOADED MESSAGE HEADERS          :                2

    DATA .
    NEXT FIN
    NAT9995 Natural-Session TERMINATED NORMALLY

### On this page

- DEFINE PRINTER Statement
- Texte mittels Con-form hervorheben
- Hardcopy-Funktion - %H
- FETCH- und STACK-Statements benutzen
- ET/BT-Logik
- Wiederherstellung nach abnormaler Beendigung
- Batch-Utilities NSPOBAT, SPPBATPR und SPPPRINT
- Spezielle User-Exits
- Lade- und Entladeprogramme SPPULDUS und SPPLODUS