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 Web Services und die Reihenfolge der Ereignistrigger
Tags: webservices, trigger, reihenfolgeAnnahme: Wir haben einen Web Service auf Basis eine Page (Property PageType=List, Editable=Yes) veröffentlicht.
Quizfrage: In welcher Reihenfolge werden beim Aufruf einer Web Service Methode die Ereignistrigger der Page und der zugrundeliegende Datenbanktabelle ausgelöst?
Web Service - Create |
|||
Nr. |
Objekt |
Ereignis |
Hinweis |
1 |
Page |
OnInit |
Falls Sie versuchen sollten, in diesem Ereignistrigger in die Datenbank zu schreiben, bekommen Sie die Fehlermeldung „Sie können keine Änderungen an der Datenbank vornehmen, ehe eine Transaktion gestartet wurde.“ |
2 |
Page |
OnOpenPage |
|
Impliziter Start der Datenbanktransaktion |
|||
3 |
Page |
OnNewRecord |
|
4 |
Table |
<Column Name> - OnValidate |
Auf dem Table-Objekte wird das OnValidate-Ereignis der Primärschlüsselspalte ausgelöst. |
5 |
Page |
<Column Name> - OnValidate |
Auf dem Page-Objekt wird das OnValidate-Ereignis der Primärschlüsselspalte ausgelöst. |
6 |
Page |
OnInsertRecord |
|
7 |
Table |
OnInsert |
|
8 |
Table |
<Column Name> - OnValidate |
Gem. der Reihenfolge der Spalten auf dem Page-Objekt werden die OnValidate-Ereignisse aller Spalten ausgelöst, deren Werte Sie gesetzt haben. Jeweils zunächst das OnValidate-Ereignis des Table-Objekts und anschließend des Page-Objekts. |
9 |
Page |
<Column Name> - OnValidate |
Siehe oben. |
10 |
Page |
OnModifyRecord |
|
11 |
Table |
OnModify |
|
Implizites COMMIT der Datenbanktransaktion |
|||
12 |
Page |
OnAfterGetRecord |
Falls Sie versuchen sollten, in diesem Ereignistrigger in die Datenbank zu schreiben, bekommen Sie die Fehlermeldung „Sie können keine Änderungen an der Datenbank vornehmen, ehe eine Transaktion gestartet wurde.“ |
Web Service - Update |
|||
Nr. |
Objekt |
Trigger |
Hinweis |
1 |
Page |
OnInit |
Falls Sie versuchen sollten, in diesem Ereignistrigger in die Datenbank zu schreiben, bekommen Sie die Fehlermeldung „Sie können keine Änderungen an der Datenbank vornehmen, ehe eine Transaktion gestartet wurde.“ |
2 |
Page |
OnOpenPage |
|
Impliziter Start der Datenbanktransaktion |
|||
3 |
Page |
OnAfterGetRecord |
Falls Sie versuchen sollten, in diesem Ereignistrigger in die Datenbank zu schreiben, bekommen Sie die Fehlermeldung „Sie können keine Änderungen an der Datenbank vornehmen, ehe eine Transaktion gestartet wurde.“ |
4 |
Table |
<Column Name> - OnValidate |
Gem. der Reihenfolge der Spalten auf dem Page-Objekt werden die OnValidate-Ereignisse aller Spalten ausgelöst, deren Werte Sie geändert haben. Jeweils zunächst das OnValidate-Ereignis des Table-Objekts und anschließend des Page-Objekts. |
5 |
Page |
<Column Name> - OnValidate |
Siehe oben. |
6 |
Page |
OnModifyRecord |
|
7 |
Table |
OnModify |
|
Implizites COMMIT der Datenbanktransaktion |
|||
8 |
Page |
OnAfterGetRecord |
Falls Sie versuchen sollten, in diesem Ereignistrigger in die Datenbank zu schreiben, bekommen Sie die Fehlermeldung „Sie können keine Änderungen an der Datenbank vornehmen, ehe eine Transaktion gestartet wurde.“ |
Web Service - Delete |
|||
Nr. |
Objekt |
Trigger |
Hinweis |
1 |
Page |
OnInit |
Falls Sie versuchen sollten, in diesem Ereignistrigger in die Datenbank zu schreiben, bekommen Sie die Fehlermeldung „Sie können keine Änderungen an der Datenbank vornehmen, ehe eine Transaktion gestartet wurde.“ |
2 |
Page |
OnOpenPage |
|
Impliziter Start der Datenbanktransaktion |
|||
3 |
Page |
OnAfterGetRecord |
Falls Sie versuchen sollten, in diesem Ereignistrigger in die Datenbank zu schreiben, bekommen Sie die Fehlermeldung „Sie können keine Änderungen an der Datenbank vornehmen, ehe eine Transaktion gestartet wurde.“ |
4 |
Page |
OnDeleteRecord |
|
5 |
Table |
OnDelete |
|
Implizites COMMIT der Datenbanktransaktion |
Schlussbemerkung: Der Test basiert auf der Version 2009 R2, Build 32441.
Bemerkenswert ist
- dass im Fall der Create()-Methode eine Kombination aus Rec.INSERT() und Rec.MODIFY() durchlaufen wird und
- dass in keinem Fall das OnClosePage-Ereignis ausgelöst wird.