Microsoft Dynamics NAV supports different types of events for different purposes. This topic describes the different types.
Business Events
A business event is a custom event. It defines a formal contract that carries an implicit promise not to change in future releases. It is the expectation that business events are published by solution ISVs, including Microsoft.
Business events can be compared with publicly released APIs on which 3rd party solution provider develop integrations and additions. Therefore, the downstream cost of making changes to a business event implementation can be considerable for those who use the event in their applications. There may be some cases where changes are required; however, you should keep these to an absolute minimum.
Development considerations
A typical business event reflects changes in “state” with regards to a process. This makes them very well suited for workflow. An example of a business event could be when a sales order has been posted. It is important to note that business events should not be tied to the implementation-details, such as the tables or fields in which the data is stored. Preferably, the event publisher developer should be free to change the implementation, while still keeping the business event intact.
Documentation
Business events must be documented with the solution, including the before-state and after-state of the events.
Integration Events
An integration event is also a custom event, like a business event, except that it does not carry the same promise of not changing, nor does it have the restriction not to expose implementation details.
The main purpose of integration events is to enable the integration of other solutions with Microsoft Dynamics NAV without having to perform traditional code modifications.
Development considerations
An integration event can be changed to a business event later. At which time, it must adhere to the same implied contract and commitment as any business event. It can also simply be designed-in hook points for external add-ons.
Documentation
There are no formal requirements for integration events because they follow local partner best practices.
Trigger Events
Unlike business and integration events which must be programmed, trigger events are predefined events. Trigger events are raised by the system when it performs database table operations, such as deleting, inserting, modifying, and renaming a record. Trigger events are closely associated with the table triggers for database operations: OnDelete, OnInsert, OnModify, OnRename, and OnValidate (for fields).
Available Trigger Events
For each database operation, there is a "before" and "after" trigger event with a fixed signature. The following table describes the available trigger events:
Trigger event with signature | Description |
---|---|
| Executed before a record is deleted from a table. |
| Executed after a record is deleted from a table. |
| Executed before a record is inserted in a table. |
| Executed after a record is inserted in a table. |
| Executed before a record is modified in a table. |
| Executed after a record is modified in a table. |
| Executed before a record is renamed in a table. |
| Executed after a record is renamed in a table. |
| Executed before a field is validated when its value has been changed. |
| Executed after a field is validated when its value has been changed. |
The following table describes the parameters of the trigger events:
Parameter | Type | Description |
---|---|---|
Rec | Record | The table that raises the event. |
xRec | Record | The table that raises the event. |
RunTrigger | Boolean | Specifies whether to execute the code in the event trigger when it i invoked. If this parameter is true, the code will be executed. If this parameter is false, then the code is not executed. |
CurrentFieldNo | Integer | The number of the field that raises the event. |
Development Considerations
Trigger events are published by the runtime and cannot be raised programmatically.
The relative order of execution of trigger events, table triggers, and database operations is as follows:
Order | Item | Example |
---|---|---|
1 | Trigger event (before) | OnBeforeDeleteEvent |
2 | Table trigger | OnDelete |
3 | Global table trigger in codeunit 1 | OnDatabaseDelete |
4 | Database operations | Delete the record |
5 | Trigger event (after) | OnAfterDeleteEvent |
Trigger events do not appear in C/AL Editor from the Table Designer in the Microsoft Dynamics NAV Development Environment.
Subscriber functions cannot access the sender and or access global variables.
Documentation
There are no formal requirements for trigger events as it follows that of database triggers.