Echelon/NES Smart Meters – possible 0x0B / 0x0C bugfix?

Bugfix

Thanks to Reto (info@makerspace-reinach.ch) we might have a solution for a long standing bug.

If you are having issues getting reliable readings from the meter/module and getting errors / Meter responses like these from the module:

  • 0x0B Authentication failure
  • 0x0C Invalid sequence number…

Typically from these requests:

  • 0x30 Full Table Read 0x0017 BT23 Current Register Data
  • 0x30 Full Table Read 0x001C BT28 Present Register Data

…then you know have an option to update the software. Make sure to study the readme before fetching updated software from our GitHub (https://github.com/DabblerDK/MEP-SW-ESP32).

As I don’t have a meter I can test this on anymore (and even if I did have such a meter), this updated software is provided as is – ALL USE IS ON YOUR OWN RISK :-).

Please do let us know if you had issues before and this updated software solved it!

No online help in Microsoft Dynamics Business Central 2019 wave 1 (aka BC14) On-Premises

Dynanmics 365 Business Central logo

Did you also wonder where the English and Danish (and probably other languages as well) help pages went?

In Microsoft Dynamics Business Central 2019 wave 1 aka Business Central 14 (and possible newer versions) after the RTM-release in April 2019, the help simply does not work out-of-the-box anymore.

It seems Microsoft are more focused on the SaaS solution these days and the On-Premise version is suffering a bit from it.

Note: I’ve actually contacted Microsoft about these help issues, but due to the SaaS focus and the help beeing a community effort now (see https://docs.microsoft.com/en-us/dynamics365/business-central/dev-itpro/help/contributor-guide), they are actually NOT planning to fix this! Also they are trying to reduce the size of the install DVD.
That is an unofficial answer though, so if we all report it, they might change their minds :-). For now this is something you need to repair in your installation yourself – i.e. by following this blog post…

This is actually two “errors”:

(1) If you have selected the en-US language and you try to open the help using the icon or CTRL+F1 you get this:

Server Error in '/' Application.
Runtime Error
Server Error in ‘/’ Application. – Runtime Error

…actually this is quite easily fixed. The English language is per default installed in “C:\inetpub\wwwroot\DynamicsNAV140Help\help\en”, but BC is trying to open it from “C:\inetpub\wwwroot\DynamicsNAV140Help\help\en-US”. So let us just create a link:

C:>cd C:\inetpub\wwwroot\DynamicsNAV140Help\help

C:\inetpub\wwwroot\DynamicsNAV140Help\help>mklink /d en-US en
symbolic link created for en-US <<===>> en

C:\inetpub\wwwroot\DynamicsNAV140Help\help>dir
Volume in drive C has no label.
Volume Serial Number is C6AF-373F
Directory of C:\inetpub\wwwroot\DynamicsNAV140Help\help
06/23/2020 07:03 AM
.
06/23/2020 07:03 AM ..
03/30/2020 10:53 AM da-DK
03/30/2020 10:53 AM en
06/23/2020 07:03 AM en-US [en]
01/31/2020 07:11 AM 22,060 feedback.js
03/30/2020 10:53 AM local
01/31/2020 07:11 AM 79 shortcutCold.gif
2 File(s) 22,139 bytes

…problem solved 🙂

2020-10-05 GL: Please see Jani Kivilähde’s comment below: “For fix (1), the use of SYMLINK breaks the search in Help Server. Windows Search does not traverse SYMLINKs.”. So the correct fix is – as mentioned by Jani – to rename or copy the folder.

(2) If you on the other hand have selected the da-DK (Danish) language – or presumable any other language besides en-US, you’ll get this error:

404 - File or directory not found.
404 – File or directory not found.

…and if you have a look at the server in the destination folder “C:\inetpub\wwwroot\DynamicsNAV140Help\help\da-DK”, you’ll discover why:

Slim da-DK help (missing files)
Slim da-DK help (missing files)

Actually, I’ve checked most versions of the Danish install DVD, an the .cab-file with help files are only included in full on the RTM version – NOT in all the CU versions (you’ll find the .cab-file on the DVD in the folder “Installers\DK\WebHelp\DynamicsNAV140Help\help\da-DK”). In the RTM-version the .cab-file is above 4MB in file size, while it is only 18KB on the CU versions.

So this solution is – either build your own html-files from the GitHub repository mentioned in the link I mentioned in the beginning of this post (https://docs.microsoft.com/en-us/dynamics365/business-central/dev-itpro/help/contributor-guide), or (preferable) download and copy the files from the RTM DVD.

Note: The latter solution is probably the preferred one, because you then get the exact help files matching your BC version. The GitHub repository might contain functionality not yet introduced in your major version.

Another note: the .cab-file or “Cabinet File” is actually a .zip-file, so you can rename it to .zip to open it in Windows or simply open it with 7-Zip or similar archiving utility. And then copy the contents to the correct language help folder.

Yet another note: In the “old days” where this worked out-of-the-box, the translated help files was typically NOT updated with each CU release. That makes sense as CUs rarely contains a lot of new functionality and it is probably quite expensive to keep the translations updated.

And a final note: I’ve not confirmed this issue for Microsoft Business Central 2019 wave 2 aka BC15 and/or 2020 wave 1 aka BC16. But as this might be caused by Microsoft prioritizing SaaS, it might be the same story in all versions after BC14. Hopefully we will be able to extract the help from the RTM versions…

As always: These fixes comes with NO warranty. Use this completely at your own risk and costs. Also it would probably be a very good idea to make a copy of the existing installation before overwriting or adding anything.

Extra hint – can you search in your help? If not, did you remember to:

  • enable Windows Search on your IIS help server (WindowsServer Manager)
  • verify that the Windows Indexing Service is running (Windows Task Manager)
  • verify the help folder is included in the indexing (Windows Control Panel)

Installing Microsoft Dynamics 365 Business Central with AzureSQL

Dynanmics 365 Business Central logo

As described here, it can be kind of a Catch-22 to try to install Microsoft Dynamics 365 Business Central if you don’t have a local SQL Server, but want to use AzureSQL.

Although I know the approach in the before mentioned Kine Info blog post works, I came across a easier solution during my struggles with this issue.

Although the installer setup.exe does not have a “Postpone Server Startup” setting in the GUI, it actually support it.

You just need to create a configuration and hit Save before actually starting the installation. You can do that when you finish filling out all the settings on the setting page (the one with port numbers, database server and database name etc.). After you saved the configuration, close the setup.exe installer.

Now open the XML file you saved, locate the “PostponeServerStartup” setting and change it’s default value of “false” to “true”:

<Parameter ID="PostponeServerStartup" Value="true"/>

Now restart setup.exe and load the configuration – and start the installation. The installer will not try to start the service tier, so it won’t fail that and roll back the installation.

We can only hope that Microsoft at some point will add this option to the setup.exe GUI :-).

2020-02-28 Update: I’ve suggested it to Microsoft. It is not a high priority issue (because of the above described workaround). For anybody interested it has been logged with internal Microsoft ID 346773.

The task cannot be run because the user account that is assigned to run the task has been altered

Microsoft Dynamics NAV logo

Have you tried to rename a company (from the Companies page or from PowerShell (Rename-NAVCompany cmdlet) in Microsoft Dynamics NAV 2018 and you get this error: “The task cannot be run because the user account that is assigned to run the task has been altered”, you are hit by a side effect of a new Service Tier Setting.

A quick google of the error message yields a few results – especially this one: https://forum.mibuso.com/discussion/72652/job-queue-with-task-scheduler-and-user-id… which suggest that it has something to do with the Service Tier Setting “EnableUserConsistencyValidationOnTasks”.

If we look at Microsoft description of that Service Tier Setting at https://docs.microsoft.com/en-us/dynamics365/business-central/dev-itpro/administration/configure-server-instance, we see this description:

Specifies whether user consistency checks are done on tasks. Setting this to true helps guard against impersonation of users in tasks. When enabled, only the user who created the task can edit the task. If a task is edited by different user account, an error similar to the following occurs: The task cannot be run because the user account that is assigned to run the task has been altered. The task has been canceled.

Default: true

Dynamically Updatable: No

…so if this protection is not important to you – you can easily work around the error by setting this key to false. If this protection is important to you, you should off cause just set it to false while renaming the company and then set it back to true again.

Have a Merry Christmas and a Happy New Year!

2 + 2 <> 4

Microsoft Dynamics C5 logo

In the past I worked a lot with Microsoft Dynamics C5 and I just stumbled across an old quirk when you add database to a large existing database. You simply does not always get what you pay for.

Registered Microsoft Dynamics C5 partners can find this information in Danish on PartnerSource following this link: https://mbs.microsoft.com/partnersource/denmark/pricing-ordering/pricing-ordering-news/C52012DatabaseIntervalsExplained

…but the rest of you can get part of it here :-).

For Microsoft Dynamics C5 you purchase additional database in packages of these sizes: +25MB, +125MB, +250MB, +500MB and +2,500MB. Unfortunately internally the Microsoft Dynamics C5 kernel and license codes handles additional database size like this:

Database intervalIncrementsNotes
0 – 45MB+5MB45MB is included in the initial Microsoft Dynamics C5 license
45 – 120MB+5MB
120 – 2,020MB+25MB
2,020 – 12,020MB+100MB
12,020 – 112,020MB+1,000MB

This actually means that if you have a database of 2,020MB and purchases +25MB, Microsoft Dynamics C5 will state the available space as 2,120MB, while your license states only 2,045MB.

Actually – according to the above mentioned information link to PartnerSource, you are NOT allowed to use more database than the license states. So you should add an extra database package when you reach 2,045MB in the above example.

If you don’t do that, this will also cause some huge confusion when you reach 2,120MB – because you might then add another +25MB and you’ll get NOTHING. The license will say 2,070MB, but Microsoft Dynamics C5 will still state it as 2,120MB…

Bonus info.: How much database storage can you purchase to a Microsoft Dynamics C5 installation? Exactly 112,020MB. After this the Microsoft Dynamics C5 kernel will stop calculating the DB size and you will not be required to purchase extra database license (but you are not likely to ever reach this limit 🙂 ).

Note: To my knowledge all of this is also true for Microsoft XAL because it was build on the same kernal as Microsoft Dynamics C5

SUPER – but with no access to the role center?

Dynanmics 365 Business Central logo

So you think you are SUPER, but you are not able to log in to your Microsoft Dynamics 365 Business Center using the web client? (because of some access denied error).

Well… This is not a very common error, because these needs to be true to trigger it:

  • You are trying to login using the web client
  • Your installation is using a (partner) license with an expiration date, and the expiration dates is less than a month away (so you get a warning about it on every login (in web-, windows- and development-clients)
  • Your permissions are created specific on one or more companies only – so you don’t have i.e. BASIC without a company name

Just after entering your credentials, you’ll get the warning about the expiring license:

Caution: Your program license expires in 20 days.

…and as soon as you click OK you get this (sorry about the mixup of Danish and English here – maybe that is also a part of the bug? Translation is in the image description below):

Something went wrong. You don’t have permission to use the Role Center ‘SALES ORDER PROCESSOR’. Date and time: Fri, 01 Nov 2019 14:48:45 GMT. Go back home.

Your configuration is valid and works for the windows client, but unfortunately the web client have a bug preventing this from working.

This is a platform bug I’ve found in Microsoft Dynamics 365 Business Center 13 with CU 7 (i.e. BC13 CU7 which is the October 2018 release with cumulative update 7). I’ve NOT tested other versions, but I believe that it is also an issue in the latest CU for BC13 and possible also a bug in BC14 and BC15.

This bug HAS been reported to Microsoft and will be fixed in later CUs of the respective BC versions. It was assigned bug ID 332507.

Workarounds while waiting for the fixed cumulative update?

  • Use Windows client. It is not affected by this bug
  • You can add your permission sets without a company name. Maybe even create a new one that does not really grant you access to companies you should not have access to – or simply just add “BASIC”. As long as it is without company name the web client will work
  • Avoid using a license that is about to expire. Re-new your license

Note: When hit by this error, you will also see these event log entries on the server (sorry – also partly in Danish):

Server instance: xxxxxx
 Category: Security
 ClientSessionId: 5e339103-92dd-4ba3-b4cc-874531ba692b
 ClientActivityId: 1b071e5f-13c4-4352-9a3d-a7835ca50d9a
 ServerSessionUniqueId: 759dfb07-9b76-4eeb-bf7c-8a77cb0379d1
 ServerActivityId: 585927d0-5273-43b7-9c65-cdcc612115bd
 EventTime: 11/01/2019 14:47:44
 Message (NavPermissionException): RootException: NavPermissionException
 You do not have the following permissions on TableData Profile: Read.
 To view details about your permissions, see the Effective Permissions page. To report a problem, refer to the following server session ID: '85'.
 CallerStackTrace:
    at Microsoft.Dynamics.Nav.Runtime.PermissionSetBase.VerifyPermissions(NavApplicationObjectBase securableObject, PermissionMask permissionMask, LimitedUserPermissionChecker limitedUserPermissionChecker, Func2 checkTableEmpty, PermissionMask additionalIndirectPermissions, Boolean countAsLimitedUserAllowedTable)    at Microsoft.Dynamics.Nav.Runtime.RecordImplementation.VerifyPermissions(PermissionMask permissionMask, Boolean checkForEmptyTable)    at Microsoft.Dynamics.Nav.Runtime.RecordImplementation.IssueFindRequest(DataError errorLevel, Boolean reversed, FindType findType, Boolean useCache)    at Microsoft.Dynamics.Nav.Runtime.RecordImplementation.FindFirstRecord(DataError errorLevel)    at Microsoft.Dynamics.Nav.Runtime.NavRecord.ALFindFirst(DataError errorLevel)    at Microsoft.Dynamics.Nav.Runtime.ProfileTableDataHandler.<GetAllItems>d__1.MoveNext()    at System.Linq.Enumerable.<ConcatIterator>d__591.MoveNext()
    at Microsoft.Dynamics.Nav.Runtime.EagerVirtualDataProvider.TryGetByPrimaryKey(RecordIdProviderRequest request, ReadOnlyRecordBuffer& recordBuffer)
    at Microsoft.Dynamics.Nav.Runtime.DataAccess.InternalTryGetByPrimaryKey(RecordIdCacheRequest request, MutableRecordBuffer& recordBuffer)
    at Microsoft.Dynamics.Nav.Runtime.DataAccess.TryHandleAsPrimaryKeyLookup(DataCacheRequest request, Boolean cacheOnly, MutableRecordBuffer& recordBuffer)
    at Microsoft.Dynamics.Nav.Runtime.DataAccess.InnerFind(FindCacheRequest request, Boolean fromPosition, Func`1 onlyCurrentKeyNeededForNextRow)
    at Microsoft.Dynamics.Nav.Runtime.RecordImplementation.IssueFindRequest(DataError errorLevel, Boolean reversed, FindType findType, Boolean useCache)
    at Microsoft.Dynamics.Nav.Runtime.RecordImplementation.FindFirstRecord(DataError errorLevel)
    at Microsoft.Dynamics.Nav.Runtime.NavRecord.ALFindFirst(DataError errorLevel)
    at Microsoft.Dynamics.Nav.XmlMetadata.NavConfigurationProfile.GetProfileRoleCenterId(NavProfileKey profile)
    at Microsoft.Dynamics.Nav.XmlMetadata.MetadataProvider.GetHomepageID(NavProfileKey profileKey)
    at Microsoft.Dynamics.Nav.XmlMetadata.MetadataProvider.GetNavigationFrame(Boolean applyPersonalization, NavProfileKey profileKey)
    at SyncInvokeGetNavigationFrame(Object , Object[] , Object[] )
    at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
    at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.RunInTransactionCombinator(ServiceOperation innerOperation, NSServiceBase serviceInstance, MethodBase syncMethod, Object[] inputs, Object[]& outputs)
    at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.<>c__DisplayClass24_1.b__1(NSServiceBase serviceInstance, Object[] inputs, Object[]& outputs)
    at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.TransientErrorRetryCombinator(ServiceOperation innerOperation, NSServiceBase serviceInstance, MethodBase syncMethod, Object[] inputs, Object[]& outputs)
    at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.<>c__DisplayClass24_1.b__1(NSServiceBase serviceInstance, Object[] inputs, Object[]& outputs)
    at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.ErrorMappingCombinator(ServiceOperation innerOperation, NSServiceBase serviceInstance, MethodBase syncMethod, Object[] inputs, Object[]& outputs)
    at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.<>c__DisplayClass24_1.b__1(NSServiceBase serviceInstance, Object[] inputs, Object[]& outputs)
    at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.PushPopCombinator(ServiceOperation innerOperation, NSServiceBase serviceInstance, MethodBase syncMethod, Object[] inputs, Object[]& outputs)
    at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.<>c__DisplayClass24_1.b__1(NSServiceBase serviceInstance, Object[] inputs, Object[]& outputs)
    at Microsoft.Dynamics.Nav.Service.ServiceOperationTracer.TraceScopeCombinator(Category telemetryCategory, ServiceOperation innerOperation, NSServiceBase serviceInstance, MethodBase syncMethod, Object[] inputs, Object[]& outputs)
    at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.<>c__DisplayClass24_1.b__1(NSServiceBase serviceInstance, Object[] inputs, Object[]& outputs)
    at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.<>c__DisplayClass9_0.b__0()
    at Microsoft.Dynamics.Nav.Runtime.NavPerformanceCounterSetter.UpdatePerformanceCountersWithAverageServiceOperationDuration(Stopwatch stopWatch, Action action)
    at Microsoft.Dynamics.Nav.Runtime.NavPerformanceCounterSetter.UpdatePerformanceCountersWithAverageServiceOperationAction(Action action, NavSession session)
    at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.PerformanceCounterCombinator(ServiceOperation innerOperation, NSServiceBase serviceInstance, MethodBase syncMethod, Object[] inputs, Object[]& outputs)
    at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.<>c__DisplayClass24_1.b__1(NSServiceBase serviceInstance, Object[] inputs, Object[]& outputs)
    at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.InitClientTelemetryIdsCombinator(ServiceOperation innerOperation, NSServiceBase serviceInstance, MethodBase syncMethod, Object[] inputs, Object[]& outputs)
    at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.<>c__DisplayClass24_1.b__1(NSServiceBase serviceInstance, Object[] inputs, Object[]& outputs)
    at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.TlsClearCombinator(ServiceOperation innerOperation, NSServiceBase serviceInstance, MethodBase syncMethod, Object[] inputs, Object[]& outputs)
    at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.<>c__DisplayClass24_1.b__1(NSServiceBase serviceInstance, Object[] inputs, Object[]& outputs)
    at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
    at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
    at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)
    at System.ServiceModel.Dispatcher.MessageRpc.Wrapper.Resume(Boolean& alreadyResumedNoLock)
    at System.ServiceModel.Dispatcher.ThreadBehavior.ResumeProcessing(IResumeMessageRpc resume)
    at Microsoft.Dynamics.Nav.Runtime.NavSynchronizationContext.<>c__DisplayClass1_0.b__0(Object state)
    at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
    at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
    at System.Threading.ThreadPoolWorkQueue.Dispatch()
 ProcessId: 21660
 Tag: 00000XO
 ThreadId: 26
 CounterInformation: 
Der opstod fejl under forsøg på adgang til webstedet 
 Type: Microsoft.Dynamics.Nav.Types.NavPermissionException
 Message: You do not have the following permissions on TableData Profile: Read.
 To view details about your permissions, see the Effective Permissions page. To report a problem, refer to the following server session ID: '85'.
 StackTrace:
    ved Microsoft.Dynamics.Nav.Client.ConnectionStateManager.CallServer[T](BeginCallServerMethod beginCallServerMethod, EndCallServerMethod1 endCallServerMethod, ServerCallOptions options) i S:\Depot\Platform-Core\platform\client\Shared\Prod.Client.ServiceConnection\ConnectionStateManager.cs:linje 145    ved Microsoft.Dynamics.Nav.Client.ServiceConnection.CallServer[T](BeginCallServerMethod beginCallServerMethod, EndCallServerMethod1 endCallServerMethod) i S:\Depot\Platform-Core\platform\client\Shared\Prod.Client.ServiceConnection\ServiceConnection.cs:linje 2020
    ved Microsoft.Dynamics.Nav.Client.MetadataHandler.GetNavigationFrame(Boolean applyPersonalization, Boolean getNavigationFrameFromServer) i S:\Depot\Platform-Core\platform\client\Shared\Prod.Client.ServiceConnection\MetadataHandling\MetadataHandler.cs:linje 559
    ved Microsoft.Dynamics.Nav.Client.Web.NavWebBuilderSessionInitializer.NavigationServiceNavigationRootNeeded(Object sender, Object e) i S:\Depot\Platform-Core\platform\client\web\Prod.Client.WebCommon\NavBuilder\NavWebBuilderSessionInitializer.cs:linje 48
    ved Microsoft.Dynamics.Framework.UI.Web.ResponseManager.<>c__DisplayClass23_0.b__3() i S:\Depot\Platform-Core\platform\client\web\Prod.Client.Web\Callbacks\ResponseManager.cs:linje 175
    ved Microsoft.Dynamics.Framework.UI.LogicalOperationInvoker.<>c__DisplayClass21_0.b__0() i S:\Depot\Platform-Core\platform\client\Shared\Prod.ClientFwk\Threading\LogicalOperationInvoker\LogicalOperationInvoker.cs:linje 178
    ved Microsoft.Dynamics.Framework.UI.LogicalOperationInvoker.InvokeAndHandleExceptions(Func`1 action, IExceptionHandler exceptionHandler) i S:\Depot\Platform-Core\platform\client\Shared\Prod.ClientFwk\Threading\LogicalOperationInvoker\LogicalOperationInvoker.cs:linje 415
 Source: Microsoft.Dynamics.Nav.Client.ServiceConnection----------------------------------
 Type: Microsoft.Dynamics.Nav.Types.NavPermissionException
 Message: You do not have the following permissions on TableData Profile: Read.
 To view details about your permissions, see the Effective Permissions page. To report a problem, refer to the following server session ID: '85'.
 StackTrace:
    at Microsoft.Dynamics.Nav.Runtime.PermissionSetBase.VerifyPermissions(NavApplicationObjectBase securableObject, PermissionMask permissionMask, LimitedUserPermissionChecker limitedUserPermissionChecker, Func2 checkTableEmpty, PermissionMask additionalIndirectPermissions, Boolean countAsLimitedUserAllowedTable)    at Microsoft.Dynamics.Nav.Runtime.RecordImplementation.VerifyPermissions(PermissionMask permissionMask, Boolean checkForEmptyTable)    at Microsoft.Dynamics.Nav.Runtime.RecordImplementation.IssueFindRequest(DataError errorLevel, Boolean reversed, FindType findType, Boolean useCache)    at Microsoft.Dynamics.Nav.Runtime.RecordImplementation.FindFirstRecord(DataError errorLevel)    at Microsoft.Dynamics.Nav.Runtime.NavRecord.ALFindFirst(DataError errorLevel)    at Microsoft.Dynamics.Nav.Runtime.ProfileTableDataHandler.<GetAllItems>d__1.MoveNext()    at System.Linq.Enumerable.<ConcatIterator>d__591.MoveNext()
    at Microsoft.Dynamics.Nav.Runtime.EagerVirtualDataProvider.TryGetByPrimaryKey(RecordIdProviderRequest request, ReadOnlyRecordBuffer& recordBuffer)
    at Microsoft.Dynamics.Nav.Runtime.DataAccess.InternalTryGetByPrimaryKey(RecordIdCacheRequest request, MutableRecordBuffer& recordBuffer)
    at Microsoft.Dynamics.Nav.Runtime.DataAccess.TryHandleAsPrimaryKeyLookup(DataCacheRequest request, Boolean cacheOnly, MutableRecordBuffer& recordBuffer)
    at Microsoft.Dynamics.Nav.Runtime.DataAccess.InnerFind(FindCacheRequest request, Boolean fromPosition, Func`1 onlyCurrentKeyNeededForNextRow)
    at Microsoft.Dynamics.Nav.Runtime.RecordImplementation.IssueFindRequest(DataError errorLevel, Boolean reversed, FindType findType, Boolean useCache)
    at Microsoft.Dynamics.Nav.Runtime.RecordImplementation.FindFirstRecord(DataError errorLevel)
    at Microsoft.Dynamics.Nav.Runtime.NavRecord.ALFindFirst(DataError errorLevel)
    at Microsoft.Dynamics.Nav.XmlMetadata.NavConfigurationProfile.GetProfileRoleCenterId(NavProfileKey profile)
    at Microsoft.Dynamics.Nav.XmlMetadata.MetadataProvider.GetHomepageID(NavProfileKey profileKey)
    at Microsoft.Dynamics.Nav.XmlMetadata.MetadataProvider.GetNavigationFrame(Boolean applyPersonalization, NavProfileKey profileKey)
    at SyncInvokeGetNavigationFrame(Object , Object[] , Object[] )
    at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
    at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.RunInTransactionCombinator(ServiceOperation innerOperation, NSServiceBase serviceInstance, MethodBase syncMethod, Object[] inputs, Object[]& outputs)
    at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.<>c__DisplayClass24_1.b__1(NSServiceBase serviceInstance, Object[] inputs, Object[]& outputs)
    at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.TransientErrorRetryCombinator(ServiceOperation innerOperation, NSServiceBase serviceInstance, MethodBase syncMethod, Object[] inputs, Object[]& outputs)
    at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.<>c__DisplayClass24_1.b__1(NSServiceBase serviceInstance, Object[] inputs, Object[]& outputs)
    at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.ErrorMappingCombinator(ServiceOperation innerOperation, NSServiceBase serviceInstance, MethodBase syncMethod, Object[] inputs, Object[]& outputs)
 Source: Microsoft.Dynamics.Nav.Ncl
Error accessing Website 
 Type: Microsoft.Dynamics.Nav.Types.NavProfileException
 Message: You don't have permission to use the Role Center 'ORDREBEHANDLER'.
 StackTrace:
    at Microsoft.Dynamics.Nav.Client.NavRunHomepagePropertyBagInvokedAction.Validate(FormPropertyBag queryParameters, UISession uiSession, Object invocationState) in S:\Depot\Platform-Core\platform\client\Shared\Prod.Client.UI\NavRunHomepagePropertyBagInvokedAction.cs:line 61
    at Microsoft.Dynamics.Framework.UI.LogicalFormActivator.GeneratePropertyBagCommand(FormPropertyBag propertyBagToUse, UISession uiSession, Object invocationState) in S:\Depot\Platform-Core\platform\client\Shared\Prod.ClientFwk\URL\LogicalFormActivator.cs:line 157
    at Microsoft.Dynamics.Framework.UI.LogicalFormActivator.ValidateAndInvokePropertyBag(FormPropertyBag propertyBagToUse, UISession uiSession, Object invocationState) in S:\Depot\Platform-Core\platform\client\Shared\Prod.ClientFwk\URL\LogicalFormActivator.cs:line 60
    at Microsoft.Dynamics.Framework.UI.OpenFormInteraction.InvokeCore(OpenFormInteractionInput logicalInteractionInput) in S:\Depot\Platform-Core\platform\client\Shared\Prod.ClientFwk\Interactions\SystemInteractions\OpenFormInteraction.cs:line 0
    at Microsoft.Dynamics.Framework.UI.InteractionInvoker.Invoke[T](String interactionName, Action1 invokeMethod, T input) in S:\Depot\Platform-Core\platform\client\Shared\Prod.ClientFwk\Interactions\InteractionInvoker.cs:line 42    at Microsoft.Dynamics.Framework.UI.LogicalInteraction1.Invoke(T logicalInteractionInput) in S:\Depot\Platform-Core\platform\client\Shared\Prod.ClientFwk\Interactions\LogicalInteraction.cs:line 40
    at Microsoft.Dynamics.Framework.UI.InteractionManager.<>c__DisplayClass8_2.b__4() in S:\Depot\Platform-Core\platform\client\Shared\Prod.ClientFwk\Interactions\InteractionManager.cs:line 125
 Source: Microsoft.Dynamics.Nav.Client.UI

Cannot login to Microsoft Dynamics Business Central 2019 Spring release (BC14) RTM with LoginName authentication

Dynanmics 365 Business Central logo

Have you tried to configure a Microsoft Dynamics Business Central 2019 Spring release (BC14) RTM with LoginName authentication, just to find that it did not work?

You are right.

You won’t be able to login to the Web- or Windows-client and will get errors in your event log like these:

Server instance: BC140
Category: Runtime
ClientSessionId: 1396b6cf-5cfd-4dae-b98a-9ee3a6d3d3e1
ClientActivityId: 8665e7ca-3a27-49f3-b928-4a013317be94
ServerSessionUniqueId: 00000000-0000-0000-0000-000000000000
ServerActivityId: 5d8ecef1-6d64-4d05-9031-03a0248c9138
EventTime: 08/09/2019 10:14:40
Message (NullReferenceException): RootException: NullReferenceException

Object reference not set to an instance of an object.

ExceptionStackTrace:
   at Microsoft.Dynamics.Nav.Service.NSServiceBase.<>c__DisplayClass14_0.b__0()
   at Microsoft.Dynamics.Nav.Service.NSServiceBase.ValidateAndCreateSession(ConnectionRequest connectionRequest, Boolean requireNavUser)
   at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.CreateNewSessionCombinator(ServiceOperation innerOperation, NSServiceBase serviceInstance, Boolean requireNavUser, Object[] inputs, Object[]& outputs)

CallerStackTrace:
   at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.CreateNewSessionCombinator(ServiceOperation innerOperation, NSServiceBase serviceInstance, Boolean requireNavUser, Object[] inputs, Object[]& outputs)
   at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.<>c__DisplayClass27_1.b__1(NSServiceBase serviceInstance, Object[] inputs, Object[]& outputs)
   at Microsoft.Dynamics.Nav.Service.ServiceOperationTracer.TraceScopeCombinator(Category telemetryCategory, ServiceOperation innerOperation, NSServiceBase serviceInstance, MethodBase syncMethod, Object[] inputs, Object[]& outputs)
   at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.<>c__DisplayClass27_1.b__1(NSServiceBase serviceInstance, Object[] inputs, Object[]& outputs)
   at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.<>c__DisplayClass9_0.b__0()
   at Microsoft.Dynamics.Nav.Runtime.NavPerformanceCounterSetter.UpdatePerformanceCountersWithAverageServiceOperationDuration(Stopwatch stopWatch, Action action)
   at Microsoft.Dynamics.Nav.Runtime.NavPerformanceCounterSetter.UpdatePerformanceCountersWithAverageServiceOperationAction(Action action, NavSession session)
   at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.PerformanceCounterCombinator(ServiceOperation innerOperation, NSServiceBase serviceInstance, MethodBase syncMethod, Object[] inputs, Object[]& outputs)
   at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.<>c__DisplayClass27_1.b__1(NSServiceBase serviceInstance, Object[] inputs, Object[]& outputs)
   at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.InitClientTelemetryIdsCombinator(ServiceOperation innerOperation, NSServiceBase serviceInstance, MethodBase syncMethod, Object[] inputs, Object[]& outputs)
   at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.<>c__DisplayClass27_1.b__1(NSServiceBase serviceInstance, Object[] inputs, Object[]& outputs)
   at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.TlsClearCombinator(ServiceOperation innerOperation, NSServiceBase serviceInstance, MethodBase syncMethod, Object[] inputs, Object[]& outputs)
   at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.<>c__DisplayClass27_1.b__1(NSServiceBase serviceInstance, Object[] inputs, Object[]& outputs)
   at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
   at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)
   at System.ServiceModel.Dispatcher.MessageRpc.Wrapper.Resume(Boolean& alreadyResumedNoLock)
   at System.ServiceModel.Dispatcher.ThreadBehavior.ResumeProcessing(IResumeMessageRpc resume)
   at Microsoft.Dynamics.Nav.Runtime.NavSynchronizationContext.<>c__DisplayClass1_0.b__0(Object state)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
   at System.Threading.ThreadPoolWorkQueue.Dispatch()
Server instance: BC140
 Tenant ID: 
 User: xxx
 Type: System.NullReferenceException
 Message: Object reference not set to an instance of an object.
 StackTrace:
      at Microsoft.Dynamics.Nav.Service.NSServiceBase.<>c__DisplayClass14_0.b__0()
      at Microsoft.Dynamics.Nav.Service.NSServiceBase.ValidateAndCreateSession(ConnectionRequest connectionRequest, Boolean requireNavUser)
      at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.CreateNewSessionCombinator(ServiceOperation innerOperation, NSServiceBase serviceInstance, Boolean requireNavUser, Object[] inputs, Object[]& outputs)
 Source: Microsoft.Dynamics.Nav.Service
 HResult: -2147467261
 StackTrace:
      at Microsoft.Dynamics.Nav.Service.NSServiceBase.<>c__DisplayClass14_0.b__0()
      at Microsoft.Dynamics.Nav.Service.NSServiceBase.ValidateAndCreateSession(ConnectionRequest connectionRequest, Boolean requireNavUser)
      at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.CreateNewSessionCombinator(ServiceOperation innerOperation, NSServiceBase serviceInstance, Boolean requireNavUser, Object[] inputs, Object[]& outputs)
Type: Microsoft.Dynamics.Nav.Client.NavClientClosingException
 Fatal: False
 ShowError: True
 Message: The server "BC140" was unable to process the request. The application will close.
 StackTrace:
      at Microsoft.Dynamics.Nav.Client.WinClient.ExceptionHandler.DoExecute(Func1 execute)      at Microsoft.Dynamics.Nav.Client.WinClient.StartWinFormsClient.RunCore() Source: Microsoft.Dynamics.Nav.Client.WinClient HResult: -2146233088 StackTrace:      at Microsoft.Dynamics.Nav.Client.WinClient.ExceptionHandler.DoExecute(Func1 execute)
      at Microsoft.Dynamics.Nav.Client.WinClient.StartWinFormsClient.RunCore()
 Type: Microsoft.Dynamics.Nav.Types.Exceptions.NavServerSessionException
 Message: The server "BC140" was unable to process the request. The application will close.
 StackTrace:
      at Microsoft.Dynamics.Nav.Client.ConnectionEstablisher.OpenConnection[TChannel](ConnectFailedEventArgs connectFailedArgs, ConnectionRequest connectionRequest, ConnectionOptions connectionOptions, SpnSetting spnSettingToTry, Boolean allowSpnSettingsSwap, UserSettings& userSettings)
      at Microsoft.Dynamics.Nav.Client.ConnectionEstablisher.OpenConnection[TChannel](ConnectionRequest connectionRequest, ConnectionOptions connectionOptions, UserSettings& userSettings)
      at Microsoft.Dynamics.Nav.Client.ServiceConnection.OpenConnection()
      at Microsoft.Dynamics.Nav.Client.ServiceConnection.Initialize()
      at Microsoft.Dynamics.Nav.Client.FormBuilder.BuilderSessionInitializer.OpenConnectionToServer()
      at Microsoft.Dynamics.Nav.Client.WinClient.NavWinFormsClientSession.OpenServerConnectionCore()
      at Microsoft.Dynamics.Nav.Client.WinClient.NavWinFormsClientSession.OpenServerConnectionWithMultipleLoginAttempts()
      at Microsoft.Dynamics.Nav.Client.WinClient.NavWinFormsClientSession.InitializeUISession()
      at Microsoft.Dynamics.Framework.UI.Windows.ClientSessionBase.InitCore()
      at Microsoft.Dynamics.Nav.Client.WinClient.NavWinFormsClientSession.InitCore()
      at Microsoft.Dynamics.Framework.UI.ClientSessionCore.Init()
      at Microsoft.Dynamics.Framework.UI.Windows.ClientSessionBase.Run()
      at Microsoft.Dynamics.Nav.Client.WinClient.NavClientErrorHandler.ExecuteAndCatchExceptions(Func`1 execute)
 Source: Microsoft.Dynamics.Nav.Client.ServiceConnection
 HResult: -2146233088
 StackTrace:
      at Microsoft.Dynamics.Nav.Client.ConnectionEstablisher.OpenConnection[TChannel](ConnectFailedEventArgs connectFailedArgs, ConnectionRequest connectionRequest, ConnectionOptions connectionOptions, SpnSetting spnSettingToTry, Boolean allowSpnSettingsSwap, UserSettings& userSettings)
      at Microsoft.Dynamics.Nav.Client.ConnectionEstablisher.OpenConnection[TChannel](ConnectionRequest connectionRequest, ConnectionOptions connectionOptions, UserSettings& userSettings)
      at Microsoft.Dynamics.Nav.Client.ServiceConnection.OpenConnection()
      at Microsoft.Dynamics.Nav.Client.ServiceConnection.Initialize()
      at Microsoft.Dynamics.Nav.Client.FormBuilder.BuilderSessionInitializer.OpenConnectionToServer()
      at Microsoft.Dynamics.Nav.Client.WinClient.NavWinFormsClientSession.OpenServerConnectionCore()
      at Microsoft.Dynamics.Nav.Client.WinClient.NavWinFormsClientSession.OpenServerConnectionWithMultipleLoginAttempts()
      at Microsoft.Dynamics.Nav.Client.WinClient.NavWinFormsClientSession.InitializeUISession()
      at Microsoft.Dynamics.Framework.UI.Windows.ClientSessionBase.InitCore()
      at Microsoft.Dynamics.Nav.Client.WinClient.NavWinFormsClientSession.InitCore()
      at Microsoft.Dynamics.Framework.UI.ClientSessionCore.Init()
      at Microsoft.Dynamics.Framework.UI.Windows.ClientSessionBase.Run()
      at Microsoft.Dynamics.Nav.Client.WinClient.NavClientErrorHandler.ExecuteAndCatchExceptions(Func`1 execute)
 Type: Microsoft.Dynamics.Nav.Types.Exceptions.NavServerSessionException
 Message: The server "BC140" was unable to process the request. The application will close.
 HResult: -2146233088
 Type: System.NullReferenceException
 Message: Object reference not set to an instance of an object.
 StackTrace:
      at Microsoft.Dynamics.Nav.Service.NSServiceBase.<>c__DisplayClass14_0.b__0()
      at Microsoft.Dynamics.Nav.Service.NSServiceBase.ValidateAndCreateSession(ConnectionRequest connectionRequest, Boolean requireNavUser)
      at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.CreateNewSessionCombinator(ServiceOperation innerOperation, NSServiceBase serviceInstance, Boolean requireNavUser, Object[] inputs, Object[]& outputs)
 Source: Microsoft.Dynamics.Nav.Service
 HResult: -2147467261
 StackTrace:
      at Microsoft.Dynamics.Nav.Service.NSServiceBase.<>c__DisplayClass14_0.b__0()
      at Microsoft.Dynamics.Nav.Service.NSServiceBase.ValidateAndCreateSession(ConnectionRequest connectionRequest, Boolean requireNavUser)
      at Microsoft.Dynamics.Nav.Service.ServiceOperationInvoker.CreateNewSessionCombinator(ServiceOperation innerOperation, NSServiceBase serviceInstance, Boolean requireNavUser, Object[] inputs, Object[]& outputs)

Part of the story is that the same setup simply works with earlier versions, and that Windows-authentication also works without any glitches.

At least the fix is simple: Upgrade your platform to Cumulative Update 1 (or actually I recommend the latest while you are at it anyway 🙂 ).

Note, the error is also mentioned on forum.mibuso.com here!

Thanks goes to Christoph Bendixen and Jesper Dahl Fredriksen from team.blue aka ScanNet.dk for helping reporting and identifying this problem.

Microsoft Dynamics 365 Business Central WebClient with no Role Center

Dynanmics 365 Business Central logo

Is your Microsoft Dynamics 365 Business Central Windows Client working, but your Web Client gets stuck with this picture just after log in?

WebClient - no Role Center
WebClient – stuck with no Role Center just after login.

…and do you see events like these in the Windows eventviewser on the Server? (sorry – I know it is in Danish: “fejl” translates to “error” and “undtagelse” means “exception”)

Der opstod fejl under forsøg på adgang til webstedet 
Type: Microsoft.Dynamics.Nav.Types.NavCancelCredentialPromptException
Message: Der blev udløst en undtagelse af typen 'Microsoft.Dynamics.Nav.Types.NavCancelCredentialPromptException'.
StackTrace:
   ved Microsoft.Dynamics.Nav.Client.ConnectionEstablisher.PromptForCredentials() i S:\Depot\Platform-Core\platform\client\Shared\Prod.Client.ServiceConnection\ConnectionEstablisher.cs:linje 1041
   ved Microsoft.Dynamics.Nav.Client.ConnectionEstablisher.OpenConnection[TChannel](ConnectionRequest connectionRequest, ConnectionOptions connectionOptions, UserSettings& userSettings) i S:\Depot\Platform-Core\platform\client\Shared\Prod.Client.ServiceConnection\ConnectionEstablisher.cs:linje 196
   ved Microsoft.Dynamics.Nav.Client.ServiceConnection.OpenConnection() i S:\Depot\Platform-Core\platform\client\Shared\Prod.Client.ServiceConnection\ServiceConnection.cs:linje 892
   ved Microsoft.Dynamics.Nav.Client.ServiceConnection.Initialize() i S:\Depot\Platform-Core\platform\client\Shared\Prod.Client.ServiceConnection\ServiceConnection.cs:linje 561
   ved Microsoft.Dynamics.Nav.Client.FormBuilder.BuilderSessionInitializer.OpenConnectionToServer() i S:\Depot\Platform-Core\platform\client\Shared\Prod.Client.Builder\BuilderSession\BuilderSessionInitializer.cs:linje 265
   ved Microsoft.Dynamics.Nav.Client.FormBuilder.BuilderSessionInitializer.InitializeCore() i S:\Depot\Platform-Core\platform\client\Shared\Prod.Client.Builder\BuilderSession\BuilderSessionInitializer.cs:linje 92
   ved Microsoft.Dynamics.Nav.Client.FormBuilder.BuilderSessionInitializer.Initialize() i S:\Depot\Platform-Core\platform\client\Shared\Prod.Client.Builder\BuilderSession\BuilderSessionInitializer.cs:linje 76
   ved Microsoft.Dynamics.Framework.UI.UISession.Initialize() i S:\Depot\Platform-Core\platform\client\Shared\Prod.ClientFwk\Session\UiSession.cs:linje 1094
   ved Microsoft.Dynamics.Nav.Client.Web.NavWebUISessionInitializer.InitializeCore(UISession session) i S:\Depot\Platform-Core\platform\client\web\Prod.Client.WebCommon\Session\NavWebUISessionInitializer.cs:linje 94
   ved Microsoft.Dynamics.Nav.WebClient.NavWebClientUISessionInitializer.InitializeCore(UISession session) i S:\Depot\Platform-Core\platform\client\web\Prod.Client.WebClient\Session\NavWebClientUISessionInitializer.cs:linje 65
   ved Microsoft.Dynamics.Nav.Client.Web.NavWebUISessionInitializer.Initialize(UISession session) i S:\Depot\Platform-Core\platform\client\web\Prod.Client.WebCommon\Session\NavWebUISessionInitializer.cs:linje 77
   ved Microsoft.Dynamics.Framework.UI.Client.OpenFormExecutionStrategy.TryInitializeUiSession(UISession session) i S:\Depot\Platform-Core\platform\client\Shared\Prod.ClientFwk\Client\Interactions\ExecutionStrategies\OpenFormExecutionStrategy.cs:linje 67
   ved Microsoft.Dynamics.Framework.UI.Web.WebOpenFormExecutionStrategy.TryInitializeUiSession(UISession session) i S:\Depot\Platform-Core\platform\client\web\Prod.Client.Web\Interactions\ExecutionStrategies\WebOpenFormExecutionStrategy.cs:linje 61
   ved Microsoft.Dynamics.Framework.UI.Client.OpenFormExecutionStrategy.Execute() i S:\Depot\Platform-Core\platform\client\Shared\Prod.ClientFwk\Client\Interactions\ExecutionStrategies\OpenFormExecutionStrategy.cs:linje 41
   ved Microsoft.Dynamics.Framework.UI.InteractionManager.<>c__DisplayClass8_2.b__4() i S:\Depot\Platform-Core\platform\client\Shared\Prod.ClientFwk\Interactions\InteractionManager.cs:linje 125
Source: Microsoft.Dynamics.Nav.Client.ServiceConnection
Error accessing Website 
Unhandled error occurred on a browser or device client:
{
  "clientInfo": {
    "platform": "Win32",
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362",
    "browserLanguage": "da-DK"
  },
  "message": "Unable to get property 'getElementsByClassName' of undefined or null reference",
  "pageUrl": "https://xxxxxxxxxx/yyyyyyyyyy/?runinframe=1",
  "originalError": {},
  "location": {
    "name": "https://xxxxxxxxxx/yyyyyyyyyy/js/framework.js?h=69F05AE1092A2D30721123840E70FB027600B5F7A4BA9069BAE99A1E20C9168D&_v=1.0.0",
    "url": "https://xxxxxxxxxx/yyyyyyyyyy/js/framework.js?h=69F05AE1092A2D30721123840E70FB027600B5F7A4BA9069BAE99A1E20C9168D&_v=1.0.0",
    "lineNumber": 4562,
    "columnNumber": 58
  },
  "detailedMessage": "   at DN.LogicalFormAdapter.prototype.$105 (https://xxxxxxxxxx/yyyyyyyyyy/js/framework.js?h=69F05AE1092A2D30721123840E70FB027600B5F7A4BA9069BAE99A1E20C9168D&_v=1.0.0:5188:1958)\r\n   at DN.LogicalFormAdapter.prototype.initializeNativeControl (https://xxxxxxxxxx/yyyyyyyyyy/js/framework.js?h=69F05AE1092A2D30721123840E70FB027600B5F7A4BA9069BAE99A1E20C9168D&_v=1.0.0:5152:101)\r\n   at DN.LogicalControlAdapter.prototype.$27 (https://xxxxxxxxxx/yyyyyyyyyy/js/framework.js?h=69F05AE1092A2D30721123840E70FB027600B5F7A4BA9069BAE99A1E20C9168D&_v=1.0.0:4839:1117)\r\n   at DN.LogicalControlAdapter.prototype.createContent (https://xxxxxxxxxx/yyyyyyyyyy/js/framework.js?h=69F05AE1092A2D30721123840E70FB027600B5F7A4BA9069BAE99A1E20C9168D&_v=1.0.0:4833:6623)\r\n   at DN.LogicalControlAdapter.prototype.buildCore (https://xxxxxxxxxx/yyyyyyyyyy/js/framework.js?h=69F05AE1092A2D30721123840E70FB027600B5F7A4BA9069BAE99A1E20C9168D&_v=1.0.0:4834:399)\r\n   at Type.prototype.callBaseMethod (https://xxxxxxxxxx/yyyyyyyyyy/js/mscorlib.js?h=D3729A20D7B95888CE98A4A7D3E48A9F0C340D80C5F72A67326464A956360F0E&_v=1.0.0:1:23528)\r\n   at DN.LogicalFormAdapter.prototype.buildCore (https://xxxxxxxxxx/yyyyyyyyyy/js/framework.js?h=69F05AE1092A2D30721123840E70FB027600B5F7A4BA9069BAE99A1E20C9168D&_v=1.0.0:5160:156)\r\n   at DN.LogicalControlAdapter.prototype.build (https://xxxxxxxxxx/yyyyyyyyyy/js/framework.js?h=69F05AE1092A2D30721123840E70FB027600B5F7A4BA9069BAE99A1E20C9168D&_v=1.0.0:4833:6709)\r\n   at DN.LogicalControlAdapter.prototype.buildChildAdapter (https://xxxxxxxxxx/yyyyyyyyyy/js/framework.js?h=69F05AE1092A2D30721123840E70FB027600B5F7A4BA9069BAE99A1E20C9168D&_v=1.0.0:4834:1581)\r\n",
  "requireUserToSignOut": false,
  "silent": true
}

Well – congratulations. You probably hit the same rabbit hole I just wasted 2 hours on.

Please go through you Role Center PageParts and check if you by mistake filled the InstructionalTextML property with something. I don’t want you to check the Role Center page, but check the individual PageParts pages. It is a global parameter on them.

If you did – remove it and this problem is magically gone :-)…

Note: This issue HAS off cause been reported to Microsoft (it got case ID 119071922000172 ). They have confirmed that it also seems to be present on Microsoft Dynamics 365 Business Central 2019 spring release.

I’ve discovered it in 2018 fall release CU7 (running single tenant and NavUserPassword authentication – not that I think that is part of the cause). I’ll expect it to be also present in at least 2018 fall release CU9 and 2019 spring release CU1.

Microsoft confirms they are looking into fixing it and a fix will be released in a future CU.

Bad Request – Error in query syntax.

PowerShell logo

No, this is not an error in WordPress on this server – “Bad Request – Error in query syntax.” is in fact the intended subject for this Blog post :-).

If you are running OData WebServices towards you Microsoft Dynamics NAV or 365 Business Central (DBC) and you get this error – and you have a forward slash ( “/” ) in the company name in question, then this Blog post is for you :-).

You have just discovered that Excel, PowerShell.exe and/or older version of PowerShell ISE cannot work with OData URLs with a forward slash in the …/Company(‘<my company name>’)/… part of the URL.

A obvious solution is to rename the company in NAV/DBC – but that is not really a neat solution, is it?

According to this Microsoft blog post, another far superior solution exists. NAV/DBC supports two syntaxes when stating the company name.

The “classic” one you use for OData version 3 when you got the error:

https://<my hostname>:<my odata port>/<my instance>/OData/Company('<my company')/<my webservice>

…or the corresponding OData version 4 one:

https://<my hostname>:<my odata port>/<my instance>/ODataV4/Company('<my company')/<my webservice>

…and another one for working around this error:

https://<my hostname>:<my odata port>/<my instance>/OData/<my webservice>?company='<my company>'

…or the corresponding OData version 4 one:

https://<my hostname>:<my odata port>/<my instance>/ODataV4/<my webservice>?company='<my company>'

Note that you can off cause add additonal parameters (selecting tenant or setting filters etc.) to the URL using the ampersand sign ( “&” ) – just like you do when construction any URL.

Congratulations – you solved your problem 🙂

If you want to learn more about OData towards NAV/DBC, I suggest you visit these links:

“External Azure Active Directory” users and Single-Sign-On in Dynamics 365 Business Central

Dynanmics 365 Business Central logo

If you are setting up Single-Sign-On (SSO) for Dynamics 365 Business Central (DBC) and you are only able to authenticate users local to the Azure Active Directory (i.e. non Guest or “External Azure Active Directory” users), then you might have stumbled across the same error as me.

The error manifests itself by allowing you to log in using SSO, but just when the DBC webclient is suppose to open, you get this error:

Your user name or password is incorrect, or you do not have a valid account in Dynamics 365 Business Central.

The problems is that a user with that authentication e-mails IS in fact present in DBC – so the error makes no sense.

Also you will sometimes get a warning in the Event Viewer that the SSO token was valid, but the user could not be found in DBC.

As mentioned the local domains works fine, it is only if you try to add external users and authenticate with those it does not work:

User type: Guest
Source: External Azure Active Directory

I’ve seen this error in Microsoft Dynamics 365 Business Central 2018 fall release with cumulative update 1 and 2.

I’m aware that you – with powershell – can change a User type Guest to a User type Member. I tried it, but the result was the exact same. So “no cigar” for that solution.

After upgrading the platform to the latest Cumulative Update (which is 7 while I’m writing this), the error is completely gone. So there you have your fix :-).

Note: I’ve not tested all the CUs between 2 and 7 to figure out when it was fixed or if there is a entry in the fix list that mentions this – so if you have more knowledge about that, please share by adding a comment.