Bodo's Dynamics NAV und Business Central Blog
Bodo ist ein Dynamics NAV Urgestein. Er programmiert Navision seit DOS Zeiten und hat auch keine Scheu vor .NET und schon gar nicht vor Dynamics 365 oder Azure. Viele Neueinsteiger wurden von ihm in den letzten Jahren zu Entwicklern ausgebildet. In diesem Blog veröffentlichen Bodo und andere Superhelden Interessantes aus der Welt von Dynamics 365 Business Central / Dynamics NAV und Microsoft Azure.Dynamics NAV 2018 – Temporär oder nicht temporär, das ist hier die Frage (*)
Tags: trigger, bug, 2018Nach dem ich letzte Woche an der Funktionsweise der Page-Eigenschaft »SourceTableTemporary« gezweifelt habe, ist der Glaube zurückgekehrt.
Die Page-Eigenschaft »SourceTableTemporary« funktioniert einwandfrei. Sie sorgt dafür, dass Änderungen am Record-Inhalt nicht in die Datenbanktabelle geschrieben werden, sondern nur in das temporäre Abbild der Tabelle.
Allerdings darf man eines nicht vergessen. Die Page führt alle Ereignistrigger wie z.B. »OnInsert«, »OnModify« oder »OnDelete« aus. Die dort vorhandene Programmierung arbeitet eventuell mit der gleichen Datenbanktabelle, die dann unter Umständen nicht temporär ist.
Nehmen wir das konkrete Beispiel von letzter Woche. Bei der Tabelle »Customer« findet man unter »OnModify« den unten abgebildeten Quellcode. Es wird die Funktion »OnModify« der Codeunit 5056 »CustCont-Update« aufgerufen und der (temporäre) »Customer« übergeben:
»OnModify« wiederum ermittelt den zugehörigen »Contact«, kopiert die Daten von »Customer« um, und ruft dann »OnModify« der Tabelle »Contact« auf:
Und »OnModify« der Tabelle »Contact« delegiert die Verarbeitung an Codeunit 5055 »CustBankVend-Update« weiter.
Und nun sind wir geplatzt. Die Funktion »UpdateCustomer« macht ein »GET«, um »Customer« zu lesen. Ab jetzt sind wir nicht mehr temporär, sondern persistent auf Tabelle »Customer«. D.h., das anschließende umkopieren der Daten von »Contact« und der »MODIFY« sorgen dafür, dass temporär gemeinte Änderungen bis auf die Datenbank durchschlagen.
(*) Frei nach Hamlet von William Shakespeare, https://de.wikipedia.org/wiki/Sein_oder_Nichtsein,_das_ist_hier_die_Frage