RENAME

Die Funktion RENAME gibt einem Datensatz (Record) neue Primärschlüsselwerte (Value1, Value2, etc.) und benennt ihn somit um.

Parameter

Record ist der Datensatz, dessen Primärschlüssel umbenannt wird.

Value1, Value2, … sind dagegen die neuen Primärschlüsselwerte.

Rückgabewert

Wurde der oder wurden die Primärschlüsselwerte erfolgreich geändert, liefert die Funktion TRUE zurück. Andernfalls wird FALSE zurückgeliefert, wenn der Datensatz nicht existiert oder die Rechte nicht ausreichen den Datensatz umzubenennen.

Zugriffsrechte

Das „Bearbeiten-Zugriffsrecht“ ist für die RENAME-Funktion erforderlich. Im Blog-Beitrag Benutzergruppen und Benutzergruppen-Berechtigungssätze Extern sind weitere Informationen zum Thema Zugriffsrechte in Dynamics NAV zu finden.

Hinweise

Es können keine Datensätze umbenannt werden, welche Optionswerte als Teil ihres Primärschlüssels nutzen.

Ändert ein Benutzer einen Datensatz, während ein anderer Benutzer oder ein anderer Prozess den Datensatz liest und ändert, muss der zweite Benutzer den Wert der Datensatzvariablen aktualisieren, bevor er den Datensatz bearbeiten kann. Andernfalls erhält der Benutzer einen Laufzeitfehler.

In früheren Versionen von Microsoft Dynamics NAV wurde Code zur Änderung von Datensätzen zugelassen, nachdem eine neuere Version des Datensatzes an die Datenbank übermittelt wurde. Dies würden die neueren Änderungen überschreiben. Seit Microsoft Dynamics NAV 2016 wurden jedoch die MODIFY-, die RENAME- und die DELETE-Funktion so eingeschränkt, dass der Benutzer in solchen Situationen einen Laufzeitfehler erhält.

Daher müssen Anwendungen so gestaltet werden, dass die aktuellsten Versionen des Datensatzes verwendet wird, bevor sie der Datenbank überliefert werden kann. Um eine aktuelle Version eines Datensatzes zu erhalten, kann die GET-Funktion genutzt werden. Das zweite Beispiel veranschaulicht diese Situation.

Sobald ein Datensatz umbenannt wurde, wird die Änderung der Datenbank übermittelt, ohne den OnModify-Trigger auszulösen, denn das Umbenennen eines Datensatzes ändert den Primärschlüssel und aktualisiert den Primärschlüsselwert in allen zugehörigen Tabellen. Daher sollte der Funktionsgebrauch von RENAME und MODIFY separat geschehen.

Beispiel 1

Zunächst werden zwei neue Variable hinterlegt.

Name Datentyp Subtyp
Contact Record Contact

Anschließend wird folgender C/AL-Code eingefügt.

Contact.GET('KT200136');
Contact.RENAME(Contact."Phone No.");

Sobald der Code ausgeführt wird, wurde die Nummer des Kontakts zur Telefonnummer geändert.

Beispiel 2

Wird versucht ein Datensatz umzubenennen, nachdem eine neuere Version des Datensatzes geschrieben und an die Datenbank übermittelt wurde, liegt ein Laufzeitfehler vor. Im folgenden Beispiel wird dargestellt, wie ein solcher Fehler verursacht wird.

Zunächst werden zwei neue Variable hinterlegt.

Name Datentyp Subtyp
Customer1 Record Customer
Customer2 Record Customer

Anschließend wird folgender C/AL-Code eingefügt.

Customer1.LOCKTABLE;
Customer1.GET('100');
Customer1."Address 2" := 'Suite 101';
Customer1.MODIFY;
Customer2.GET('100');
Customer2."Phone No.":= '206-555-0109';
Customer2.MODIFY;
COMMIT;
Customer1."Phone No." := '425-555-0184';
Customer1.RENAME('101');

In diesem Beispiel ist Customer1 nach dem COMMIT veraltet und die neuen Änderungen würden die alten, die mit Customer2 durchgeführt wurden, durch die Werte in der Variable Customer1 überschrieben werden. Seit Microsoft Dynamics NAV 2016 ist es nicht möglich, einen Datensatz mit der alten Version des Datensatzes umzubenennen.

Es ist zu beachten, dass der Fehler in diesem Beispiel nur auftritt, wenn die Funktion COMMIT aufgerufen wird. Sobald der Code ausgeführt wird, erscheint folgende Fehlermeldung:

Es wurde versucht, eine alte Version eines Datensatzes vom Typ 'Debitor' zu ändern. Der Datensatz muss zunächst erneut aus der Datenbank gelesen werden. Hierbei handelt es sich um einen Programmierfehler. Identifizierende Felder und Werte: Nr.='100'