[Gelöst] Frage zum Transaction State

12. Juni 2014 14:59

Guten Tag zusammen,

meine Frage bezieht sich auf folgenden Link:
http://dynamicsuser.net/blogs/mark_brummel/archive/2009/12/01/tip-20-save-report-usage.aspx

Das dort eine temporäre Tabelle genutzt wird, wird damit begründet:
"In order for this to work, we have to implement a trick, because when this code is executed, Navision is not yet in transaction state."

Kann mir dies jemand erläutern warum es so gemacht wird und was man unter dem "transaction state" verstehen kann?

Würde gerne das drumherum ein wenig mehr verstehen als es nur zu coden ;-)

MfG
Peter Heinrich
Zuletzt geändert von petermace am 12. Juni 2014 16:06, insgesamt 1-mal geändert.

Re: Frage zum Transaction State

12. Juni 2014 15:57

petermace hat geschrieben:Kann mir dies jemand erläutern warum es so gemacht wird und was man unter dem "transaction state" verstehen kann?


Herzlich Willkommen bei uns!

Gemeint ist: Wir dürfen normalerweise nicht per C/AL Daten schreiben, ehe Benutzer (mittels eines Klicks auf eine Action, oder manuellem Editieren, oder ...) eine Transaktion gestartet hat.
Versuche z.B. im OnAfterGetRecord-Trigger einer Page, den eben gelesenen Datensatz mit MODIFY zu überschreiben - du erhältst eine Fehlermeldung, dass noch keine Transaktion gestartet worden wäre. (Auch hiefür gibt es einen Workaround: einen Report schreiben, der den Datensatz ändern, und diesen Report im OnAfterGetRecord aufrufen.)

Re: Frage zum Transaction State

12. Juni 2014 15:59

Herzlich Willkommen im Forum!

"Transaction state" ist hier ein laufende Datenbanktransaktion, also der Zustand zwischen einem Schreibvorgang (MODIFY, INSERT oder RENAME) und einem entweder automatischen Commit (der letzte Trigger des ersten aufrufenden Objekts einer Objektkette wurde ohne Abbruch durchlaufen) oder einem manuellen COMMIT im Code.

Wenn man das direkt machen würde, kommt vermutlich die Fehlermeldung
You cannot make any changes to the database until a Transaction has been started
bzw.
Sie können keine Änderungen an der Datenbank vornehmen, ehe eine Transaktion gestartet wurde.

Transaktionsfehler.png

weil Codeunit 1 automatisch nach Eingaben vom Client durchlaufen wird.

Bei temp. Tabellen ist nichts zu committen , weil die nur während der Transaktion im Arbeitsspeicher existieren. Also kann da der Wert zwischengeparkt werden.

Zum Verhalten bei komplizierteren Überschneidungen von Transaktionen siehe Posts von Dean McCrae hier.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: Frage zum Transaction State

12. Juni 2014 16:05

Vielen Dank für die erschöpfende Auskunft. Das gleich die grauen Emminenzen des Forums zur Hilfe eilen :wink:

"Ab und an" doch hilfreich zu verstehen was man dort macht. :lol: