Dynamics NAV Web Services und die Reihenfolge der Ereignistrigger
Annahme: 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.
*This post is locked for comments