While going through what is new in BC 2022 wave 1, I found out a cool tool.
Here comes the new Performance Profiler. While many have implemented Telemetry and got some insight into their processes, this is a step forward from Microsoft to bring Telemetry tools on the BC user interface.
Now, the concept of a profiler is not a futuristic functionality, it has been implemented on many platforms, like Java Profiling or SQL Server Profiler or even MS Edge Profiler.
A profiler is a code monitoring tool, a tool that helps trace, recreate, and troubleshoot various issues in code.
Nevertheless, seeing a profiler in Business Central is so refreshing.
Let’s do a quick test to see how that works at high level.
I added an action on Customer List page that does nothing.
Well, it does something, it is waiting for 5 seconds before ending.
pageextension 50100 CustomerListExt extends "Customer List"
ApplicationArea = All;
_DateTime := CurrentDateTime();
_DateTime := CreateDateTime(DT2Date(_DateTime), DT2Time(_DateTime) + 5000);
while (CurrentDateTime() < _DateTime) do
Message('App published: Hello world');
I published it and let’s see if it is captured by Performance Profiler.
As the documentation recommended, I opened the Performance Profiler in its own page.
On the Business Central main browser window go to the Customer List and locate the new action:
On the Performance Profiler, click on the Start action.
Then launch the TestProfiler action.
When you get control to the main browser BC page, head over the Performance Profiler page and click Stop action. And here are the results:
We can see 2 regions:
one that shows what application extensions were detected between Start and Stop.
a second one, a technical part-page, with 2 sub-lists:
one showing the time spent by application object
second showing a call tree with timing for each branch
Very cool feature which I wish I had it in all previous BC versions.
How was this designed?
The main page Performance Profiler is based on Page 24 “Performance Profiler” in the Microsoft System Application.
Lots of other objects involved with the Performance Profiler to bring this new feature:
Take a look below, to compare the Microsoft System 19.5 versus Microsoft System 20.
With BC 2022 wave 1, the system application comes with a set of new objects to support Profiling.
All in all, Performance Profiler is a great addition to the Business Central platform.
This will help consultants locate faulty/slow code and record, download and send the recording to the authors of the code that performs poorly.
With the promotion of Microsoft’s ERP Dynamics NAV as the only SMB Microsoft ERP in the cloud, the community gained a significant number of new users coming from other products.
Introduction of Cloud Migration feature or Data Migration in Business Central allowed delivery teams in the Partners space to bring in BC SaaS many end-users from Dynamics GP or SL, as well as from other non-Microsoft ERPs, like QuickBooks.
Those that consider themselves new to Business Central might find difficult to navigate and find what they need in their daily work with the new ERP.
This is when knowing about the Page Inspection page comes handy.
To enable the Page Inspection pane, you can use these keys:
CTRL + ALT + F1
navigating to “?” on the top right corner -> click on Help and Support -> look for “Inspect Pages and Data” link:
Once enabled, Page Inspection appears as a vertical frame in the browser window and allows users to see the components of each page.
Click on various page components and notice how the Page Inspection updates. Look for:
the fields included in that component
the extensions that touched the current page/component
existing filters for that component/page
Enabling Page Inspection on the Business Manager Role Center and selecting the frame in the middle uncovers valuable information:
The frame is actually a Card Page based on a BC table “Activities Cue” and the card page itself is Page 1310 “O365 Activities”.
Some users might ask:
What are the records stored in this table?
For seeing the records there are a few options:
In the page inspection pane, click on “View Table” link:
This will open up the default page for table 1313
Another way of displaying all records in a table is to go to Table Information page, Search for table 1313, and click on the flow field “No. Of Records”
Ultimately, the users can run the table from the URL. Copy the link up to and inluding the environment name (in my example below, include everything up to “Production” then add “/?table=1313”
2. What data is available for each record?
There are three Tabs at the top:
use the magnifying loop(under Page Filters) to filter the fields by name or value
not all fields available in the table are displayed on the page. You can try to Personalize your page or ask your Partner to help you. To enable a field for all users within one profile you might want to ask your admin to customize the page.
Custom code affects tables and pages. You can easily see what extensions have touched the current table/page
Note: you can easily detect which fields belong to which extension as new extensions need to include a suffix or prefix for each field/action/page/table.
Page Filter: filters are often used to display the data in Business Central. This tab gives good clues into how the data has been filtered:
If you do not see the details you’re expecting to see in the Page Inspection page, you probably do not have the right permission. Talk to your admin and ask them to give you D365 Troubleshoot permission set or user group.
For some Microsoft official documentation on the Page Inspection read this.
Happy new year, readers! Time for another Feynman technique exercise.
Today I tried for the first time (Duh Silviu …. it’s been out there for at least a year!!!) to debug a snapshot.
I started my exercise on Microsoft Docs here. Also, very useful was Stefano’s blog.
But first, what is a snapshot? A snapshot is a recording of executed code in Business Central.
The idea is that when you want to investigate an error in one of your environments (I’ll be showing screenshots of SaaS), you would start the recorder (from VS Code), perform the action you want to investigate, stop the recorder. Then re-play the recording. Simple!
Well, I ran into a few issues, therefore, for my sake in the future debugging sessions and for the interested readers, I’ll recap what I did to be able to replay a snapshot for debugging.
User debugging settings
First, the user that will connect to the SaaS for debugging purposes should be part of a group called D365 SNAPSHOT DEBUG:
Point Snapshot to the right environment
Most of SaaS development environments I come across have one configuration in launch.json.
For snapshot debugging though, you need an additional configuration:
I added the first configuration for this exercise.
The key element is the sessionId.
To find the sessionId you need to go to the admin console:
Note: This step is going to be a bit tricky. Because you might have plenty of sessions with BC and you might try to record the wrong session. I usually cancel all sessions under my name, close all BC windows, make sure there is no active session under my name, login in BC, check the session id, update configuration, and start recording.
In VS Code, start recording by pressing F7 or from the Pallette launch AL: Initialize Snapshot Debugging.
Play use case
In BC, play your use case.
For example, in my environment I had a Sales Order without External Document No.
Open the Sales Order and attempt to Post.
Get the error referring to the missing “External Document No.”.
Move then to VS Code to stop the recording.
In VS Code, stop recording. Use ALT + F7 or from the Pallette launch AL: Finish Snapshot debugging on the server. In the Output screen of the VS Code you should see something like this:
In VS Code, on the left side of the toolbar, there is a small button showing all snapshots.
Click on it, and from the top choose the desired snapshot, in my case last snapshot is the one on top:
After choosing the snapshot, the system will automatically play it, stopping through each breakpoint and ending up at the line of code responsible for the error encountered in the web client.
You can see on the left side all the goodies needed for debugging: the Call Stack, the local and global variables…
And if you are interested, you can unzip the snapshot and have a look at what is in it: a set of MDC files, AL files and a version file.
With BC 19 wave 2 Microsoft improved the Cloud Migration functionality by re-designing the migration flow, cleaning up the errors reported by the partners over the summer, allowing migration of a larger set of GP tables with one additional extension installation, and removing the version 18 size limitations.
Improved migration flow
search “cloud migration management”
go through “Cloud Migration Setup”
before version 19, the replication and data upgrade were done in one step
now we have 2 separate steps triggered from the Migration Cloud Management page actions:
“Run Migration Now” – for copy/replication; at the end the last “Cloud Migration Management” entry shows “Upgrade Pending”
“Run Data Upgrade Now” – once data is copied it has to be validated/upgraded. Status will move through “Upgrade in Progress” and Completed.
The split of the unique process “Run Migration Now” into two steps was introduced to better manage cases when the data upgrade would fail.
If this is the case, then in the admin center you can restore the environment as of the time of end of the replication step and repeat the data upgrade.
Cloud migration resiliency
use of upgrade tags: to avoid multiple data upgrades processing use Upgrade Tags or to completely skip the upgrade. More here.
less locking when running cloud migration (more companies per run). There is still a limitation if schema for migrated tables is above a json object limit of 4 Mb. To avoid locking, migrate companies in smaller chunks. Especially if you get an error like this:
The size of the lookup activity result exceeds the limitation …
data repair after Cloud Migration: some data would be missing while migration would be reported as successful in the previous version
Dynamics GP migration changes
Enabled large GP tables (> 500 mb or > 100k records)
Support mapping of any custom table
add events for GP to BC migration:
new sample Microsoft extension to create BC counterpart tables for GP tables (source code here). This allows for a much larger set of tables to be migrated to SaaS.
80 GB limitation is lifted. Any size is supported.
Cleanup as much as possible before cloud migration
Some functionality may be disabled after cloud migration if tenant is too large. For ex. you might not be able to create a sandbox from Production if your capacity is 80 GB and you reached already 80 GB with your Production. Alternatively, you can upgrade capacity.
With Business Central 2021 Wave 2 there is a new page to inspect the chart of accounts.
Search for “Chart of Accounts Overview”.
This new page displays the chart of accounts in a tree structure.
To create a list page with a tree structure a developer would need to make true the property “ShowAsTree” which can be found under Repeater control:
The columns in the Overview page are similar to the ones in the original Chart Of Accounts list page.
The new page is more compact:
less fields: just the Balance, Net Change, “Income/Balance”, “Account Subcategory” “Account Type” and Totaling are available
less lines: “End-Total” lines are out
Let’s have a look at how the “Begin-Total” line looks like for Assets in the classic “Chart of Accounts”
And how the Assets “Begin Total” line looks in the Overview page:
We can see now that the Net Change, Balance, Totaling have been brought into the “Begin Total” row from “End-Total” and the “End Total” row is no longer in the list.
The classic “Chart of Accounts” list page:
The new “Chart of accounts Overview”.
The Overview page does not allow for opening of G/L Account card page.
The Overview page does not allow for editing, inserting or deleting G/L accounts.
But if you want a compact page, with less fields with the option to quickly expand and collapse features for entire groups of accounts, then the new “Chart of Accounts Overview” is a useful alternative.