06 June 2024

D365FO: unable to run Financial Report Designer on 10.0.39

There is a bug in D365FO 10.0.39, impossible to open Financial Report Designer. The following error appears: "Unable to log in to <URL> or the login attempt has timed out. The application will exit."



The solution is to deploy latest D365FO quality update for 10.0.39 from LCS.

More details here.

27 February 2024

SQL: SQL71626 error during DB export to a bacpac file

Few days ago I got the following error while trying to export SQL database to a bacpac file:

Connecting to database 'AXDB_copy' on server 'localhost'.

Extracting schema

Extracting schema from database

Resolving references in schema model

Validating schema model

Validating schema model for data package

Validating schema

*** Error exporting database:One or more unsupported elements were found in the schema used as part of a data package.

Error SQL71626: The element Certificate: [cert_name] is not supported in Microsoft Azure SQL Database v12.



The fix is to open SQL Management studio, create database copy, expand "

<myDBcopy> -> Security -> Certificates" and delete all certificates. After this export copied database to a bacpac file.



30 January 2024

PowerShell: display truncated command output

Some PowerShell commands will truncate text data during output to the screen. For example,  'Get-AzContext' command will truncate 'Name' column. However, we need to know the full text from the 'Name' column in order to switch to the given context.

One of the solutions is to add '| format-table -wrap' option:

Get-AzContext | format-table -wrap

11 January 2024

D365FO: Visual Studio error when opening a project file

 In some cases you could get the following error when opening the Visual Studio project file:

Unsupported

This version of Visual Studio is unable to open the following projects. The project types may not be installed or this version of Visual Studio may not support them. 

For more information on enabling these project types or otherwise migrating your assets, please see the details in the "Migration Report" displayed after clicking OK.


The solution is to install (or re-install) D365FO VSIX Visual Studio add-in and make sure it is Enabled. You could get the latest version of the add-in by downloading service update deployment package from LCS and extracting it to a local folder. Then search for "Microsoft.Dynamics.Framework.Tools.Installer" under "DevToolsService\Scripts" folder.



30 August 2023

Visual Studio: unable to comment on code review with "closed by ()" message

I've seen a few times the following strange issue with new code reviews: when reviewer is trying to open newly created code review, he is unable to add any comments and there is a message displayed "closed by  ()":



The solution is the following:

  1. Close all Visual Studio instances
  2. Delete all files from this directory: 
    VS 2019: "%LocalAppData%\Microsoft\Team Foundation\8.0\Cache"
    VS 2022: "%LocalAppData%\Microsoft\Azure DevOps\8.0\Cache"
            and "%LocalAppData%\Microsoft\VisualStudio Services\8.0\Cache"

12 June 2023

D365FO: TempDB tables

In D365FO all types of temporary tables are automatically dropped by the system when the table variable in X++ goes out of scope. A TempDB table is not dropped in such case. You could see capabilities and limitations of TempDB tables here.

Sometimes there is a need to add more information to existing TempDB table, typical using event handling extensions or chain of command. In this case you may realise that the data you are adding is not saved/missing. This happens becase new data will be saved in a different TempDB table session and will not be visible by the code/form you are trying to extend.

The solution is to use a special linkPhysicalTableInstance() method to link current table instance with existing one.

Code example below:

    MyTempDBTable myTempDBTableCaller;
    
    public void init()
    {
        MyTempDBTable myTempDBTable;
    
        next init();

        myTempDBTable.linkPhysicalTableInstance(myTempDBTableCaller.cursor());        
        
        // insert more data to existing myTempDBTable session
        ...
    }
    


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