17 April 2023

D365FO: DBSync error 'The SQL view definition for your_view_name is deployed as a code package but has not been synchronized with the database'

 I got the following error today while doing the full DBSync:

The SQL view definition for your_view_name is deployed as a code package but has not been synchronized with the database. As it is currently used by one or more financial dimensions, the database must be synchronized to the code deployment.


The root cause of the issue was described in this Yammer thread by Denis Fedotenko a few years ago. Quote from the thread:

It looks like the problem is caused by the following code in the method DimensionEnabledType::getDimensionEnabledTypeCollection()
select firstonly RecId from sqlDictionary where sqlDictionary.name == any2Str(viewName);

The standard logic is trying to find whatever the view, to which the dimension definition refers, actually exists in the system. The problem is with the expression on the right side of the comparison in the select statement. Since it is not a variable with a defined length, the system cannot properly compile the statement; it creates a bunch of similar SQL Statements with different declared lengths of the only parameter. After execution of the code, my SQL Statement cache was thrashed with similar SQL Statements, which differs only in the string length in the parameter declaration, like:

(@P1 nvarchar(34))SELECT TOP 1  T1.RECID, T1.RECID FROM SQLDICTIONARY T1 WHERE( T1.NAME  =  @P1)

(@P1 nvarchar(25))SELECT TOP 1  T1.RECID, T1.RECID FROM SQLDICTIONARY T1 WHERE( T1.NAME  =  @P1)

(@P1 nvarchar(40))SELECT TOP 1  T1.RECID, T1.RECID FROM SQLDICTIONARY T1 WHERE( T1.NAME  =  @P1)

The problem is, that sometimes the length of the parameter declaration (like nvarchar(40)) does not match the length of the real string, so the passed parameter value is cut like:

<ColumnReference Column="@P1" ParameterDataType="nvarchar(40)" ParameterCompiledValue="N'BOSDimAttributesmmBusRelSalesDistrictGro'" />

The real name of the view is indeed BOSDimAttributesmmBusRelSalesDistrictGroup

I am not 100% sure now how to reproduce the error in  clean-room conditions, but I suspect that if the view name length is larger than 40 characters (or maybe if  it is larger than 40 chars and is equal to some magic numbers, on which the compiler chokes), the sync fails.

The solution depends on the length of your query name:

  • if query name is too long - rename it and make it shorter
  • if query name is not so long - just retry full DBSync, eventually it will succeed

06 March 2023

D365FO: missing menu item for running custom X++ scripts

Some time ago Microsoft released a new feature for running custom X++ scripts without having to go through Microsoft Dynamics Lifecycle Services (LCS) or suspend your system. According to the documentation, feature should be accessible via "System administration > Periodic tasks > Database > Custom scripts". In some cases this menu item is missing:


The solution is to run the following SQL query and restart IIS:

INSERT INTO SYSFLIGHTING (FLIGHTNAME, ENABLED) VALUES('AppConsistencyCustomScriptFlight', 1)

20 December 2022

D365FO: 'Serialization version mismatch detect' error

This error could happen during running DbSync, deploying a package (LCS or manually) or just starting up IIS. Error message looks like the following: 

Serialization version mismatch detect, make sure the runtime dlls are in sync with the deployed metadata. Version of file '204'. Version of dll '203'.

Versions could vary, but the file version is always higher then dll version.

The root cause of the issue is that your D365FO version is lower then the minimum version required by installed ISV solution as a binary model. 

There are two possible solutions:

  1. Delete binary model
  2. Update D365FO to the minimum version required by ISV solution



02 November 2022

D365FO: LCS error while creating first environment in a new project

The following error could appear when you try to create a new cloud hosted environment in a new project:

Lifecycle Services cannot perform the current {0} operation. Received null or empty value for parameter {1}. If the issue persists, please contact support with this Id: <guid>

The only way to fix this is to contact Microsoft support. They will update so-called S2S certificate, after that it will be possible to create new environments without an error.

23 September 2022

D365FO: error while trying to apply deployable package

The following error could appear when you try to apply deployable package manually on your Dev environment:

Request for the permission of type 'System.Security.Permissions.FileIOPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.

That happens if you forgot to unblock the package Zip file before extracting.

The solution is simple - before extracting locate the file, open file properties and check Unblock checkbox:

16 August 2022

D365FO: workflow development and debugging

There are many guides in the internet how to create a new workflow in D365FO. The process is quite long and complicated.

Here are some of the tips to make it easier for you:

  1. If you stuck and not sure how to implement a specific part of a workflow - check Microsoft's workflows from Application Foundation model. Many good examples there.

  2. When you debugging the workflow, remember to attach your Visual Studio to the "Batch.exe" process, not to the default "iisexpress.exe", else no breakpoint will be hit

  3. The "Rejected" workflow action for some reason is handled by "denied" event handler (WorkflowElementDeniedEventHandler). All other actions (Started, Approved, Canceled, etc.) have event handlers with matching names.

07 July 2022

D365FO: WinRM certificate error while rotating SSL ceritificate

When cloud-hosted D365FO environment is deployed, SSL certificate is generated for accessing local IIS via HTTPS. This certificate will expire after some time and will trigger HTTPS errors when accessing local D365FO instance. SSL certificate could be regenerated via "Maintain" -> "Rotate secrets" menu. 

In some cases "Rotate secrets" task could fail with the following error: "Attempted to remotely execute a powershell script but the WinRM SSL certificate is expired. Please make sure the virtual machine [vm_name] has a valid WinRM SSL certificate before retrying."

Here is easiest way to refresh WinRM certificate:

  1. Login to the remote VM via RDP
  2. Open PowerShell prompt as Administrator
  3. Run the following command to install d365fo.tools, select "A" to install all modules when prompted:
    Install-Module -Name d365fo.tools

  4. Run the following command to refresh WinRM certificate:
    Invoke-D365WinRmCertificateRotation
Restart the VM and check if local D365FO instance could be accessed again without certificate error. If the issue still there - execute certificate rotation from LCS one more time, this time it will succeed.