Allgemeines
Grundsätzlich stehen zum kopieren von Datensätzen die Funktionen Record.COPY und Record.TRANSFERFIELDS zusätzlich zur einfachen Zuweisung („:=”) zur Verfügung. Hierbei gibt es einige entscheidende Unterschiede zu beachten: Während Record.TRANSFERFIELDS auch tabellenübergreifend funktioniert, können Record.COPY sowie die Zuweisung nur mit Record-Variablen genutzt werden, die auf dieselbe Tabelle verweisen. Bei letzteren beiden ist zu beachten, dass die Zuweisung nur die Referenz des Datensatzes übernimmt, während die Record.COPY-Funktion in Verbindung mit einer temporären Record-Variable eine eigenständige Kopie des Datensatzes erstellen kann.
Im Folgenden wollen wir die jeweiligen Funktionen einmal genauer vorstellen.
Record.COPY
Syntax
Record.COPY(FromRecord[, ShareTable]);
Parameter
„Record” bezeichnet die Record-Variable, die auf die neu angelegte Kopie verweisen soll, während „FromRecord” den zu kopierenden Datensatz bezeichnet. Der optionale Parameter „ShareTable” legt fest, ob der Datensatz kopiert („false”) oder nur die Referenz gesetzt werden soll („true”), wie es bei der Zuweisung der Fall ist. Hierfür müssen allerdings sowohl „Record” als auch „FromRecord” temporär sein. Der Standard-Wert ist hierbei „false”.
Hinweise zur Nutzung
Die COPY-Funktion kopiert einen Datensatz, weshalb Zieldatensatz und Ausgangsdatensatz auf derselben Tabelle liegen müssen. Diese Funktion bietet sich an, wenn z.B. mit dem gefilterten Datensatz einer Page gearbeitet werden soll, etwa via SETSELECTIONFILTER, ohne die Ansicht in der Page zu verändern. Hierfür würde man mittels der COPY-Funktion die Filter des aktuellen Datensatzes auf eine neue Record-Variable, die dieselbe Tabelle referenziert, übertragen und an dieser neuen Variable dann die gewünschten Bearbeitungen durchführen.
Beispiel
Für unser Beispiel zur Verwendung der COPY-Funktion nutzen wir diese im Zusammenspiel mit SETSELECTIONFILTER, um auf der Verkaufsrechnungen-Seite mehrere Datensätze gleichzeitig frei zu geben. Hierzu legen wir auf der Seite „Verkaufsrechnungen” eine neue Aktion „Markierte Belege freigeben” an, der wir eine lokale Record-Variable für den Verkaufskopf sowie eine Codeunit-Variable für „Release Sales Document” mitgeben:
Name | Typ | Subtyp |
---|---|---|
SalesHeader | Record | Sales Header |
ReleaseSalesDoc | Codeunit | Release Sales Document |
In den „OnAction”-Trigger der Funktion schreiben wir folgenden Code:
SalesHeader.COPY(Rec); CurrPage.SETSELECTIONFILTER(SalesHeader); SalesHeader.FINDFIRST; REPEAT ReleaseSalesDoc.PerfomManualRelease(SalesHeader); Until SalesHeader.NEXT = 0;
Record.TRANSFERFIELDS
Syntax
Record.TRANSFERFIELDS(FromRecord[, InitPrimaryKeyFields]);
Parameter
„Record” bezeichnet den Datensatz, in den die Werte kopiert werden sollen, während „FromRecord” den Datensatz bezeichnet, dessen Werte kopiert werden sollen. Der optionale Parameter „InitPrimariyKeyFields” ist ein boolean-Wert, der angibt, ob die Werte des Primärschlüssels im Zieldatensatz ebenfalls mit denen des Ausgangsdatensatzes überschrieben werden sollen. Der Standardwert dieses Parameters ist „true”.
Hinweise zur Nutzung
Die TRANSFERFIELDS-Funktion überträgt die Werte eines Datensatzes in einen anderen. Hierbei können Ziel- und Ausgangsdatensatz auf unterschiedlichen Tabellen liegen, wobei die IDs und Datentypen der jeweiligen Felder übereinstimmen müssen. Bei der Nutzung der TRANSFERFIELDS-Funktion ist deshalb darauf zu achten, dass keine Überschneidungen von Feld-IDs mit unterschiedlichen Datentypen oder Inhalten vorliegen. Bei unterschiedlichen Datentypen würde bei der Ausführung des Befehls eine Fehlermeldung erzeugt werden, dass eine Konvertierung der Daten nicht möglich ist. Bei unterschiedlichem Inhalt würden Daten in Felder geschrieben werden, die nicht zusammenhängen, wenn beispielsweise in der Ausgangstabelle das Feld „Name” mit dem Datentyp Text[100] die ID 5 hat, in der Zieltabelle das Feld mit der ID 5 aber „Adresse” heißt, dessen Datentyp ebenfalls Text[100] ist, würde bei einem TRANSFERFIELDS-Aufruf der Wert „Name” der Ausgangstabelle in das Feld „Adresse” der Zieltabelle eingetragen werden.
Ein mögliches Beispiel für die Verwendung von TRANSFERFIELDS ist hier zu finden.