Zuweisung ĂĽberschreibt xRec

Bild Microsoft Dynamics NAV 2016

Zuweisung ĂĽberschreibt xRec

Beitragvon Datenkultur » 23. August 2016 12:12

Moin zusammen,

wir sind gerade bei einem Upgrade von 2009R2 auf 2016. Dabei ist uns aufgefallen, dass eine einfache Zuweisung von einer lokalen, temporären Record-Variable auf eine übergebene, nicht temporäre Record-Variable des gleichen Typs dazu führt, das der xRec der Ziel-Variable das selbe enthält wie der Rec. Dadurch wird das folgende Modify(True) zwar ausgeführt, aber die Aktualisierung des physikalischen Datensatzes auf der Datenbank nicht.

ResTaskLoc = Temporäre Record Variable
ResTaskPar = An die Funktion übergebene, nicht temporäre Record Variable

Code: Alles auswählen
IF OpenDelegateTask(ResTaskLoc,Text0052) THEN BEGIN 
  ResTaskPar := ResTaskLoc;
  ResTaskPar.MODIFY(TRUE);
END;


Nimmt man Transferfields, dann läuft alles:

Code: Alles auswählen
IF OpenDelegateTask(ResTaskLoc,Text0052) THEN BEGIN
  ResTaskPar.TRANSFERFIELDS(ResTaskLoc);
  ResTaskPar.MODIFY(TRUE);
END;


Hier gab es offensichtlich eine Ă„nderung im Verhalten, denn unter 2009R2 funktioniert auch der erste Code-Block prima.

Ist das ein Bug, oder ein Feature?

Danke für Eure Einschätzungen

Andreas
Datenkultur
Microsoft Partner
Microsoft Partner
 
Beiträge: 156
Registriert: 19. August 2009 15:18
Wohnort: Krefeld
Realer Name: Andreas Koblischke
Arbeitsort: Krefeld
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: Kunden: Alle. Wir: 2017

Re: Zuweisung ĂĽberschreibt xRec

Beitragvon Kowa » 23. August 2016 13:44

Eine "Ă„nderung im Verhalten" in NAV 2016 sind Events :wink: , das dĂĽrfte die Ursache sein.
Mehr dazu hier:
OnAfter table event subscriber patterns and antipatterns
Eventing OnAfterModify: Watch out when checking against xRec
GruĂź, Kai

Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, Messenger oder Telefon! DafĂĽr ist dieses Forum da.

Download: Dynamics NAV Object Text Explorer (Alternativlink). MVP Alumni
Benutzeravatar
Kowa
Moderator
Moderator
 
Beiträge: 7835
Registriert: 17. Juni 2005 17:32
Wohnort: Bremen
Realer Name: Kai Kowalewski
Arbeitsort: Osterholz-Scharmbeck
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics 365
Microsoft Dynamics Version: BC, NAV 2018 bis Navision 2.01

Re: Zuweisung ĂĽberschreibt xRec

Beitragvon Datenkultur » 23. August 2016 15:20

Moin Kai,

danke fĂĽr die Info. Ich habe das schon vermutet. Ich gebe das mal in die Entwicklung weiter. Mal schauen wie groĂź der Zusatzaufwand fĂĽr das Projekt wird.

Andreas
datenkultur GmbH

Business Intelligence mit Strategie
Datenkultur
Microsoft Partner
Microsoft Partner
 
Beiträge: 156
Registriert: 19. August 2009 15:18
Wohnort: Krefeld
Realer Name: Andreas Koblischke
Arbeitsort: Krefeld
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: Kunden: Alle. Wir: 2017

Re: Zuweisung ĂĽberschreibt xRec

Beitragvon Anja S » 23. August 2016 17:18

Hallo zusammen,

hier meldet sich dann mal die Entwicklung dazu;)

Da wir (noch) keine Events verwenden, glaube ich eher nicht, dass das die Ursache fĂĽr das Problem ist.
Zumal ich inzwischen herausgefunden habe, dass xRec im OnModify-Trigger immer Rec entspricht, solange das Rec nicht im Trigger selber geändert wird:

NAV2016: https://msdn.microsoft.com/en-us/librar ... 90%29.aspx
Nav2009: https://msdn.microsoft.com/en-us/librar ... 60%29.aspx

Bei der SQL-Ablaufverfolgung wurde bei der Zuweisung mit anschließendem Modify das Einfügen eines dazugehörigen Datensatzes zwar ausgeführt, das Ändern des "ResTaskPar" aber nicht.

Ich vermute eher, dass eines der folgenden Sachen passiert ist:
- Beim Zuweisen wurde dem nicht temporären Record auch die Information "Temporär" mit übertragen
- Beim Ändern des temporären Datensatzes wurde keine Versionsänderung gespeichert und das "keine Versionsänderung" wurde beim Zuweisen ebenfalls in die nicht temporäre Variable übernommen
Mfg, Anja
Anja S
Microsoft Partner
Microsoft Partner
 
Beiträge: 22
Registriert: 13. Februar 2012 12:36
Realer Name: Anja
Arbeitsort: Krefeld
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 5.0 - 2009 R2

Re: Zuweisung ĂĽberschreibt xRec

Beitragvon Datenkultur » 23. August 2016 17:53

Echt drolliger Fehler. Wir haben eben das Transferfields rausgenommen und zu der Recordset Zuweisung noch einen simplen Stringfeldwert im Code zugewiesen. Das Modify hat nur den geänderten Stringfeldwert aktualisiert. Die Werte aus der temporären Tabelle sind nicht in die Datenbank gespeichert worden.

Ich finde es ja prima, dass nur Felder an die DB übertragen werden, die auch geändert wurden. Ich fände es aber auch prima wenn alle geänderten Felder an die DB übertragen werden.

Da mach ich morgen lieber mal nen Call bei MS auf, oder fällt Euch dazu noch etwas ein?

Update: WIr haben gerade noch mal das aktuelle Hotfix eingespielt. Hat auch nix geholfen :-(
datenkultur GmbH

Business Intelligence mit Strategie
Datenkultur
Microsoft Partner
Microsoft Partner
 
Beiträge: 156
Registriert: 19. August 2009 15:18
Wohnort: Krefeld
Realer Name: Andreas Koblischke
Arbeitsort: Krefeld
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: Kunden: Alle. Wir: 2017


ZurĂĽck zu NAV 2016

Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 1 Gast