Customizing Dynamics NAV
Discover different ways to customize the application to give you and your colleagues access to the features, functionality, and data that you need most.
Dynamics 365 2019 release wave 2 plan Discover the latest updates to Dynamics 365.Release Plan | Weekly Deployment Notes
Ace your Dynamics 365 deployment with packaged services delivered by expert consultants.Explore service offerings
Connect with the ISV success team on the latest roadmap, developer tool for AppSource certification, and ISV community engagements.
ISV self-service portal
The FastTrack program is designed to help you accelerate your Dynamics 365 deployment with confidence.
FastTrack Program | Finance and Operations TechTalks | Customer Engagement TechTalks | Talent TechTalks
With the release of NAV2016 we get new possibilities for making changes to the product without raw source code modification.
This is called “events” and the concept is “stolen” from DotNET.
How does it work?
Traditionally if we want to execute extra functionality in NAV we simply make a change to the source code.
This is referred to as raw source code modification and is the root cause for the many hours NAV developers spend comparing and merging code. To simplify upgradability Microsoft now offers us to subscribe to events in the system. There are three types of events:
The Table and Page triggers are relatively straight forward. Before and After the typical triggers such as OnInsert and OnValidate you can subscribe.
The manual raising of events is more interesting and is what this post is about. Most of the business logic of Dynamics NAV is in Codeunits. Large modules such as Sales Post, Reservation Engine Mgt. or Gen. Jnl.-Post Line. What if I want to trigger my code from there.
This is done using Integration or Business events that Microsoft implements in the product. Currently there are 128 of them. You can easily find them using the script from Waldo’s blog.
So when and how are these events executed? This is an interesting question since we can have multiple subscribers to one event.
In this screenshot we have 4 codeunits. Codeunit 50002 has an Integration event Foo that is raised in the OnRun trigger, then we have Codeunit 50000, 50004 and 50005, with subscribers. If you execute this you will find that EE comes first, then DD, CC, BB and AA. So it executes on object ID. This however is not guaranteed. Microsoft might change that in the future.
Service Level Agreements
What does that mean for the SLA that partners have with customers? My guess is that all partners will change their SLA to exclude any code that is triggered using events, or at best have a list of software that they trust to be save to use in combination with their software.
Let’s take an example to be a little bit more extreme. Let’s go to back the post about treating a table as a class and have methods that call into codeunits. What if we implement loose coupling there.
In this screenshot I have implemented a method on the Sales Header table PostDocument and changed codeunit 81 to subscribe.
This is an example of loose coupling in NAV2016. But is it good? What if I add another subscriber? How would I know what code it executes.
With Partner Ready Software we implement Facades for this and Facades have similar challenges. In my next blog posts I will elaborate more on this and how to solve challenges we have when we implement loose coupling in NAV and prevent developers subscribing to events they should not subscribe too.
Hooks vs. Events
Another challenge will be deciding when to use events and when to keep on using hooks. I will also write a post about this.
Business Applications communities