How to Troubleshoot Dynamics 365 Business Central
Why This Is Happening
I've been in the Business Central trenches for years, and here's the honest truth: Dynamics 365 Business Central troubleshooting is genuinely harder than it looks from the outside. The platform spans an on-premises SQL Server backend, a NAV/BC application server tier, an Azure-hosted SaaS layer, Azure Active Directory (now Microsoft Entra ID) authentication, plus a browser-based web client , and any one of those layers can go sideways at any moment.
The scenario I see most often: a finance user shows up on a Monday morning, clicks "Post" on a sales invoice they've been editing for an hour, and gets hit with something like "The transaction cannot be completed because it will cause inconsistencies in the G/L Entry table." Or the whole web client refuses to load past the spinning circle. Or suddenly nobody can sign in and you get Error AADSTS50020 staring back at you. Management is waiting on month-end numbers, and the error message gives you absolutely nothing useful to work with.
Here's why these problems happen so frequently with Business Central specifically. First, the product went through a massive architectural shift from Dynamics NAV , the old Windows client is largely dead, and everything runs through a browser now. Second, SaaS tenants are updated automatically by Microsoft (major updates twice a year, minor updates monthly), which means your carefully customized extensions can break overnight when a base application object changes. Third, the integration surface area is enormous: Power Automate flows, Dataverse sync, Power BI datasets, external APIs, each one is a potential point of failure.
Common root causes I see across Business Central connection errors, posting failures, and performance problems fall into a few buckets:
- Authentication failures, Entra ID conditional access policies, expired certificates, misconfigured OAuth 2.0 app registrations
- Extension conflicts, a published AL extension modifying a table or codeunit that collides with the base app after an update
- Permission set mismatches, a user missing a specific table permission or object permission, often surfacing after role changes
- Database deadlocks and long-running transactions, especially common during batch jobs like inventory adjustments or aged accounts runs
- Browser and cache corruption, the BC web client is particular about cached service worker data
- Incorrect environment URL or tenant routing, especially when companies have multiple BC environments (sandbox vs. production)
Microsoft's error messages in Business Central are notoriously terse. You get a dialog with a vague one-liner and a "Show Details" link that dumps a raw AL stack trace, which is useful only if you know what you're looking at. Most end users just screenshot it and send it to IT, losing the actual technical detail you need. I'll show you exactly where to dig for the real information.
The Quick Fix, Try This First
Before you spend an hour in Event Viewer or PowerShell, run through this checklist. In my experience, about 40% of all Business Central troubleshooting calls I get are solved within five minutes by one of these three things.
Step 1, Hard-clear the browser cache. Business Central's web client uses service workers and caches aggressively. A stale cache after a BC update is responsible for a shocking number of "white screen" and "spinning forever" complaints. Don't just hit Ctrl+Shift+Delete, you need to specifically clear service worker data.
In Chrome or Edge: open DevTools (F12), go to Application → Storage, click "Clear site data" with all boxes checked. Then close every browser tab with a BC URL, reopen, and try again.
Step 2, Check the Microsoft 365 / Azure service health dashboard. Go to admin.microsoft.com → Health → Service health. If Business Central is showing a yellow or red advisory, the fix is: wait. Microsoft incidents affecting SaaS tenants will resolve on their end; nothing you do locally will speed that up.
Step 3, Sign out completely and sign back in. Navigate to your BC URL (typically https://businesscentral.dynamics.com/[tenantID]), click your profile avatar top-right, choose Sign out, then sign back in with your Microsoft 365 credentials. This forces a fresh OAuth 2.0 token exchange with Entra ID and clears a surprisingly large number of AADSTS-class authentication errors.
If you're on on-premises Business Central (BC 2023 Wave 1 or earlier on-prem), the equivalent is to clear the NavUserPassword token cache or restart the Business Central Server service (NST) via Services.msc on your application server. The service is named MicrosoftDynamicsNavServer$[InstanceName].
NavErrorCode in that dump is searchable in Microsoft's AL language reference and community forums and will save you an hour.
Before you touch any settings, you need to know exactly what failed. Business Central SaaS tenants have built-in telemetry you can query through Application Insights, and this is where real Dynamics 365 Business Central troubleshooting starts.
In the Business Central Admin Center (aka.ms/bcadmincenter), navigate to your environment, go to Telemetry, and copy your Application Insights connection string. If you haven't set one up yet, you need to do that first, go to Environment → Application Insights Key and paste in a key from an Azure Application Insights resource you control.
Once telemetry is flowing, open Azure Portal → Application Insights → Logs and run this KQL query to see the last 50 errors:
traces
| where timestamp > ago(1h)
| where severityLevel >= 3
| where customDimensions has "BusinessCentral"
| project timestamp, message, customDimensions
| order by timestamp desc
| take 50
For faster, no-code diagnostics, go to Business Central Admin Center → Environments → [Your Env] → Support → Collect Troubleshooting Information. This generates a ZIP file with session logs, extension list, and environment metadata, exactly what Microsoft Support needs if you escalate.
You should see a list of error messages with AL object references. Note the AL Object Type (Page, Codeunit, Table) and Object ID, this tells you whether the error is in the base application, a Microsoft extension, or a third-party customization you can actually fix.
Authentication errors are the most common Business Central connection error I see in enterprise environments. They almost always involve Microsoft Entra ID (formerly Azure Active Directory) and show up as error codes like AADSTS50020, AADSTS70011, AADSTS65001, or a flat "You are not authorized to access this page."
Here's the diagnostic path. First, have the affected user navigate to aka.ms/mysignins and check recent sign-in activity. If their last sign-in to Business Central shows "Failure" with an Entra ID error code, that's your starting point.
For AADSTS50020 (user account from an identity provider doesn't exist in the tenant): the user's UPN in Microsoft 365 doesn't match what Business Central expects. Go to BC Admin Center → Users and verify the user's email matches their M365 UPN exactly, including domain suffix.
For AADSTS65001 (user hasn't consented to the BC app): an admin must grant consent. Go to Azure Portal → Entra ID → Enterprise Applications → Dynamics 365 Business Central → Permissions → Grant admin consent for [TenantName].
For Business Central permission denied errors inside the app (after login succeeds): open BC → Settings (gear icon) → My Settings, check the Role, then go to Search → Permission Sets and verify the user has the correct permission set assigned. The minimum for finance work is typically D365 BUS FULL ACCESS. You can test exactly what's failing by running the Permission Diagnostic: search for "Permission Diagnostic" in the BC search bar and enter the user's name plus the specific table or object throwing the error.
-- Check effective permissions for a user (on-prem, run in SQL)
SELECT TOP 100 *
FROM [dbo].[Access Control]
WHERE [User ID] = 'DOMAIN\username'
ORDER BY [Role ID]
After correcting the permission set, sign the user out and back in, permission changes don't always take effect on an active session.
Posting errors are the ones that cause the most panic because they block actual business transactions. A Business Central posting error typically looks like: "The transaction cannot be completed because it will cause inconsistencies in the [TableName] table" or "You cannot post because [Field] is not filled in on [Record]."
The most important thing to understand: these errors are almost always data integrity problems, not software bugs. Business Central's posting routines are deliberately strict, they validate every field relationship before writing to the general ledger.
Here's my standard diagnostic flow for posting errors:
1. Read the full error message carefully. It usually names the exact field and record. If it says "Quantity (Base) must be positive in Item Ledger Entry," that's telling you an inventory adjustment has gone negative somewhere upstream.
2. Check the document's Dimensions. A huge percentage of posting errors I see come from missing or invalid dimension values. Open the document, click Related → Dimensions and look for any dimension that has a value code set to blank when the dimension setup requires a value. Go to Search → General Ledger Setup and review the mandatory dimension configuration.
3. Run the consistency check for inventory. Go to Search → Adjust Cost, Item Entries and run it for the affected items. If there's a cost discrepancy that's blocking posting, this often resolves it.
4. For "Out of balance" errors, navigate to Search → Check G/L Entries to identify which posting group or G/L account is missing its counterpart configuration.
If you're on-premises, you can also query the posting error directly from SQL:
SELECT TOP 20 *
FROM [dbo].[Posted Sales Invoice Header]
WHERE [No_] IN (
SELECT [Document No_] FROM [dbo].[G_L Entry]
WHERE [Source Code] = 'SALESPOST'
)
ORDER BY [Posting Date] DESC
If the same document keeps failing no matter what you fix, delete it and re-enter it. That sounds brutal, but sometimes a document gets into a partially-written state during a session timeout and it's faster to start clean than to chase corrupted field values.
If your Business Central slow performance or crashing problem started right after a Microsoft update or after someone published a new extension, you're almost certainly looking at an AL extension conflict. This is one of the more technically involved areas of Business Central troubleshooting.
Start by checking which extensions are installed: go to Search → Extension Management. Look at the Publisher column, anything not published by "Microsoft" is a third-party or custom extension. Note the version numbers.
To isolate whether an extension is the culprit, temporarily disable non-Microsoft extensions one at a time. Click the three-dot menu next to the extension and choose Uninstall (not Unpublish, uninstall just disables it for users, it doesn't remove the code). Test after each uninstall to see if the problem goes away.
For developers looking at the AL runtime errors directly, open the AL Language extension in VS Code, connect to your environment via launch.json, and use the built-in AL Profiler to capture a performance snapshot. The profiler output shows exactly which AL methods are taking the most time and which objects are throwing exceptions.
Check the extension's event subscriptions, a common source of Business Central performance problems is an event subscriber that fires on OnBeforePost or OnAfterInsert for a high-volume table and runs an expensive query inside. In VS Code:
// Search your extension's AL files for expensive event subscribers
// Look for patterns like this firing on high-volume tables:
[EventSubscriber(ObjectType::Codeunit, Codeunit::"Sales-Post",
'OnBeforePostSalesDoc', '', false, false)]
procedure OnBeforePostSalesDocHandler(...)
If you can't uninstall the extension because it holds critical data, contact the extension publisher with the AL object type and ID from the error telemetry. They'll need to release a compatible version for the BC update wave you're on.
After resolving the extension issue, go to Extension Management → [Extension] → Configure to review any configuration tables the extension owns, sometimes the conflict is actually a missing required configuration value, not a code bug.
Business Central web client not loading, pages timing out, or jobs running for hours when they used to take minutes, these are all performance problems, and they have different root causes depending on whether you're SaaS or on-premises.
For SaaS tenants: navigate to BC Admin Center → Environments → [Env] → Operations. Look at the Scheduled Job Queue Entries log. If you see queue entries stuck in "In Process" status for more than an hour, a job has likely hung and is holding a table lock that's blocking everyone else. Select the stuck entry and choose Set Status to On Hold, then restart it.
To identify long-running queries from inside Business Central, go to Search → Database Locks. This page shows you every active table lock in real time, which session holds it, how long it's been held, and which table is affected. If you see the Item Ledger Entry or G/L Entry table locked for more than a few seconds, a batch job or posting routine is the culprit.
For on-premises Business Central: the performance diagnostics live in Windows Event Viewer and SQL Server. On the Business Central application server, open Event Viewer → Applications and Services Logs → Microsoft → DynamicsNAV → Common → Admin. Event IDs to watch:
Event ID 705 , SQL query exceeded threshold (default: 1000ms)
Event ID 706 , Lock timeout occurred
Event ID 1214, Client connection dropped
Event ID 705 , Reports running over time limit
On the SQL Server side, run this query to find the current blocking chain:
SELECT
blocking_session_id,
session_id,
wait_type,
wait_time / 1000 AS wait_seconds,
SUBSTRING(st.text, (r.statement_start_offset/2)+1,
((CASE r.statement_end_offset
WHEN -1 THEN DATALENGTH(st.text)
ELSE r.statement_end_offset
END - r.statement_start_offset)/2)+1) AS statement_text
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) st
WHERE blocking_session_id > 0
For on-premises NST (Business Central Server) tuning, edit CustomSettings.config on the application server. Key settings affecting performance:
<add key="SqlCommandTimeout" value="00:30:00" />
<add key="MaxConcurrentCalls" value="40" />
<add key="DefaultClientServicesPort" value="7046" />
After changing CustomSettings.config, restart the Business Central Server service. You should see response times improve immediately if a timeout setting was the bottleneck.
Advanced Troubleshooting
If the standard steps above haven't resolved your issue, you're into territory that usually requires admin-level access to either the Microsoft 365 admin center, Azure, or the Business Central Server itself. Here's what to look at.
Analyzing Business Central Errors in Event Viewer (On-Premises)
On your BC application server, open Event Viewer (eventvwr.msc) and navigate to Applications and Services Logs → Microsoft → DynamicsNAV → Common. There are three sub-logs: Admin, Operational, and Debug. Enable Debug logging only temporarily, it's extremely verbose and will fill your disk if left on.
Filter the Admin log for Event ID 1000 (application crashes) and Event ID 705 (slow SQL queries). Right-click the log and choose Filter Current Log, then type the Event ID. Each entry includes the full NAV session ID, which you can cross-reference against the active session list in BC (Search → Sessions) to identify which user triggered it.
Group Policy and Proxy Issues Affecting the Web Client
In corporate environments, Group Policy can block Business Central in ways that are genuinely hard to diagnose. The BC web client requires outbound access to *.dynamics.com, login.microsoftonline.com, and several Azure CDN endpoints. If your organization's proxy or firewall is intercepting TLS on those endpoints, you'll get cryptic errors like "Service Unavailable" or a blank white page with no error.
Test the proxy by opening PowerShell as the affected user and running:
Test-NetConnection -ComputerName "businesscentral.dynamics.com" -Port 443
Invoke-WebRequest -Uri "https://businesscentral.dynamics.com" -UseDefaultCredentials
If the first command shows TcpTestSucceeded: False, you have a network-layer block. Work with your network team to whitelist the BC required endpoints.
Resetting a Broken Business Central Environment (SaaS)
For SaaS sandbox environments that are completely broken after a bad extension publish or data corruption, the nuclear option is an environment reset. In BC Admin Center → Environments → [Env] → Operations → Delete, but don't do this for production. For production, use Restore to roll back to a Microsoft-managed backup point (BC SaaS retains 30 days of backups). Choose Restore → Select a point in time. This brings back the entire database to that moment.
Dataverse Integration Errors
If Business Central's sync with Dataverse (Power Platform) is failing, navigate to Search → Dataverse Connection Setup and run Test Connection. If it fails with a 401 or "Integration user not found" message, the integration user in Dataverse may have been disabled. Go to Power Platform Admin Center → Environments → [Env] → Settings → Users, find the integration user (named something like Business Central Integration), and re-enable it.
Escalate to Microsoft Support when: your production environment is completely inaccessible and the M365 Service Health dashboard shows no incident; you have confirmed data loss or corruption in posted ledger entries; a Microsoft-published extension (not a third-party) is throwing errors; or you need a point-in-time restore and the Admin Center restore option is greyed out. Before you call, collect the Troubleshooting Information ZIP from BC Admin Center and note your Environment Name, Tenant ID (from Azure Portal), and the exact timestamp (UTC) of the first failure, Support will ask for all of these immediately.
Prevention & Best Practices
The best Dynamics 365 Business Central troubleshooting is the kind you never have to do. After years of watching the same problems recur, here's what the organizations with the fewest BC incidents actually do differently.
Set up Application Insights telemetry before you need it. I cannot stress this enough. When something breaks at 4 PM on a Friday and you have no telemetry configured, you're flying blind. Set up an Azure Application Insights resource, connect it to every BC environment (both production and sandbox), and configure a simple alert rule for error spike anomalies. The telemetry is free up to 5 GB/month and the alerting will catch problems before users report them.
Test extensions in sandbox before every Microsoft update wave. Business Central SaaS updates drop twice a year (Wave 1 in April, Wave 2 in October) plus monthly minor updates. Microsoft gives you a 30-day preview period where your sandbox gets updated first. Use it. Run your end-to-end business scenarios on the updated sandbox before the production update applies. If an extension breaks in preview, you have 30 days to get the publisher to release a fix, versus zero days if you find out on go-live day.
Document your permission sets and review them quarterly. Permission bloat and permission gaps are both real problems. Run the Permission Set by User report from BC (Search → Permission Sets → Reports) quarterly and review it against your actual user roles. Remove permission sets from users who've changed roles.
Monitor Job Queue Entries actively. Set up a Power Automate flow that alerts you when a Job Queue Entry fails. In BC, go to Search → Job Queue Entries, find your critical scheduled jobs (cost adjustment, aged accounts, integration sync), and set the Maximum No. of Attempts to Run to 3 and Rerun Delay to 5 minutes. This auto-recovers transient failures without human intervention.
- Enable Application Insights telemetry on all environments today, it takes 10 minutes and saves hours later
- Keep a tested browser (Edge or Chrome, cleared cache) set aside specifically for BC access to avoid extension conflicts affecting the web client
- Schedule the Adjust Cost, Item Entries job to run nightly, stale costs silently cause posting errors days later
- Export a list of all installed extensions monthly and track version numbers, knowing what changed between "it worked" and "it broke" is half the battle
Frequently Asked Questions
Why does Business Central show a white screen or keep spinning and never load?
This is almost always a browser cache or service worker problem. Open Chrome or Edge DevTools (F12), go to Application → Storage → Clear site data, close all BC tabs, and try again in a fresh browser window. If that doesn't fix it, try an InPrivate/Incognito window, if it loads there but not in your normal browser, a browser extension is the culprit. Also check the Microsoft 365 Service Health dashboard for any active Business Central incidents before spending more time troubleshooting.
I get "You do not have permission to read the Item Ledger Entry table", how do I fix this?
This is a Business Central permission denied error tied to a missing table permission. In BC, go to Search → Permission Sets, find the permission set assigned to that user's role, and add Read permission for Object Type Table, Object ID 32 (Item Ledger Entry). Alternatively, assign the user the ITEM-EDIT permission set which includes the correct table permissions. Permission changes take effect on the user's next login, have them sign out and back in to confirm.
Business Central posting errors started after a Microsoft update, is there a rollback?
For SaaS, there's no direct rollback of the BC application version, Microsoft controls the update schedule. However, if the posting errors are caused by a third-party extension incompatible with the new version, you can uninstall that extension temporarily from Extension Management while you wait for a compatible version from the publisher. If you suspect a Microsoft-published extension is the issue, open a support case with Microsoft through the Admin Center, they can expedite a hotfix for breaking changes in their own extensions.
How do I find which user caused an error in Business Central?
On SaaS, go to your Azure Application Insights resource and query the traces table, each entry includes a customDimensions.usertelemetryId field that maps to a specific user. You can also check Search → Change Log Entries in BC directly, which records who changed which fields and when. For critical operations like posting, the posted document header always stores the user ID in the User ID field on the posted record, check the Posted Sales Invoice or Posted Purchase Invoice header for that field.
Can Business Central slow performance be fixed without calling IT or Microsoft?
Often, yes. The most user-accessible fix is to check for stuck Job Queue Entries: go to Search → Job Queue Entries and look for any entry with status In Process that's been running for more than 30 minutes. Set it to On Hold, then back to Ready to restart it. Also check Search → Database Locks to see if a specific session is holding a table lock, if you find one, note the Session ID and go to Search → Sessions to delete that session. These two steps resolve the majority of sudden Business Central slowdowns.
My Dataverse / Power Platform integration keeps disconnecting from Business Central, how do I stabilize it?
The most common cause is an expired app registration secret in Azure. Go to Azure Portal → Entra ID → App Registrations → [Your BC Integration App] → Certificates & Secrets and check the expiry date on your client secrets. If one has expired or is about to expire, create a new secret, then update it in BC → Search → Microsoft Entra Application List under your integration app entry. Also verify the integration service user in Dataverse is still licensed and active, a license reassignment during a Microsoft 365 admin cleanup sometimes accidentally removes the Dataverse license from the integration account.