COPY-ELEMENT kopiert Elemente und Bibliotheken im Verhältnis eins zu eins. Die kopierten Elemente können neue Elementbezeichnungen erhalten. Der Basistyp für Quell- und Zielelement darf unterschiedlich sein, wenn Textelemente kopiert werden.
Es gibt folgende Kopiermöglichkeiten:
Kopieren von einem oder mehreren Elementen in die gleiche Bibliothek
Kopieren von einem oder mehreren Elementen in eine andere Bibliothek
Kopieren einer kompletten Bibliothek (siehe Beispiel "COPY-ELEMENT Elemente kopieren")
Die kopierten Elemente können entweder als Voll-Element oder als Delta-Element gespeichert werden. Falls beim Kopieren von Delta-Elementen die Eingabebibliothek mit der Ausgabebibliothek identisch ist, müssen die kopierten Delta-Elemente neue Elementnamen erhalten. Blätter von Delta-Bäumen dürfen überschrieben werden.
Das Quellelement kann mit DELETE-SOURCE = *YES nach dem Kopieren gelöscht werden. Damit kann ein Element verschoben werden.
Strukturerhaltendes Kopieren (STORAGE-FORM = *BY-SOURCE)
LMS erkennt bei diesem Format die Form der Elementabspeicherung in den PLAM-Bibiliotheken. Dementsprechend werden Delta-Bäume als Delta-Bäume und alle andere Elemente als Vollelemente in die Ausgabedatei kopiert.
Hinweise
Wird der Kopiervorgang vorzeitig abgebrochen, bleibt der schon kopierte Teil eines Del-ta-Baumes erhalten.
VERSION, BASE und alle Datumsoperanden müssen auf ihren Default-Wert gesetzt sein. Es wird immer der komplette Namensraum, d.h. wie Version=*, kopiert.
Die Angabe von Bibliothekslisten führt auf Fehler.
Beispiel
In der Bibliothek sind die Elemente A/1 und A/2 enthalten. Dann wird durch die Anweisung „Kopiere Element A nach B“ bei Angabe von STORAGE-FORM=*STD das Element B/2 erzeugt und bei Angabe von STORAGE-FORM=*BY-SOURCE die Elemente B/1 und B/2.
Überschreiben des Zielnamensraumes (WRITE-MODE=*SUBSTITUTE)
Mit WRITE-MODE=*SUBSTITUTE kann erreicht werden, dass das kopierte Element in der Zielbibliothek das einzige Element mit gleichem Typ und Namen ist. LMS löscht vor dem Kopieren in der Zielbibliothek alle Elemente mit dem Typ und dem Namen des Zielelementes. D.h. alle Benutzerangaben bei TO-ELEMENT (wie z.B. VERSION = *INCREMENT) wirken erst auf den leeren Zielnamensraum. Bei *INCREMENT wird z.B. immer die Defaultversion erzeugt.
Einschränkungen
Der Operand STORAGE-FORM= darf nicht den Wert *BY-SOURCE haben.
Eingabe- und Ausgabebibliothek müssen unterschiedlich sein.
Tritt während des Löschens des Zielnamensraumes ein Fehler auf (z.B. Element schreibgeschützt), so wird die COPY-ELEMENT-Anweisung abgebrochen.
COPY-ELEMENT | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
ELEMENT = *LIBRARY-ELEMENT (...)
Angaben für die gewünschte Elementbezeichnung.
LIBRARY = *STD / <filename 1..54 without-vers> / *LINK(...)
Angabe der Bibliothek, in der sich die zu kopierenden Elemente befinden.
LIBRARY = *STD
Die durch OPEN-LIBRARY eröffnete Bibliothek.
LIBRARY = <filename 1..54 without-vers>
Name der Bibliothek, aus der die Elemente kopiert werden sollen.
LIBRARY = *LINK(...)
Die über den Dateikettungsnamen zugewiesene Bibliothek.
LINK-NAME = <structured-name 1..8>
Dateikettungsname der Bibliothek, der vor dem Aufruf von LMS mit einem /ADD-FILE-LINK-Kommando vereinbart wurde.
ELEMENT = *ALL (...) / <composed-name 1..64 with-under with-wild(132)>(...)
Name des Elementes, das kopiert werden soll.
VERSION = *HIGHEST-EXISTING / *ALL / *UPPER-LIMIT / <composed-name 1..24 with-under with-wild(52)>
Version, die das zu kopierende Element besitzt.
VERSION = *HIGHEST-EXISTING
Das Element mit der höchsten bestehenden Version bzgl. BASE wird kopiert.
VERSION = *UPPER-LIMIT
Die in der Bibliothek unter dem angegebenen TYPE und Namen höchstmögliche Version X’FF’ wird kopiert.
VERSION = <composed-name 1..24 with-under with-wild(52)>
Der hier angegebene Text wird als Versionsbezeichnung interpretiert.
BASE = *STD / <composed-name 1..24 with-under with-wild>
Präfix für die Versionsauswahl. Im Zusammenhang mit VERSION=*HIGHEST-EXISTING kann damit die höchste Version mit einem bestimmten Präfix angesprochen werden. BASE=*STD wirkt wie BASE=*.
TYPE = *LMS-DEFAULT / *ALL / <alphanum-name 1..8 with-wild(20)>
Typ, den das zu kopierende Element besitzt.
USER-DATE = *ANY / *TODAY / <date 8..10 with-compl> / *INTERVAL(...)
Datum, das vom Benutzer vergeben wurde.
USER-DATE = *ANY
Das zu kopierende Element besitzt ein beliebiges Datum.
USER-DATE = *TODAY
Das Element mit dem aktuellen Tagesdatum wird kopiert.
USER-DATE = <date 8..10 with-compl>
Das Element, dessen Datum explizit in der Form [JJ]JJ-MM-TT eingegeben wird, wird kopiert.
USER-DATE = *INTERVAL(...)
Alle Elemente, die in dem angegebenen Zeitraum liegen, werden kopiert.
FROM = 1900-01-01 / <date 8..10 with-compl>
Beginn des Zeitraums.
TO = *TODAY / <date 8..10 with-compl >
Ende des Zeitraums.
CREATION-DATE = *ANY / *TODAY / <date 8..10 with-compl> / *INTERVAL(...)
Erzeugungsdatum des Elementes. Beschreibung der Operanden siehe Operand USER-DATE dieses Kommandos.
MODIFICATION-DATE = *ANY / *TODAY / <date 8..10 with-compl> / *INTERVAL(...)
Datum der letzten Änderung für das Element. Beschreibung der Operanden siehe Operand USER-DATE dieses Kommandos.
EXCEPT-ELEMENT = *NONE / *ELEMENT(...)
Angabe der Elemente, die von der oben getroffenen Auswahl ausgeschlossen werden.
EXCEPT-ELEMENT = *NONE
Es wird kein Element vom Kopieren ausgeschlossen.
EXCEPT-ELEMENT = *ELEMENT(...)
Angabe der Elemente, die vom Kopieren ausgeschlossen sind. Ein Element wird ausgeschlossen, wenn alle Felder der EXCEPT-ELEMENT-Struktur, die nicht auf *ANY gesetzt sind, das Element als Treffer ausweisen. Sind alle Felder der EXCEPT-ELEMENT-Struktur auf *ANY gesetzt, so werden alle Elemente ausgeschlossen.
Zur Beschreibung der Operanden siehe Operand *LIBRARY-ELEMENT dieser Anweisung.
TO-ELEMENT = *LIBRARY-ELEMENT(...)
Angabe, wohin und unter welchem Namen das Element aufgenommen werden soll.
LIBRARY = *STD / *BY-SOURCE / <filename 1..54 without-vers> / *LINK(...)
Angabe des neuen Bibliotheksnamens oder Bibliothek, in die das Element aufgenommen werden soll.
LIBRARY = *STD
Die durch OPEN-LIBRARY eröffnete Bibliothek.
LIBRARY = *BY-SOURCE
Das Element wird in die Bibliothek kopiert, in der sich auch das zu kopierende Element befindet.
LIBRARY = <filename 1..54 without-vers>
Name der Bibliothek, in die die Datei als Element aufgenommen werden soll. Existiert die Bibliothek noch nicht, wird sie neu eingerichtet.
LIBRARY = *LINK(...)
Die über den Dateikettungsnamen zugewiesene Bibliothek.
LINK-NAME = <structured-name 1..8>
Dateikettungsname der Bibliothek, der vor dem Aufruf von LMS mit einem /ADD-FILE-LINK-Kommando vereinbart wurde.
ELEMENT = *BY-SOURCE(...) /
<composed-name 1..132 with-under with-wild-constr>(...)
Name, den das neu aufzunehmende Element erhalten soll.
ELEMENT = *BY-SOURCE(...)
Der neue Name entspricht dem alten Namen.
VERSION = *LMS-DEFAULT / *BY-SOURCE / *HIGHEST-EXISTING /
*INCREMENT / *UPPER-LIMIT /
<composed-name 1..52 with-under with-wild-constr>
Version, die das neu aufzunehmende Element erhalten soll.
VERSION = *BY-SOURCE
Das neue Element erhält die gleiche Version wie das ursprüngliche Element. Hat das ursprüngliche Element keine Versionsangabe, erhält das neue Element X’FF’ als Versionsangabe.
VERSION = *HIGHEST-EXISTING
Abhängig von der unter dem Typ geltenden Konvention wird unter existierenden Elementen gleichen Typs und Namens die höchste zu BASE passende Version überschrieben, ansonsten wird eine Defaultversion erzeugt.
VERSION = *INCREMENT
Abhängig von der unter dem Typ geltenden Konvention wird unter existierenden Elementen gleichen Typs und Namens eine neue, höhere Version erzeugt, ansonsten eine Defaultversion (siehe auch Abschnitt „Versionskonventionen“ "Versionskonventionen").
VERSION = *UPPER-LIMIT
Die höchstmögliche Version X’FF’ wird erzeugt.
VERSION = <composed-name 1..52 with-under with-wild-constr>
Das Zielelement erhält die hier angegebene Version.
BASE = *STD / <composed-name 1..24 with-under with-wild>
Legt die Basis für das Zielelement fest. Näheres zur Angabe der Basis siehe "Versionsbezeichnungen".
ELEMENT = <composed-name 1..132 with-under with-wild-constr>(...)
Name des neu aufzunehmenden Elementes. Er kann auch mit Wildcards eingegeben werden.
VERSION = *LMS-DEFAULT / *BY-SOURCE / *HIGHEST-EXISTING /
*INCREMENT / *UPPER-LIMIT /
<composed-name 1..52 with-under with-wild-constr>
Version, die das neu aufzunehmende Element erhalten soll.
Beschreibung der Operanden siehe oben.
BASE = *STD / <composed-name 1..24 with-under with-wild>
Präfix für die Versionsauswahl. Im Zusammenhang mit VERSION=*HIGHEST-EXISTING kann damit die höchste Version mit einem bestimmten Präfix angesprochen werden. BASE=*STD wirkt wie BASE=*. Näheres zur Angabe der Basis siehe "Versionsbezeichnungen".
TYPE = *BY-SOURCE / *LMS-DEFAULT / <alphanum-name 1..20 with-wild-constr>Typ, den das neu aufzunehmende Element erhalten soll.
TYPE = *BY-SOURCE
Das neue Element erhält die gleiche Typbezeichnung wie das ursprüngliche Element.
USER-DATE = *BY-SOURCE / *TODAY / <date 8..10 with-compl>
Datum, das vom Benutzer vergeben wird.
USER-DATE = *BY-SOURCE
Das neue Element erhält das gleiche Datum wie das ursprüngliche Element.
USER-DATE = *TODAY
Das aktuelle Tagesdatum wird vergeben.
USER-DATE = <date 8..10 with-compl>
Das Datum muss in der Form [JJ]JJ-MM-TT eingegeben werden.
STORAGE-FORM= *LMS-DEFAULT / *BY-SOURCE / *STD / *FULL / *DELTA
Speicherform für das anzulegende Element. Die Speicherform darf den Einstellungen durch MODIFY-TYPE-ATTRIBUTES bzw. MODIFY-LIBRARY-ATTRIBUTES nicht widersprechen und alle Elemente eines Typs und Namens müssen die gleiche Speicherform haben.
STORAGE-FORM = *BY-SOURCE
VERSION, BASE und alle Datumsoperanden müssen auf ihren Standardwert gesetzt sein. Es wird immer der komplette Namensraum, d.h. wie Version=*, kopiert.
Das neu aufzunehmende Element wird strukturerhaltend kopiert, d.h. Delta-Bäume werden als solche wieder abgelegt und Vollelemente werden als Vollelemente übernommen. Werden Delta-Bäume strukturerhaltend kopiert, darf der Zielname im Zieltyp nicht existieren (d.h. WRITE-MODE wirkt nicht).
STORAGE-FORM = *STD
Das Element wird gemäß der für den Elementscope geforderten Speicherform angelegt. Widersprüchliche Anforderungen führen auf Fehler. Ist nichts besonderes gefordert, wird Vollspeicherung gewählt.
STORAGE-FORM = *FULL
Das neue Element wird als Voll-Element angelegt (Fehler, falls nicht zulässig).
STORAGE-FORM = *DELTA
Das neue Element wird als Delta-Element angelegt (Fehler, falls nicht zulässig). Zulässige Elementtypen: S, P, D, J, M, X bzw. davon abgeleitete Elementtypen.
PROTECTION = *LMS-DEFAULT / *STD / *BY-SOURCE
Elementschutz für das kopierte Element.
PROTECTION = *STD
Existiert das Element bereits, so bleibt der Elementschutz unverändert. Existiert das Element noch nicht und ist für die Bibliothek bzw. den Typ des Elementes ein initialer Elementschutz festgelegt, so erhält das kopierte Element diesen Schutz.
PROTECTION = *BY-SOURCE
Das kopierte Element erhält den selben Schutz wie das ursprüngliche Element.
DELETE-SOURCE = *NO / *YES
Hier kann der Benutzer bestimmen, ob das ursprüngliche Element erhalten bleiben oder gelöscht werden soll.
DELETE-SOURCE = *NO
Das ursprüngliche Element wird nicht gelöscht.
DELETE-SOURCE = *YES
Das ursprüngliche Element wird gelöscht.
WRITE-MODE = *LMS-DEFAULT / *CREATE / *REPLACE / *EXTEND / *SUBSTITUTE / *ANY
Überschreiben eines Elementes gleichen Namens. Existiert das Element nicht unter diesem Namen, wird es neu angelegt.
Ist das zu speichernde Element ein Delta-Element, ist darauf zu achten, dass das Element ein Blatt des Delta-Baumes sein muss. Nur Blätter eines Delta-Baumes dürfen überschrieben werden.
WRITE-MODE = *CREATE
Das Zielelement darf noch nicht existieren und wird neu erzeugt.
WRITE-MODE = *REPLACE
Das Zielelement muss bereits existieren und wird dann ersetzt.
WRITE-MODE = *EXTEND
Das Zielelement wird erweitert, wenn es bereits existiert. Ansonsten wird es neu angelegt. *EXTEND ist nicht für Delta-Elemente erlaubt.
WRITE-MODE = *SUBSTITUTE
Alle Elemente mit Typ und Namen des Zielelementes werden in der Zielbibliothek gelöscht. Danach wird das Quellelement kopiert.
WRITE-MODE = *ANY
Das Zielelement wird ersetzt, wenn es bereits existiert. Ansonsten wird es neu angelegt.
DIALOG-CONTROL = *LMS-DEFAULT / *NO / *YES / *ERROR
Dieser Operand legt fest, ob während der Ausführung einer Anweisung ein Dialog mit dem Benutzer geführt werden soll oder nicht.
Nähere Erläuterungen zur Dialogführung unter MODIFY-LMS-DEFAULTS.
Anweisungs-Returncode
(SC2) | SC1 | Maincode | Bedeutung |
0 | CMD0001 | Ohne Fehler | |
2 | 0 | LMS0129 | Anweisung abgebrochen durch Benutzer |
1 | CMD0230 | Syntaxfehler | |
32 | LMS1002 | Interner Fehler | |
64 | LMS0020 | Ziel-Element oder Ziel-Datei nicht vorhanden | |
64 | LMS0213 | Name existiert als Delta-Element | |
64 | LMS0214 | Name existiert als Voll-Element | |
64 | LMS0302 | Element nicht gefunden | |
64 | LMS0509 | Ziel-Element oder Ziel-Datei schon vorhanden | |
64 | LMS0510 | Basis nicht gefunden | |
64 | LMS1003 | Fehler während Mengenverarbeitung (Wildcard) bei mindestens einem Element oder einer Datei | |
64 | LMS1004 | Sonstige Fehler | |
64 | PLA0223 | Nur Blätter eines Delta-Baumes überschreibbar | |
64 | PLA0224 | Speicherform nicht erlaubt | |
64 | PLA0229 | Kein Zugriffsrecht für das Element | |
64 | PLA0233 | Ausleihstatus verhindert Elementzugriff | |
64 | PLA0475 | Funktion verletzt Versionsautomatismus | |
64 | PLA0476 | Version passt nicht zur geltenden Konvention | |
64 | PLA0478 | Versionsüberlauf bei Erhöhung | |
130 | LMS0041 | Systemadressraum erschöpft | |
130 | LMS0411 | Bibliothek gesperrt | |
130 | LMS0412 | Element gesperrt | |
130 | LMS0413 | Typ gesperrt |
Notwendige Zugriffsrechte
Bei LIBRARY-ELEMENT: Leserecht für LIBRARY und ELEMENT
Sind von der Anweisung mehrere Elemente betroffen, so werden Elemente ohne Leserecht von der Anweisung ausgenommen.
Beim Kopieren von Deltas mit STORAGE-FORM=*BY-SOURCE wird der Delta-Baum nur kopiert, wenn für alle seine Elemente Leserecht besteht.
Bei TO-ELEMENT: Lese- und Schreibrecht für LIBRARY
Administrationsrecht, sofern die angegebene Elementbezeichnung neu ist. Ansonsten nur Schreibrecht für das unter der angegebenen Elementbezeichnung existierende Element (kein Administrationsrecht mehr erforderlich).
Bei STORAGE-FORM=*DELTA muss für das durch BASE bestimmte Element Leserecht gegeben sein.
Bei aktivem WRITE-CONTROL muss die USERID des Benutzers bei dem durch BASE bestimmten Element als HOLDER eingetragen sein, sofern eine Basisversion existiert. Es kann nur eine neue Version erzeugt oder diese Basisversion überschrieben werden, sofern Schreibrecht gegeben ist. Administrationsrecht ist in diesem Falle nicht mehr erforderlich.
Bei PROTECTION=*BY-SOURCE kann nur der Eigentümer der Bibliotheksdatei diese Funktionalität nutzen.
Hinweise
Beim Anlegen eines Elements ist die unter dem Typ geltende Konvention zu beachten. Insbesondere dann, wenn der Zieltyp die Konvention STD-TREE hat, können Probleme auftreten, wenn auf der Quellseite Nebenzweigversionen existieren, deren zugehörige Hauptzweigversion gelöscht ist. In diesem Fall können die betreffenden Nebenzweige nicht kopiert werden; es erfolgt jedoch eine Fehlermeldung von LMS.
Ausnahme: Das Kopieren eines kompletten Delta-Baumes mit STORAGE-FORM=*BY-SOURCE ist immer möglich.
STATE und HOLDER des Quellelements werden nicht auf das Zielelement übernommen, auch nicht bei PROTECTION=*BY-SOURCE.
Bei aktivem WRITE-CONTROL in der Ausgabebibliothek wird dem zu schreibenden Element von der Zugriffsmethode ein Kommentarsatz (Satzart 2) zugefügt, der HOLDER, DATE und TIME des Vorganges protokolliert. Der Satz wird als erster Satz der Satzart geschrieben. Bereits vorhandene Kommentarsätze werden dahinter kopiert. Wird das Element überdies zur Basis einer anderen Version geschrieben (also nicht erste Version unter einem Namen), so werden die Elementattribute STATE, HOLDER und alle Rechte von der Basisversion auf die neue Version übernommen. Die CCSN wird von dem Quellelement übernommen. Das USER-DATE wird neu bestimmt.
Beispiele mit WRITE-MODE=*SUBSTITUTE
In der Eingabebibliothek X ist unter dem Typ S das Element A/1 enthalten. In der Ausgabebibliothek Y ist unter Typ S das Element A/2 enthalten.
//COPY-ELEM ELEMENT= *LIB(LIB=X,ELEM=A,TYPE=S),-
TO ELEMENT= *LIB(LIB=Y),WRITE-MODE=*SUBSTITUTE
Nach dieser Anweisung ist in der Ausgabebibliothek unter Typ S und Namen A nur das Element A/1 vorhanden. Das Element A/2 wurde gelöscht.
In der Eingabebibliothek X befinden sich alle Elemente einer Produktversion. Diese Elemente sollen in eine existierende Ausgabebibliothek Y so kopiert werden, dass Y nach dem Kopieren nur die kopierte Produktversion enthält und sonst keine andere Version. Das erreicht man mit folgender Anweisung.
//COPY-ELEM ELEMENT= *LIB(LIB=X,ELEM=*,TYPE=*),-
TO ELEMENT= *LIB(LIB=Y),WRITE-MODE=*SUBSTITUTE
Beispiel für das Kopieren einer kompletten Bibliothek
Die Bibliothek lib1 wird komplett kopiert und erhält den Namen lib2. Durch die Angabe von ’*’ bei Element und Typ ist keine Kenntnis über die enthaltenen Elemente erforderlich, d.h. alle Elemente werden im Verhältnis eins zu eins in die Bibliothek lib2 kopiert.
/START-LMS //OPEN-LIBRARY LIB1 //SHOW-ELEMENT-ATTRIBUTES INPUT LIBRARY= :1OSQ:$USER.LIB1 TYP NAME VER (VAR#) DATE NAME VER (VAR#) DATE (D) LETTER.A @ (0001) 2011-04-12 TESTELEM @ (0001) 2011-04-12 2 (D)-ELEMENT(S) IN THIS TABLE OF CONTENTS TYP NAME VER (VAR#) DATE (S) TEST3 @ (0001) 2011-04-12 1 (S)-ELEMENT(S) IN THIS TABLE OF CONTENTS -------------------------------------------------------------------------- 3 ELEMENT(S) IN THIS TABLE OF CONTENTS //COPY-ELEMENT (,ELEM=*,TYPE=*),TO-ELEM=*LIB(LIBRARY=LIB2) //SHOW-LIBRARY-STATUS STATUS FILENAME MODE LINK DEF-TYPE OPEN :1OSQ:$USER.LIB2 OPEN :1OSQ:$USER.LIB1 READ //SHOW-ELEMENT-ATTRIBUTES *LIB(LIBRARY=LIB2) INPUT LIBRARY= :N:$USER.LIB2 TYP NAME VER (VAR#) DATE NAME VER (VAR#) DATE (D) LETTER.A @ (0001) 2011-04-12 TESTELEM @ (0001) 2011-04-12 2 (D)-ELEMENT(S) IN THIS TABLE OF CONTENTS TYP NAME VER (VAR#) DATE (S) TEST3 @ (0001) 2011-04-12 1 (S)-ELEMENT(S) IN THIS TABLE OF CONTENTS -------------------------------------------------------------------------- 3 ELEMENT(S) IN THIS TABLE OF CONTENTS //END