Gelöst Schreiben in eine Recordvariable vom Typ RecordRef

16. Januar 2017 14:16

Hallo zusammen,
ich möchte aus einer Tabelle Daten in die gleiche Tabelle eines anderen Mandanten schreiben. Ich habe folgende Variablen von Typ "RecordRef" für die gleiche Tabellen-ID angelegt:
SourceRecordRef.Open(Tabellen-ID)
TargetRecordRef.Open(Tabellen-ID, FALSE, Mandant2)
Das Lesen funktioniert einwandfrei. In der SourceRecordRef und in der TargetRecordRef sind die Datensatzzähler korrekt, allerdings bekomme ich beim Schreiben (TargetRecordRef.INSERT) gleich beim ersten Datensatz einen Duplicate-Key-Fehler. Die Zuweisung der Daten erfolgt mit TargetRecordRef := SourceRecordRef.
Ich vermute die Angabe des 2. Mandanten (oben mit Mandant2 bezeichnet) geht verloren. Geht diese Funktion mit dem Schreiben aus einer Tabelle von einem in einen anderen Mandanten überhaupt nicht oder fehlt mir da noch eine Anweisung ?
Bin für jeden Hinweis dankbar.
Gruß
U d o
Zuletzt geändert von schreibe am 27. Januar 2017 09:36, insgesamt 2-mal geändert.

Re: Schreiben in eine Recordvariable vom Typ RecordRef

16. Januar 2017 14:48

Grundsätzlich: Wenn es möglich ist (weil ein variabler Zugriff auf verschiedene Tabellen nicht nötig ist), statt RecRefs direkt mit Recordvariablen + CHANGECOMPANY arbeiten. Ist viel einfacher und lesbarer.

Aber gehen wir weiter vom RecRef aus: Schreiben in andere Mandanten geht definitiv.
Aber nicht so:
Zuweisung der Daten erfolgt mit TargetRecordRef := SourceRecordRef.

Damit überpinselst du den Mandanten im Ziel-RecRef. Baue mit Hilfe von FieldRefs stattdessen ein TRANSFERFIELDS nach. Danach erst das RecRef.INSERT.

Re: Schreiben in eine Recordvariable vom Typ RecordRef

16. Januar 2017 15:49

Sorry Natalie, kann dir gerade nicht ganz folgen. Wie wäre die korrekte Zuweisung ?

Re: Schreiben in eine Recordvariable vom Typ RecordRef

16. Januar 2017 16:35

Wenn du RecRefs befüllen möchtest, musst du immer zusätzlich mit FieldRefs arbeiten.
Schau mal ins Codebeispiel hier: http://www.archerpoint.com/blog/Posts/j ... namics-nav
Nur dass du bei gleichen Tabellen hier mit einer FOR-Schleife arbeiten kannst, weil die Felder auf beiden Seiten gleich sind.
Siehe auch Codeunit 423, Funktion LogInsertion. Die Funktion löst zwar eine andere Fragestellung, bedient sich aber auch der FOR-Schleife.

Re: Schreiben in eine Recordvariable vom Typ RecordRef

27. Januar 2017 09:35

Hallo Natalie,
das Codebeispiel brachte mir die Lösung.
Vielen Dank für Deine Unterstützung.
Gruß
U d o

Re: Schreiben in eine Recordvariable vom Typ RecordRef

25. Mai 2018 10:17

Natalie hat geschrieben:Wenn du RecRefs befüllen möchtest, musst du immer zusätzlich mit FieldRefs arbeiten...

Dies ist tatsächlich nicht erforderlich. Es geht wesentlich einfacher, wenn man z. B. einen Datensatz in einen anderen Mandanten einfügen möchte, funktionert folgender Code (getestet in NAV 2018):
Code:
rRef2 := rRef1.DUPLICATE;
rRef2.CHANGECOMPANY('AndererMandantname');
rRef2.INSERT;