NAV 2017 – Delivering custom code as?extension
Silviu Virlan
Microsoft MVP | MCT | Author | Dynamics 365 Business Central Supervisor at RSM US LLP | ERP, Dynamics NAV Expert
We can still deliver our custom code as a fob in NAV 2017 as most VARs will continue to do so in the foreseeable future, however it seems to me that ISVs will embrace faster the new method. While in my first blog on extensions I was focused on explaining the basics of the technical side of creating an extension, in this blog I will delve into delivering a functional requirement as an extension.
I will go through an exercise of adding a new field: “Created By†Code 20 (a valid user from User table) to Sales documents.
If you’re planning to follow this exercise please review “Setting up your working space†from my previous blog.
I will make this new field available on:
- Table 36 “Sales Headerâ€
- Table 112 “Sales Invoice Headerâ€
- Table 114 “Sales Cr. Memo Headerâ€
- Page 43 “Sales Invoicesâ€
- Page 44 “Sales Credit Memoâ€
- Page 132 “Posted Sales Invoicesâ€
- Page 134 “Posted Sales Credit Memoâ€.
The field will be passed on and made visible on
- Page 20 “G/L Entries†and
- Page 25 “Cust. Ledger Entriesâ€
when we drill down on different tables exposed via Navigate action on the posted document.
At this moment, delta files for reports (standard report modifications) cannot be part of an extension. Please visit Extension Packages Capability Support Matrix for updates on this topic.
Therefore my attempt to modify the report 1306 to add the new field in the layout and report failed:
Delivering modifications to reports must be done in a different way. One alternative is to add a new action on the Posted Sales Invoice and point to a copy of report 1306 (modified to include our field). Therefore our custom code won’t be extension-only based.
This link contains a fob with all the modifications done to a Demo Database 2017 CU9 to create this extension.
The steps to create and publish the extension are very similar to the steps in my previous blog located here.
Let’s test the changes by pointing our Service tier to the target database and publish there the new extension.
First let’s install the extension, by opening page 2500 “Extension Managementâ€:
Let’s open Sales Invoice page and create a new invoice. The “Created By†field should be in the first FastTab and auto-populated with the logged in user:
After posting the invoice we notice that the new field is part of the “Posted Sales Invoice†as well:
Next we want to check the existence of this new field in page “General Ledger Entries†and page “Cust. Ledger Entriesâ€. In the “Posted Sales Invoice†page, in the Actions tab, click on Navigate, and check the 2 pages:
At the core of this simple exercise is the codeunit 50000 in which I subscribed in a few instances to standard events like OnAfterInsertEvent:
Thank you for reading, sharing, commenting, liking, following!