JCL oder Natural-Source-Objekte editieren

#### Search Results

Search

# JCL oder Natural-Source-Objekte editieren

Dieses Kapitel beschreibt, wie Sie den Editor benutzen, um JCL und Natural-Source-Objekte zu editieren, und liefert grundsätzliche Informationen zum Editieren von JCL. Indem Sie die Master-JCL editieren, ändern Sie die Master-Definition, die jeden zukünftig ausgeführten aktiven Job beeinflusst.

Dieser Abschnitt behandelt folgende Themen:

- Allgemeine Hinweise zum Editieren

- UNIX- und Windows: Behandlung von TAB-Zeichen (H'09') innerhalb von JCL-Zeilen

- Verwendung von Textobjekten innerhalb von JCL

- JCL ansehen

- Master JCL editieren

- Funktionen im Editor-Fenster

- Macro-Quellcode für dynamische JCL-Generierung editieren

- Sperrung von Natural-Source-Objekten

- Vermeidung von Ausnahmen bei der Editierung der JCL Speicherart (NAT, MAC)

## Allgemeine Hinweise zum Editieren

- Automatisches Anmelden beim Betriebssystem-Server

- Anmelden bei einem Knoten

- Windows: Dateinamen

- UNIX und Windows: Textdateien

- UNIX: Verwendung von Profil-Skripten

- z/OS: JES2 /*ROUTE Statement

### Automatisches Anmelden beim Betriebssystem-Server

Bevor eine JCL editiert wird, wird von Entire Operations überprüft, ob der Benutzer auf die JCL-Datei zugreifen darf. Wenn es sich um eine Betriebssystem-Datei handelt, erfolgt eine automatische Anmeldung (Logon) mit der definierten JCL-Benutzerkennung (siehe Felder: Spezielle Angaben für BS2000-Ausführung bzw. Spezielle Felder: UNIX und Windows) des Jobs ausgeführt, falls dies erforderlich ist. Falls diese automatische Anmeldung nicht funktioniert (z.B. wenn eine Passwort-Eingabe erforderlich ist), so wird dies dem Benutzer angezeigt. In diesem Fall muss er zunächst eine Anmeldung bei dem betreffenden Betriebssystem-Server durchführen.

### Anmelden bei einem Knoten

Beim Editieren der Master-JCL wird ein implizites Anmelden (Logon) ausgelöst, um eine Verbindung zu dem angeforderten Knoten herzustellen. Wenn Sie sich während dieser Sitzung bereits bei diesem Knoten angemeldet haben, werden Sie nicht zur Anmeldung aufgefordert.

Weitere Informationen siehe Anmeldung im Abschnitt Entire Operations GUI Client benutzen.

### Windows: Dateinamen

Dateinamen in Windows können in einer alternativen Notation geschrieben werden, falls der umgekehrte Schrägstrich ( \ ) nicht zur Verfügung steht, wie z.B. in Großrechner-Umgebungen.

### UNIX und Windows: Textdateien

Ist eine als JCL zu editierende oder zu ladende Datei keine Textdatei, wird die Fehlermeldung `'EOR0325 - No Text File' (Keine Textdatei)` zurückgegeben. Beim Laden von JCL wird dies als permanenter Fehler behandelt.

### UNIX: Verwendung von Profil-Skripten

Entire Operations bestimmt die Verwendung von Profilen in Non-Login-UNIX-Skripten (weil sie von Entire Operations gestartet werden) beim Starten des Shell-Skripts folgendermaßen:

- Der Entire Operations-Monitor prüft, ob das Symbol `ETC-PROFILE` in der Symboltabelle des aktiven Jobs oder in einer anderen Symboltabelle in der Standard-Symbol-Suchhierarchie, bis hin zu `SYSDBA/A`, vorhanden ist.

  - Wird das Symbol `ETC-PROFILE` gefunden und enthält es den Wert `Y`, dann benutzt das Frame-Skript (job.current.sh) das Profil-Skript bzw. die Profil-Skripte als Source, die in der zurzeit laufenden Shell ausgeführt werden (andere Skripte werden nicht als Source benutzt). Diese Skripte werden abgerufen aus /etc/profile und /etc/profile.local.

  - Das Benutzer-Skript (job.current.frame.sh) findet die zurzeit gesetzten Umgebungsvariablen des Profil-Skripts.

- Der Entire Operations-Monitor prüft, ob das Symbol `ENV` in der Symboltabelle des aktiven Jobs oder in einer anderen Symboltabelle in der Standard-Symbol-Suchhierarchie, bis hin zu `SYSDBA/A`, vorhanden ist.

  - Wird das Symbol `ENV` gefunden und enthält es einen Wert, dann wird angenommen, dass es sich bei seinem Inhalt um ein Profil-Skript wie $HOME/.profile handelt.

  - Ist ein Profil-Skript vorhanden, wird sein Name durch das Frame-Skript (job.current.sh) den Umgebungsvariablen `ENV` und `BASH_ENV` zugewiesen.

  - Das Frame-Skript (job.current.frame.sh) benutzt das Profil-Skript als Source.

  - Das Benutzer-Skript (job.current.sh) findet die zurzeit gesetzten Umgebungsvariablen des Profil-Skripts.

Weitere Informationen zu `ETC-PROFILE` und `ENV` siehe Reservierte Symbole für Profil-Skripte.

Anmerkungen:

1. Mehrere Profile-Skripte können sequenziell als Source benutzt werden, wenn das Symbol `ETC-PROFILE` den Wert `Y` enthält und wenn das Symbol `ENV` den Namen eines Profil-Skripts enthält.
2. Der Benutzer muss dafür sorgen, dass die verwendeten Profil-Skripts gegen Mehrfachausführung gesichert sind, z.B. indem er die Variable `PROFILEREAD` wie in Linux verwendet.

### z/OS: JES2 /*ROUTE Statement

Falls eine z/OS JES2 JCL folgendes Statement enthält, wird der Job auf der Ziel-Maschine ausgeführt:

`/* ROUTE XEQ target`

Solange wie die SYSOUT-Datei an die auftraggebende Maschine zurückgegeben wird, ist der laufende Job nicht zugänglich. Entire Operations stellt fest, dass eine Rückgabe vorliegt, und verhält sich bei solchen Jobs anders.

Bei zurückgegebenen z/OS-Jobs sind einige Merkmale außer Funktion, z.B.:

- Direkte Nachverfolgung der Ausführung.

- Auflisten von SYSOUT während der Job-Ausführung.

- Abbrechen.

Jedoch wenn die SYSOUT-Datei wieder verfügbar ist, können alle Job-Ende-Prüfungen und alle Job-Ende-Aktionen durchgeführt werden.

## UNIX- und Windows: Behandlung von TAB-Zeichen (H'09') innerhalb von JCL-Zeilen

- Wenn eine Master-JCL oder aktive JCL editiert wird, wird vor dem Editieren jedes TAB-Zeichen in ein einzelnes Leerzeichen übersetzt. Dadurch kommt es nicht zu ungewöhnlichen Ergebnissen beim Editieren. Die JCL wird in jedem Fall ohne TAB-Zeichen zurückgeschrieben.

- Erweitertes Logging, JCL-Protokoll (Log): Zum erweiterten JCL-Protokollieren werden TAB-Zeichen auch in Leerzeichen übersetzt.

- Wenn Entire Operations auf einem Großrechner läuft, konvertieren die Middleware-Übersetzungstabellen TAB-Zeichen sowieso in Leerzeichen. Dies bedeutet, dass jede UNIX- und Windows-JCL ohne TAB-Zeichen abgeschickt wird.

- Wenn Entire Operations auf UNIX oder Windows läuft, bleiben TAB-Zeichen in der Master-JCL und aktiven JCL, solange die Master-JCL oder aktive JCL nicht innerhalb von Entire Operations editiert wird.

## Verwendung von Textobjekten innerhalb von JCL

Entire Operations gestattet es, Textobjekte in die JCL mit aufzunehmen. Die Textobjekte können eigene, lokale Parameter haben. Textobjekte können andere Textobjekte aufrufen, d.h., eine Verschachtelung ist möglich.

Die Aufnahme von Textobjekten ist nicht nur bei Jobs vom Typ MAC (Macro), sondern auch bei anderen JCL-Speicherarten möglich.

Weitere Einzelheiten siehe Jobtypen und Job-Ausführungsmerkmale und Textmodule in die JCL einfügen im Abschnitt Dynamische JCL-Generierung (JCL-Speicherart MAC).

## JCL ansehen

Mit dieser Funktion können Sie sich die zugehörige JCL ansehen.

Um die JCL anzuzeigen:

1. Markieren Sie im Objekt-Arbeitsbereich die Knoten Eigentümer > Eigentümername > Netzwerk-Definition > Netzwerkname > Jobs > jobname.

   Oder:
   Markieren Sie im Inhaltsbereich in der Liste der Jobs eine beliebige Job-Definition.

2. Rufen Sie das Kontextmenü auf und wählen Sie die Funktion JCL ansehen.

   Die JCL des Jobs wird angezeigt.

#### Verfügbare Funktionen innerhalb einer JCL:

Wenn Sie innerhalb der JCL das Kontextmenü aufrufen, können Sie den gesamten Inhalt der JCL oder Teile davon auswählen und kopieren, die JCL durchsuchen, zu einer bestimmte Zeile gehen, die JCL auf einem Drucker ausgeben, einen Macro-Test durchführen oder die JCL testen. Weitere Informationen siehe Funktionen im Editor-Fenster.

## Master JCL editieren

Dieser Abschnitt beschreibt, wie Sie JCL und Natural-Source-Objekte, einschließlich User Exits, editieren können.

Um die JCL eines Betriebssystem-Standard-Jobs oder ein Natural-Source-Objekt zu editieren:

1. Markieren Sie im Objekt-Arbeitsbereich die Knoten Eigentümer > Eigentümername > Netzwerk-Definition > Netzwerkname > Jobs > jobname.

   Rufen Sie das Kontextmenü auf und wählen Sie die Funktion JCL editieren.

   Oder:
   Wählen Sie in der Job-Verwaltung innerhalb des Dialogs zum Anlegen bzw. Ändern einer Master-Job-Definition auf der Registerkarte JCL-Definition die Schaltfläche Edit.

   Das Dialogfenster Editieren wird angezeigt (siehe folgende Beispiele):

   (Falls das Source-Objekt des angegebenen JCL-Members noch nicht existiert, ist das Dialogfenster leer.)

   - Beispiel-JCL für die Speicherart `PDS` (Member einer partitionierten Datei ):

     Das obige Beispiel zeigt das JCL-Member `NOPE02J3` des Jobs `JOB-PDS`.

   - Beispiel-JCL für die Speicherart `MAC` (Natural-Source-Objekt für Macro-JCL).

     Das obige Beispiel zeigt die Natural-Source `E51-M01`, die sich in der Bibliothek `SYSEORU` befindet.

2. Editieren Sie die Master JCL wie erforderlich.

   Wenn Sie eine Master JCL editieren, verändern Sie die Master-Definition, was sich auf alle zukünftig ausgeführten aktiven Jobs auswirkt.

3. Wählen Sie Speichern in der Tool-Leiste oder im Objekt-Menü in der Menüleiste, um Ihre Änderungen zu speichern.

#### Implizite Anmeldung (Logon)

Wenn Sie die Master-JCL editieren, wird ein impliziter Logon durchgeführt, um die Verbindung zum entsprechenden Knoten herzustellen. Es erscheint keine Logon-Aufforderung, wenn Sie sich bereits bei dem Knoten in dieser Session angemeldet haben.

Anmerkung
Weitere Informationen siehe Logon bei einem Knoten.

#### Verfügbare Funktionen innerhalb einer JCL:

Wenn Sie innerhalb der JCL das Kontextmenü aufrufen, können Sie den gesamten Inhalt der JCL oder Teile davon auswählen und kopieren, die JCL durchsuchen, zu einer bestimmte Zeile gehen, die JCL auf einem Drucker ausgeben, einen Macro-Test durchführen oder die JCL testen. Weitere Informationen siehe Funktionen im Editor-Fenster.

Um den Quellcode eines User Exit zu editieren:

1. Markieren Sie im Dialog Neues Objekt erzeugen Jobs (bzw. im Dialog Verwaltung Jobs) das Register Eingabebedingungen.

2. Markieren Sie die betreffende Eingabebedingung vom Typ `Exit` in der Tabelle.

3. Wählen Sie die Schaltfläche Edit.

   Das Dialogfenster Editieren wird angezeigt. Wenn der User Exit schon vorhanden ist, wird im Fenster die erste Seite des Natural-Subprogramms angezeigt (Beispiel):

   Andernfalls enthält das Fenster nur ein unvollständiges Muster eines `DEFINE DATA`-Statement.

   Beispiel mit eingeblendetem Zeilenlineal:

4. Editieren Sie den Quellcode wie erforderlich.

   Sie können die im Kontext-Menü des Dialogfensters Editieren oder in der Tool-Leiste im Entire Systems Management-Hauptbildschirm zur Verfügung stehenden Editor-Funktionen benutzen, um Text zu suchen, zu ändern, im Quellcode zu navigieren oder spezielle Funktionen für Macro-Source-Objekte auszuführen. Siehe Funktionen im Editor-Fenster.

   Um ihn benutzen zu können, müssen Sie den User Exit in einer Natural-Bibliothek speichern und als Natural-Objekt katalogisieren.

   Informationen zum Kodieren von User Exits siehe User Exits für die Job-Ende-Prüfung und -Aktionen im Kapitel User Exits.

## Funktionen im Editor-Fenster

Dieser Abschnitt enthält eine Übersicht über die Kommandos und Funktionen, die Ihnen im Kontext-Menü des Dialogfensters Editieren oder in der Tool-Leiste im Entire Systems Management-Hauptbildschirm zur Verfügung stehen.

Kommando | Tastenkombination | Funktion
--- | --- | ---
Undo | `CTRL+Z` | Letzte Maßnahme rückgängig machen.
Redo | `CTRL+Y` | Letzte Maßnahme wiederholen.
Ausschneiden | `CTRL+X` | Markierte Zeichenkette ausschneiden und in der Zwischenablage speichern.
Kopieren | `CTRL+C` | Markierte Zeichenkette kopieren und in der Zwischenablage speichern.
Einfügen | `CTRL+V` | Zuvor ausgeschnittene oder kopierte, in der Zwischenablage gespeicherte Zeichenkette einfügen.
Löschen | `DELETE` | Markierte Zeichenkette löschen.
Alles auswählen | `CTRL+A` | Den gesamten, im Dialogfenster Editieren enthaltenen Text markieren.
Großbuchstaben | `CTRL+SHIFT+U` | Markierte Zeichenkette in Großbuchstaben umwandeln.
Kleinbuchstaben | `CTRL+SHIFT+L` | Markierte Zeichenkette in Kleinbuchstaben umwandeln.
Suchen | `CTRL+F` | Öffnet das Dialogfenster Suchen zur Eingabe einer Suchzeichenfolge und zur Angabe von Suchoptionen (Groß-/Kleinschreibung beachten und/oder nur ganzes Wort berücksichtigen) und der Suchrichtung (rückwärts oder vorwärts). Standardmäßig wird die zurzeit markierte Zeichenkette in das Feld Suchen übernommen.
Suche Nächstes | `F3` | Sucht die nächste Ausprägung der im Dialogfenster Suchen angegebenen Zeichenkette.
Ersetzen | `CTRL+H` | Öffnet das Dialogfenster Suchen zur Eingabe einer Suchzeichenfolge im Feld Suchen und einer Ersetzungszeichenfolge im Feld Ersetzen sowie zur Angabe von Suchoptionen (Groß-/Kleinschreibung beachten und/oder nur ganzes Wort berücksichtigen) und der Suchrichtung (rückwärts oder vorwärts) und ob jede Ersetzung einzeln bestätigt werden soll. Standardmäßig wird die zurzeit markierte Zeichenkette in das Feld Suchen übernommen.
Ersetzen Nächstes | `CTRL+F3` | Sucht die nächste Ausprägung der im Feld Suchen im Dialogfenster Ersetzen angegebenen Zeichenkette.
Gehe zu | `CTRL+G` | Öffnet das Dialogfenster Gehe zu zur Eingabe der Nummer einer Quellcodezeile, in die der Cursor platziert werden soll.
Zeilenlineal ein/aus | `CTRL+T` | Zeilenlineal am oberen Rand desEditor-Fensters ein- bzw. ausblenden. Siehe Beispiel mit eingeblendetem Zeilenlineal weiter oben. Damit das Zeilenlineal standardmäßig eingeblendet ist, muss auf der Registerkarte GUI Allgemein im Benutzerprofil das Kontrollkästchen Zeilenlineal im JCL Editor markiert sein. Siehe GUI Allgemein in der Systemverwaltung-Dokumentation.
Drucken | `CTRL+P` | Öffnet das Dialogfenster Drucken (bzw. Print) zur Auswahl eines Druckers, auf dem der Text ausgegeben werden soll.
Check | --- | Betrifft nur Natural-Source-Objekte. Prüft den Quellcode auf Syntaxfehler.
Catalog | --- | Betrifft nur Natural-Source-Objekte. Katalogisiert den Quellcode.
Stow | --- | Betrifft nur Natural-Source-Objekte. Prüft den Quellcode auf Syntaxfehler und katalogisiert ihn.
Macro | --- | Betrifft nur Macro-Source-Objekte. Siehe Spezielle Editor-Funktionen für Macro-Source-Objekte.
Test | --- | Betrifft nur Macro-Source-Objekte. Siehe Spezielle Editor-Funktionen für Macro-Source-Objekte.

## Macro-Quellcode für dynamische JCL-Generierung editieren

Jobs mit JCL-Speicherart Macro Natural source (`MAC`) benutzen die Entire Operations MACRO-Editier-Funktionalität, die die Benutzung von Variablen an beliebiger Stelle in der JCL gestattet. Die dynamische Generierung von JCL bezieht sich auf die automatische Ersetzung dieser Variablen durch ihre aktuellen Werte, und zwar entweder wenn das Job-Netzwerk aktiviert wird oder wenn der Job gestartet wird. Derselbe Job kann somit für verschiedene Aktivierungen unterschiedliche JCL haben.

Dynamische JCL kann für Jobs mit der MACRO-Editier-Funktionalität in der Job-Verwaltung von Entire Operations definiert werden. Benutzen Sie die JCL-IMPORT-Funktion in der Job-Definition mit JCL-Speicherart `NAT` (Natural Source), um existierende JCL in das Entire Operations-MACRO-Sprachformat zu konvertieren.

In allen Fällen muss zum Generieren der endgültigen JCL die Macro-Editor-Funktion benutzt werden. Zum Testen der generierten JCL kann die Test-Editor-Funktion benutzt werden.

Folgende Themen werden behandelt:

- Spezielle Editor-Funktionen für Macro-Source-Objekte

- Fluchtzeichen in Natural-Source-Zeilen

- Parameterliste

- Verwendung von Variablen in dynamisch generierter JCL

- Textobjekte in die JCL einfügen

- Eingefügte Textobjekte mit Parametern aufrufen

- Verschachtelte (rekursive) #EOR-INCL-Statements verwenden

- Parameter innerhalb des Textobjekts ersetzen

- Beispiele für #EOR-Statements

### Spezielle Editor-Funktionen für Macro-Source-Objekte

`MACRO` | Kompiliert die Macro-JCL in ein ausführbares Natural-Objekt. Dieses Objekt wird von Entire Operations beim Laden der JCL ausgeführt, und es generiert die ausführbare aktive JCL. (Dieses Kommando wirkt ähnlich wie das Natural-Systemkommando `STOW` für Natural-Standardprogramme.) Anmerkung Das Kommando kann im Batch-Modus ausgeführt werden, zum Beispiel für ganze Netzwerke. Siehe MACRO-Kommando-Massenverarbeitung im Batch-Modus im Kapitel Entire Operations Utilities.
`TEST` | Generiert JCL zu Testzwecken. Die generierte JCL wird in einem neuen Fenster angezeigt. Anmerkungen: Die Macro Source wird bei Ausführung des Kommandos `TEST` nicht gespeichert, Das generierte Objekt wird bei Ausführung des Kommandos `TEST` nicht mit dem Systemkommando `STOW` kompiliert. Weil an dem Original-Macro und dem vorhandenen generierten Objekt keine Änderungen vorgenommen werden, kann das `TEST`-Kommando auch von Benutzern ausgeführt werden, die nur Lesezugriff auf die Macro Source haben.

> Laufnummer für die Test-Funktion

>   Die beim `TEST`-Kommando reservierte Laufnummer ist -3. Beim Test wird eine vorübergehend aktive Symboltabelle mit dieser Laufnummer verwendet. Dadurch wird eine Beeinträchtigung der definierten Master-Symboltabelle verhindert. In der Log-Anzeige wird diese reservierte Laufnummer nicht angezeigt.

### Fluchtzeichen in Natural-Source-Zeilen

Natural-Source-Zeilen muss das Aktivierungsfluchtzeichen des Jobs vorangestellt sein (siehe Fluchtzeichen zur Symbolersetzung im Kapitel Symboltabellen und Symbole).

Das Aktivierungsfluchtzeichen am Anfang einer Zeile unterscheidet die Zeile als ein Natural-Statement von der JCL. Durch die Verwendung von Natural-Statements steht die volle Natural-Funktionalität - einschließlich des Zugriffs auf Adabas und Entire System Server - in der dynamischen JCL zur Verfügung. Sie brauchen daher keine speziellen Steueranweisungen zu lernen. Alle Natural-Statements, die in der dynamischen JCL benutzt werden, müssen im Natural Structured Mode codiert werden.

Variablen sind benutzerdefiniert. Sie können in jedem beliebigen Teil der JCL verwendet werden. Zur Unterscheidung müssen Variablen in der JCL durch ein vorangestelltes Fluchtzeichen gekennzeichnet werden:

- Das Aktivierungsfluchtzeichen kennzeichnet Variablen, die bei der Aktivierung zu ersetzen sind.

- Das Jobstartfluchtzeichen kennzeichnet Variablen, die beim Job-Start zu ersetzen sind.

Anmerkung
Diese Fluchtzeichen können vom Systemadministrator geändert werden. Eine solche Änderung sollte jedoch nur dann vorgenommen werden, wenn sie absolut notwendig ist, z.B. bei Ländern mit einem speziellen Zeichensatz. Siehe Abschnitt Fluchtzeichen zur Symbolersetzung. Zweckmäßigerweise verwendet man keine Fluchtzeichen, die in einem bestimmten Betriebssystem schon eine definierte Bedeutung haben, oder die schon als Fluchtzeichen belegt sind, z. B. das Dollarzeichen ($) in BS2000 oder UNIX.

### Parameterliste

Jede JCL für einen Job vom Typ MAC muss mit der Deklarierung der Parameterliste des allgemeinen User Exit anfangen: NOPXPL_A.

Der Parameter `P-CALL-PLACE` enthält `MAC`:

    § DEFINE DATA PARAMETER USING NOPXPL-A

Das erste Zeichen (hier: `§`) ist das Aktivierungsfluchtzeichen des Jobs.

### Verwendung von Variablen in dynamisch generierter JCL

Sie können die folgenden Variablentypen benutzen:

- eine Variable aus der Symboltabelle, die für den Job angegeben ist,

- eine Variable aus dem Parameterliste (P-...),

- eine in diesem Natural-Programm definierte, lokale Variable, die in Ihrem Programm errechnet werden kann (`L-...`),

- eine Natural-Systemvariable (`TIME`, `DATE` usw.), die durch einen vorangestellten Stern (*) als solche gekennzeichnet ist, z.B. `*TIME` und `*DATE`,

- Die Variablen `*TIMN`, `*TIMN6`, `*TIMA6`, `*TIMA7` werden so behandelt, wie unter Tabelle vordefinierter Symbole im Kapitel Symboltabellen und Symbole beschrieben.

Anmerkung
Alle Variablen, die nicht mit einem der Präfixe `P-`, `L-` oder `*` beginnen, werden in der Symboltabelle gesucht. Symbolersetzung allein, d. h. ohne Einbettung von Natural-Statements, ist auch bei Standard-JCLs verfügbar (Jobs des Typs `JOB`). Siehe Symbolersetzung im Kapitel Symboltabellen und Symbole.

Dieser Abschnitt behandelt folgende Themen:

- Beispiel-JCL
- #GET-SYMBOL
- #SET-SYMBOL
- #SET-SYMBOL-M
- Allgemeine Anmerkungen zu #GET-SYMBOL, #SET-SYMBOL und #SET-SYMBOL-M
- Beispiele für die Verwendung von #GET-SYMBOL, #SET-SYMBOL und #SET-SYMBOL-M

#### Beispiel-JCL

Die folgende Beispiel-JCL veranschaulicht die Verwendung von Variablen in der dynamisch generierten JCL eines Jobs mit JCL-Speicherart `MAC` (Macro) in Entire Operations:

    § DEFINE DATA PARAMETER USING NOPXPL-A
    § LOCAL    /* ... ALL LOCALS SHOULD START WITH 'L-'
    § 1 L-01    (A30)
    § 1 CLASS   (A01)     /* FROM SYMBOL TABLE, FOR #GET-SYMBOL
    § END-DEFINE
    § * ------------------------------------
    #GET-SYMBOL CLASS
    § COMPRESS P-NETWORK P-JOB INTO L-01
    //SNNOPEX  JOB  ,§P-OWNER,MSGCLASS=§MSGCLASS,CLASS=§CLASS
    //STEP01   EXEC PGM=NOPCONTI,PARM='C=0004'
    //STEPLIB  DD   DISP=SHR,DSN=§STEPLIB
    //* DEVICE: §*DEVICE, INIT-USER: §*INIT-USER, TIME: §*TIME
    //* L-01  : §L-01
    § IF CLASS = 'K'      /* SYMBOL USED IN STATEMENT -> #GET-SYMBOL
    //* THE CLASS IS §CLASS
    § ELSE
    //* ANOTHER MSGCLASS FOUND
    § END-IF
    //*

Es wird angenommen, dass die in der JCL benutzten Variablen die folgenden aktuellen Werte haben:

- Variablen in der Symboltabelle

  Variable | Wert
  --- | ---
  `STEPLIB` | `NOP.SYSF.DEV.LOAD`
  `CLASS` | `K`
  `MSGCLASS` | `X`

- Natural-Systemvariablen

  Variable | Wert
  --- | ---
  `*DEVICE` | `BATCH`
  `*INIT-USER` | `EORMON`

- Variablen aus der Parameterliste

  Variable | Wert
  --- | ---
  `P-NETWORK` | `EX131A`
  `P-JOB` | `EX-1-24`
  `P-OWNER` | `SN`

Bei Aktivierung des Jobs ersetzt Entire Operations die Variablen durch ihre aktuellen Werte. Die folgende JCL wird als Ergebnis generiert:

    //SNNOPEX  JOB  ,SN,MSGCLASS=X,CLASS=K
    //STEP01   EXEC PGM=NOPCONTI,PARM='C0004'
    //STEPLIB  DD   DISP=SHR,DSN=NOP.SYSF.DEV.LOAD
    //* DEVICE: BATCH, INIT-USER: EORMON
    //* L-01  : EX131-A EX-1-24
    //* THE CLASS IS K
    //*

Siehe auch Abschnitt Job-Verwaltung.

#### #GET-SYMBOL

`#GET-SYMBOL` kann innerhalb einer Macro JCL verwendet werden, um einen aktiven Symbolwert in eine lokale Variable zu stellen.

Das Symbol wird von der Stelle im Symbol-Suchpfad genommen, an der es zuerst gefunden wurde.

Die Syntax lautet:

    #GET-SYMBOL variable [value]

value ist optional. Wird kein Wert angegeben, dann wird die Variable mit dem Inhalt eines Symbols desselben Namens gefüllt.

variable muss Format A (alphanumerisch) haben. Für die Formatwandlung von variable in ein numerisches Feld können Sie die Natural-Systemfunktion `VAL` verwenden.

    #GET-SYMBOL variable(index)

Mit dieser Syntax erhalten Sie eine Instanz eines Symbols mit mehreren Werten. Die Variable muss als ein lokales Array mit einer ausreichenden Array-Größe definiert werden.

Beispiel:

    #GET-SYMBOL L-SYMBOL(L-IND)

Siehe auch Beispiele für die Verwendung von #GET-SYMBOL, #SET-SYMBOL und #SET-SYMBOL-M.

#### #SET-SYMBOL

`#SET-SYMBOL` kann innerhalb einer Macro JCL verwendet werden, um ein aktives Symbol und dessen Wert aus einer lokalen Variablen oder Zeichenkette zu setzen.

Der Symbolname selbst kann aus mehreren Symbolen bestehen, auch teilweise und/oder verschachtelt.

Das Symbol wird in der aktiven Symboltabelle gesetzt, die zu dem aktiven Job gehört.

Ein Job für `#SET-SYMBOL` muss eine lokal definierte Symboltabelle haben.

Die Syntax lautet:

    #SET-SYMBOL symbol [value]

value ist optional und kann einen der folgenden Werte enthalten:

Wert | Bedeutung | Beispiel
--- | --- | ---
kein Wert | Setze Wert des Symbols `symbol` auf den Inhalt einer lokalen Variablen mit dem Namen `symbol`. |
    #SET-SYMBOL S1
`'text'` | Setze Wert des Symbols `symbol` auf `'text'`. `'text'` kann aus mehreren Symbolen bestehen, auch teilweise und/oder verschachtelt. |
    #SET-SYMBOL S2 'v002'
`variable` | Setze Wert des Symbols `symbol` auf den Inhalt der lokalen Variablen mit dem Namen `variable`. |
    #SET-SYMBOL S3 S30

Siehe auch Beispiele für die Verwendung von #GET-SYMBOL, #SET-SYMBOL und #SET-SYMBOL-M.

#### #SET-SYMBOL-M

`#SET-SYMBOL-M` kann innerhalb einer Macro JCL verwendet werden, um ein Master-Symbol und dessen Wert aus einer lokalen Variablen oder Zeichenkette zu setzen.

Das Symbol wird in der Master-Symboltabelle gesetzt, die zu dem aktiven Job gehört.

Ein Job für `#SET-SYMBOL-M` muss eine lokal definierte Symboltabelle haben.

Die Syntax lautet:

    #SET-SYMBOL-M symbol [value]

value ist optional und kann dieselben Werte enthalten wie bei `#SET-SYMBOL` beschrieben:

Siehe auch Beispiele für die Verwendung von #GET-SYMBOL, #SET-SYMBOL und #SET-SYMBOL-M.

#### Allgemeine Anmerkungen zu #GET-SYMBOL, #SET-SYMBOL und #SET-SYMBOL-M

- Die Funktionen werden beim Laden der JCL ausgeführt.Stellen Sie sicher, dass die erforderlichen aktiven Symbole zu diesem Zeitpunkt vorhanden sind.

- Bei der Verwendung von Symbolen innerhalb dieser Funktionen sollte ihnen das Aktivierungsfluchtzeichen des Jobs vorangestellt werden. Das Startfluchtzeichen kann ebenfalls verwendet werden. In diesen Funktionen wird es ebenfalls zur JCL-Ladezeit mitbehandelt.

- #SET-SYMBOL und #SET-SYMBOL-M
  Textzeichenketten dürfen Leerzeichen enthalten.

- Leerzeichen werden als Trennzeichen für die Parameter von `#GET-SYMBOL` und `#SET-SYMBOL` verwendet.

- Um ein Abschneiden zu vermeiden, sollten Sie darauf achten, dass das empfangende Symbol oder die empfangende Variable mindestens so lang ist wie das Ursprungssymbol oder die Ursprungsvariable.

#### Beispiele für die Verwendung von #GET-SYMBOL, #SET-SYMBOL und #SET-SYMBOL-M

Das in den folgenden Beispielen verwendete Aktivierungsfluchtzeichen ist das Paragrafzeichen `§`.

Statement | Bedeutung
--- | ---
`#GET-SYMBOL J` | Inhalt des Symbols `J` in die lokale Variable `J` verschieben.
`#GET-SYMBOL #J §BB` | Inhalt des Symbols `BB` in die lokale Variable `#J` verschieben.
`#GET-SYMBOL #J '§BB'` | Inhalt des Symbols `BB` in die lokale Variable `#J` verschieben.
`#GET-SYMBOL L-MULT '§?MV<M1,§I>'` | Das Ergebnis eines Symbolfunktionsaufrufs in die lokale Variable `L-MULT` verschieben.
`#SET-SYMBOL J` | Das aktive Symbol `J` auf den Inhalt der lokalen Variablen `J` setzen.
`#SET-SYMBOL I #A` | Das aktive Symbol `I` auf den Inhalt der lokalen Variablen `#A` setzen.
`#SET-SYMBOL AA 'text'` | Das aktive Symbol `AA` auf den Wert `text` setzen.
`#SET-SYMBOL BB §I` | Das aktive Symbol `BB` auf den Inhalt des Symbols `I` setzen.
`#SET-SYMBOL BB '§I'` | Das aktive Symbol `BB` auf den Inhalt des Symbols `I` setzen.
`#SET-SYMBOL CC '§D.§E'` | Die Symbolwerte von `D` und `E` verketten (ohne Punkt dazwischen) und das Ergebnis in das aktive Symbol `CC` setzen.
`#SET-SYMBOL CC '§D.xyz'` | Den Symbolwert von `D` und die Zeichenkette `'xyz'` verketten (ohne Punkt dazwischen), und das Ergebnis in das aktive Symbol `CC` stellen.
`#SET-SYMBOL CC '§D..§E'` | Die Symbolwerte von `D` und `E` (mit einem Punkt dazwischen) verketten, und das Ergebnis in das aktive Symbol `CC` stellen.
`#SET-SYMBOL D§E ‘text’` | Wenn das aktive Symbol `E` `'YY'` enthält: Das aktive Symbol `DYY` auf den Wert `text` stellen.
`#SET-SYMBOL-M DD 'value'` | Das Master-Symbol `DD` auf den Wert `value` stellen.
`#SET-SYMBOL-M TAGYYMMDD '&!D<T,YYMMDD>'` | Das Ergebnis der Symbol-Funktion `&!D<T,YYMMDD>` (z.B. `150211`) in das Master-Symbol `TAGYYMMDD` stellen.

### Textobjekte in die JCL einfügen

Natural-Textobjekte können Sie an beliebiger Stelle in Ihre JCL einfügen.

Diese Funktion ist nicht beschränkt auf Jobs mit Speicherart `MAC` (Macro), sondern kann auch innerhalb von Standard-JCL verwendet werden.

Die hier beschriebenen Meta-Kommandos werden aus der aktiven JCL und der gestarteten JCL abgegriffen.

Die Syntax lautet:

    #EOR-INCL LOC=NAT LIB=library MEM=text-object

#### Parameter des Statements #EOR-INCL

Parameter | Bedeutung
--- | ---
`LOC` | Speicherart ("Location"). `NAT` (Natural-Textobjekt) Dies ist die einzige Speicherart, die zur Zeit für Textmodule erlaubt ist.
`LIB` | Bibliothek des Textobjekts.
`MEM` | Name des Textobjekts.

Falls das Textobjekt nicht lesbar ist, wird die JCL-Generierung mit einer Fehlermeldung abgebrochen.

Innerhalb des `#EOR-INCL`-Statements ist Symbolersetzung möglich.

### Eingefügte Textobjekte mit Parametern aufrufen

Sie können eingefügte Textobjekte mit spezifischen Parametern aufrufen.

Für jeden Parameter, den Sie an den Text übergeben möchten, welcher durch ein `#EOR-INCL`-Statement eingefügt wird, müssen Sie vor dem `#EOR-INCL`-Statement eine `#EOR-PARM`-Zeile kodieren.

Diese Parameter sind dann nur für den eingefügten Text (und alle verschachtelten Einfügungen) im Folgenden `#EOR-INCL`-Statement gültig.

Die Syntax lautet wie folgt:

    #EOR-PARM parameter = value [parameter = value] ...

Mehrere Parameter können in einer `#EOR-PARM`-Zeile übergeben werden. Dies ist durch die Zeilengröße beschränkt.

Implizit haben Parameterwerte das Format A (alphanumerisch).

Parameterwerte können Leerzeichen enthalten. In diesem Fall müssen sie von Apostrophen (' ') oder Anführungszeichen (") eingeschlossen sein.

### Verschachtelte (rekursive) #EOR-INCL-Statements verwenden

Sie können verschachtelte `#EOR-INCL`-Statements innerhalb von Textobjekten verwenden, die bereits eingefügt sind. Diese geschachtelten Einfügungen können über ihre eigenen Parameterlisten verfügen.

Anmerkung
Achten Sie darauf, dass die Gesamtzahl der Einfügungen für eine JCL durch die Puffergröße des Natural-Editors für die ausführende Natural-Task beschränkt ist.

### Parameter innerhalb des Textobjekts ersetzen

Parameter für Textobjekte können innerhalb des eingefügten Textobjekts wie alle anderen Symbole verwendet werden. Sie haben den Vorrang vor den Symbolen der aktuellen Symboltabelle des Jobs (und der anderen Symboltabellen in der Suchhierarchie).

Deshalb können Parameter für eingefügte Textobjekte zeitweise Symbole desselben Namens außer Kraft setzen. Die Reichweite eines Parameters beschränkt sich nur auf das eingefügte Textobjekt und auf die Textobjekte, die innerhalb dieses Textobjekts durch geschachtelte Aufrufe aufgerufen werden.

Die "Lebensdauer" von mittels `#EOR-PARM` definierten Parametern bezieht sich nur auf die JCL-Ladezeit. Normale Symbolersetzungen können innerhalb eingefügter Textobjekte und ebenso an anderer Stelle in der JCL verwendet werden.

### Beispiele für #EOR-Statements

#### Beispiel 1:

    ...
    #EOR-INCL LOC=NAT LIB=JCLLIB MEM=§MEMBER
    ...

Natural-Member aus der Bibliothek JCLLIB einfügen, dessen Name im Symbol `MEMBER` steht.

#### Beispiel 2:

    ...
    #EOR-PARM DBID = 9
    #EOR-PARM TEXT-1 = "a string with blanks"
    #EOR-INCL LOC=NAT LIB=USERLIB MEMBER=BLOCK1
    //* JCL statement
    #EOR-PARM DBID = 10
    #EOR-PARM TEXT-1 = "another string"
    #EOR-INCL LOC=NAT LIB=USERLIB MEMBER=BLOCK1
    ...

Das Natural-Textobjekt `BLOCK1` aus der Bibliothek `USERLIB` einfügen. Die Parameter `DBID` und `TEXT-1` werden mit verschiedenen Werten für die zwei Aufrufe an das Textobjekt übergeben.

## Sperrung von Natural-Source-Objekten

Wenn beim Start von Natural der Profilparameter `SLOCK` auf `PRE` gesetzt ist, verhindert eine Sperre, dass mehrere Benutzer gleichzeitig ein Natural-Source-Objekt aus Entire Operations, einem Entire Operations GUI Client oder in einer nativen Natural-Umgebung bearbeiten.

Ist `SLOCK` auf `POST` oder `OFF` gesetzt, dann erfolgt keine Sperre, sondern der Entire Operations-Editor stellt fest, dass mehrere Benutzer ein Source-Objekt gleichzeitig bearbeiten.

Sie können mit dem Natural-Systemkommando `UNLOCK` gesperrte Natural-Source-Objekte prüfen und entsperren.

Ausführliche Informationen zu `SLOCK` und `UNLOCK` sind in der Natural-Dokumentation enthalten.

#### Zusätzliche Voraussetzungen für das Sperren von Source-Objekten

- In einer UNIX- oder Windows-Umgebung muss der Natural Development Server in der aktuellen Natural-FNAT-Systemdatei installiert sein.

- Wenn Sie in einer lokalen Entire Operations GUI Client-Umgebung eine gleichzeitige Bearbeitung durch mehrere Benutzer vermeiden möchten, müssen Sie zusätzlich zu Natural auch den Natural-RPC-Server mit `SLOCK=PRE` starten.

## Vermeidung von Ausnahmen bei der Editierung der JCL Speicherart (NAT, MAC)

Bei der Benutzung des Software AG Editors ist darauf zu achten, dass eine vierstellige Zahl, der eine öffnende, runde Klammer "`(`" vorangeht, ausschließlich zur Zeilennummerreferenzierung innerhalb eines Natural-Programms verwendet werden darf. Die Verwendung dieser Notation für einen anderen Zweck ist nicht gestattet.

| Warnung: Im Software AG Editor ist "`(####`" reserviert für Zeilennummern von Natural-Programmen. Von einer anderen Verwendung ist abzusehen.

### On this page

- Allgemeine Hinweise zum Editieren
- UNIX- und Windows: Behandlung von TAB-Zeichen (H'09') innerhalb von JCL-Zeilen
- Verwendung von Textobjekten innerhalb von JCL
- JCL ansehen
- Master JCL editieren
- Funktionen im Editor-Fenster
- Macro-Quellcode für dynamische JCL-Generierung editieren
- Sperrung von Natural-Source-Objekten
- Vermeidung von Ausnahmen bei der Editierung der JCL Speicherart (NAT, MAC)