Changing Dynamics 365 “Finance and Operations” Product Core Name

Ever wondered how to change Finance and Operations Product Name?

Simply override ApplicationPlatform – CoreProductName label in 2 steps:
– Create ApplicationPlatform_Extension label file
– Extend CoreProductName label

Create label extension

Create new label file: ApplicationPlatform_Extension

Click Next:

Ensure en-US language is selected then click Next:

Click Next again. The label file should have been created.

Extend Product Label

Double-Click ApplicationPlatform_Extension.en-US.txt to open the label file:

Enter:

Label ID: CoreProductName
Label: <your label>

Save and compile your project or model.

Enable Gmail accounts to access Dynamics 365 SCM Vendor Collaboration Portal

D365 SCM’ Vendor Collaboration portal enables external vendors to access related purchase orders, invoices, consignment inventory, and requests for quotation information.

If you are new to Vendor Collaboration portal, I advise you to start here. This topic discusses how to enable Gmail accounts to access Vendor Collaboration Portal.

Set up and maintain vendor collaboration.

Not all vendors use Microsoft 365 accounts and therefore use their personal email accounts to sign up for and access Vendor Collaboration portal. As you might know this is not supported officially. If you followed steps listed here using Gmail accounts, you will receive this error.

You are not authorized to login with your current credentials

To enable Gmail (or other non-Microsoft accounts) accounts to access Vendor Collaboration portal, you need to sign up to create Microsoft account for these personal accounts. Below I will show you how can achieve that in simple steps:

For Gmail accounts you DO NOT need to invite them to Azure Portal as guest accounts when you create Microsoft account for them.

Skip adding Gmail accounts to Azure Portal

First, in your browser navigate to: https://accounts.microsoft.com

Click on Create account > button.

Signup for Microsoft account

Enter your personal accounts, then click Next button.

Signup for Microsoft accounts

Create password that you can use to access your Microsoft account later (this is different that your personal account password), then click Next button.

Signup for Microsoft account

After this point Microsoft account service should send you verification email including security code you will need to use to verify your personal account.

Verification email

use security code to continue signup process. Click Next button.

Verify email

You will be asked to resolve a puzzle to ensure you are not a robot. Complete it then click Next button.

Enter your Birth date and country, then click Next button.

Enter Birthdate and Country

Verify your birthdate, then click Next button.

Confirm age

you are all set!

Vendor Collaboration portal

Dynamics Folder is missing from Event Viewer after provisioning Dynamics 365 for Finance/SCM version 10.0.29

If you recently provisioned Dynamics 365 Development environment using 10.0.29 release, you will notice Event Viewer is missing Dynamics folder.

Dynamics 365 Development Environment Event Viewer after Provisioning 10.0.29 environment.

After some research I found a solution that is shared by “Daniel Codes” he received from Microsoft Support 3 weeks ago. Find details below:

Dynamics folder missing in event viewer on CHE environment was discovered recently and it is being worked on. We expect the fix to be available some time in close future.

In the meantime, you can use this script to install the ETW Provider (which is what adds the event viewer Dynamics folder) attached with this mail (rename it to PS1 and run it on the VM from c:\temp folder).

Microsoft Support

While waiting on permanent fix from MS execute this PowerShell script in your development environment. Make sure you open PowerShell ISE in Administrator mode, then paste the following script and execute:

$AOSSetupETWManifestDir = "k:\AosService\WebRoot\Monitoring"

foreach ($manifestFile in Get-ChildItem -Path $AOSSetupETWManifestDir\*.man | select-object -Property BaseName,Name)

{
    $dllFile=""

    if ((Test-Path "$AOSSetupETWManifestDir\$($manifestFile.BaseName).Instrumentation.dll")) 

    {
        $dllFile = "$AOSSetupETWManifestDir\$($manifestFile.BaseName).Instrumentation.dll"

    }

    elseif ((Test-Path "$AOSSetupETWManifestDir\$($manifestFile.BaseName)Resource.dll"))

    {

        $dllFile = "$AOSSetupETWManifestDir\$($manifestFile.BaseName)Resource.dll"

    }

    elseif ((Test-Path "$AOSSetupETWManifestDir\$($manifestFile.BaseName).dll")) 

    {

        $dllFile = "$AOSSetupETWManifestDir\$($manifestFile.BaseName).dll" 

    }

    else 

    {

        Write-Host "Warn : Skipping $AOSSetupETWManifestDir\$($manifestFile.Name) as DLL not found"

        Continue    

    }


    Write-Host "Installing $AOSSetupETWManifestDir\$($manifestFile.Name) using $dllFile"

    wevtutil.exe im "$AOSSetupETWManifestDir\$($manifestFile.Name)" /rf:"$dllFile" /mf:"$dllFile"
 

    Write-Host "Finished installing $AOSSetupETWManifestDir\$($manifestFile.Name) `n`n" 

}
Windows PowerShell ISE

Problem solved!

Event Viewer

Dynamics 365 For Finance/SCM Dev Environment and Visual Studio 2019

In this blog I will share with you my first impressions of latest Dynamics 365 for Finance / SCM development environment (version 10.0.28) that I have provisioned recently.

Visual Studio Professional 2019
First and foremost Visual Studio Professional 2019 is the new default development environments (Previously was VS Professional 2017 and before that VS Professional 2015).

I never provisioned D365 10.0.27 Dev environment but I think it is the first version that started using VS 2019.

The Dynamics 365 menu that is used by x++ developers has been moved under Extensions menu:

Dynamics 365 Menu

Update Model Parameters
If you tried updating model parameters (Extensions > Dynamics 365 > Model Management > Update model parameters…) You will notice a new tab (step) called select friend packages.
I looked up Microsoft docs to check related documentation but found nothing about it. So I did some testing myself, the purpose of this step is to allow models referencing a specific model to access its internal artifacts. For example, if you have model X referencing model Y, then model X will appear under select friend packages tab for model Y, when you updat model Y parameters and select model X as a freind package, then model X will be able to access internal methods/classes of Y.

I created 2 models AZ Demo and AZ Demo 2, AZ Demo 2 references AZ Demo. AZ Demo added AZ Demo 2 as friend package. When I open AZ Demo descriptor files I see AZ Demo 2 added under <InternalsVisibleTo> tag.

<?xml version="1.0" encoding="utf-8"?>
<AxModelInfo xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
	<AppliedUpdates xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
	<Customization>Allow</Customization>
	<Description></Description>
	<DisplayName>AZ Demo</DisplayName>
	<Id>896000244</Id>
	<InternalsVisibleTo xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
		<d2p1:string>AZDemo2</d2p1:string>
	</InternalsVisibleTo>
	<Layer>12</Layer>
	<Locked>false</Locked>
	<ModelModule>AZDemo</ModelModule>
	<ModelReferences xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays"
		i:nil="true" />
	<ModuleReferences xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
		<d2p1:string>ApplicationFoundation</d2p1:string>
		<d2p1:string>ApplicationPlatform</d2p1:string>
		<d2p1:string>ApplicationSuite</d2p1:string>
		<d2p1:string>FleetManagement</d2p1:string>
	</ModuleReferences>
	<Name>AZDemo</Name>
	<Publisher>AZ</Publisher>
	<SolutionId>00000000-0000-0000-0000-000000000000</SolutionId>
	<VersionBuild>0</VersionBuild>
	<VersionMajor>1</VersionMajor>
	<VersionMinor>0</VersionMinor>
	<VersionRevision>0</VersionRevision>
</AxModelInfo>
Update model parameters

Create new project
in Visual 2019 the create new project dialog has changed, ensure to enter Finance keyword to find the right project template.

Once selected, it will appear under Recent project templates on the left side for the next time you are creating new project:

Create Project

Visual Studio 2019 Debugging Options for D365 Dev Environment
In VS 2019, to debug D365 code you will need to have the correct settings which can be found under: Extensions > Dynamics 365 > Options > Dynamics 365 > Debugging. Under this tab you have the option to select which packages/models you want to include in your debugging, this is newly introduced by Microsoft to speed up debugging process and avoid VS crashes.

Debug items in the solution and items in specific packages. limiting the number of items being debugged provides a better debugging experience > Include Packages:

Debugging D365 Code

As you might know in previous Visual Studio versions you had 1 option to select: “Load symbols only for items in the solution”. if the option is selected, then you can only debug current solution items’ code, if not selected then you can add breakpoint to any artifact under any package/Model.

Dynamics 365 for Finance / SCM Order Labels in label file by ID

After recent development environment upgrade to 10.0.26 release, I noticed when I compile any D365 project containing label file, the label IDs in the file get re-ordered alphabetically. This is a new out of the box feature added by MS probably to enhance fetching labels.

If you want to turn this feature off/on in Visual Studio, Open Options menu by navigating to Dynamics 365 > Options…

D365 Options Menu

Click on Projects tab under Dynamics 365 menu. You will see a new option added:

Order labels in label file by their ID

Projects Options

By default, this option is enabled.

Dynamics 365 for finance & Operations SSRS Report errors and solutions

Issue 1: When you modify SSRS report in Visual Studio, then compile the solution and Deploy report, most of the time when you try executing the report you might get below error:

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

The solution to fix this error is to compile the entire AX model.

Sometimes you might need to redeploy the report however compiling the model would be sufficient.

Issue 2: SSRS report compilation error:

Deploying rdl files for report AZCustomReport  :
AZCustomReport.Report.rdl
An error occurred while deploying the report AZCustomReport.Report, AZModel.
This might be because the SQL Server Reporting Services has not been installed, or is not configured correctly.
System.Web.Services.Protocols.SoapException: The number of defined parameters is not equal to the number of cell definitions in the parameter panel.
at Microsoft.ReportingServices.Library.ReportingService2005Impl.CreateReport(String Report, String Parent, Boolean Overwrite, Byte[] Definition, Property[] Properties, Guid batchId, Warning[]& Warnings)
at Microsoft.ReportingServices.WebServer.ReportingService2005.CreateReport(String Report, String Parent, Boolean Overwrite, Byte[] Definition, Property[] Properties, Warning[]& Warnings)
Deploying rdl files for report AZCustomReport failed.

The solution to fix this issue, is to check Report datasource Parameters, since I am modifying the report, I would right click the report added to the solution, then choose compare with latest version. If there are extra parameters added but they are not supposed to be on the report, remove them by editing the report xml file. If there are missing parameters, then add them.

SSRS Report Parameters

Issue 3: Newly added fields to the report are now showing when I run the report.

The Solution is to remove these fields from the report, then add them back. Compile and Deploy report.

Microsoft Dynamics 365 Finance & Operations apps Email Throttling

A new feature has been added to Release 10.0.21 to Email parameters to configure email throttling by email provider for both Exchange and SMTP providers. This feature limits number of outgoing emails per minute.

The default is set to 30 email per minute which makes sense to Exchange and Office 365 email providers as this is the maximum number of emails per minute Exchange will allow you to send emails out.

For SMTP provider, depending on the service the maximum number of emails sent out per minute can vary, but for sure it is more than 30. So remember to configure it correctly if you have a batch process that send out emails out of Dynamics 365.

Email throttling

Dynamics 365 Finance/Supply Chain Management Release 10.0.21 performance and interface improvements

In this blog I will list some new features introduced by PU 10.0.21 that have great impact on the application performance as will as new form grid control feature. Another exciting feature is the form layout view that allows you to switch between standard and custom views.

Release to warehouse

MS has introduced two new enhanced Release to warehouse forms for sales orders and transfer orders, these forms represent a significant performance improvement over existing “Release to warehouse” form.  Beside decoupling sales orders from transfer orders, new much needed improved queries to calculate and retrieve 1000s of lines in about 2 seconds or under.

The location of these forms:

Warehouse management > Release to warehouse > Release sales orders to warehouse

Warehouse management > Release to warehouse > Release transfer orders to warehouse

REF: https://docs.microsoft.com/en-us/dynamics365/supply-chain/warehousing/release-to-warehouse-process

Form Grid Control Enhancement

The enhanced form grid control brings improved line entry which allows to enter data in the first row then move on to enter data in the next one while its working in the background to run logic and execute validations at the same time for the previous row.  If there is an issue with the previous row you will get a popup message to fix data in the previous row (Processing has stopped because of a validation issue. Go to row with issue”, when you click on Go to row with issue link it will take you to the row with error. 

This is a game changer in Dynamics 365 regarding data entry speed, the user will focus on entering data and move to next row while the application in the background processing the entry and saving to database.

Standard View and personalization

Some users personalize forms layouts.  For example, you can add/hide a field control, or re-order controls on the form…etc.

When you open any form in 10.0.22 first thing to notice next to the form title is the “Standard/My view” option. What this does is allows the user to switch between personalized and standard for layout. 

In this example I have added “Activate change management” field to the purchase orders grid, then saved the view:

After personalizing the form layout you can save the new view and also have the option to make it the default view every time you access the form:

After saving the view, you have option to switch between standard and custom form layout:

Freeze column – Grid

Another exciting feature is the “Freeze column” which allows the user (Just like Excel) to select a column to be always visible when then scroll to the side:

Group by Column – Grid

This feature allows you to select a column to display rows grouped by the selected column, in the example below I selected to group purchase orders by Vendor account:

Once you freeze by vendor account the grid instantly groups rows by the selected columns:

How to securely store and retrieve secrets and passwords In Azure Key Vault and use them in Dynamics 365 for finance and operations using x++

Note: when I use term password in this blog I mean: password, Azure Application Secret, Application Id ..etc. etc.

Passwords and secrets are sensitive data and must be handled with care.   There are many reasons for Dynamics 365 F&O application require use of passwords or secrets, i.e. generate file on demand and automatically place it under Azure blob storage or secure FTP, or access external API services in real time ..etc. etc.. 

Key Vault

In this blog we are not talking about recurring integrations scenario, for recurring integrations we would use other Azure integrations tools such as LogicApps or MS Flow to orchestrate integrations.  

Microsoft has built in functionality in Dynamics F&O allows to access passwords stored in Azure Key Vault using x++.   Azure Key Vault enabled storage of password, secrets, keys, certificates etc. etc..  Think of it as secure Azure cloud password manager.

Here is a list of benefits of using Key Value to store password:

  • Password Security:  passwords are secured and protected when stored in Azure Key Vault.
  • Password Control: passwords can be updated in Azure Key Vault.  This means applications using the key vault will get the updated password.
  • Key Vault is almost free ($0.03/10,000 transactions)!

Create Azure Key Vault

Login Azure Portal https://portal.azure.com/ and search for Key vault.  Make sure to click on the Key Vault Icon

Click on Create key vault button:

Create Key Vault

Fill the required fields:

  • Subscription: Select valid subscription account such as VSE subscription.
  • Resource group: Select proper resource group or just enter a new name to create new resource group.
  • Key vault name: it must be unique key vault name.
  • Region: Choose region.
  • Pricing Tier: for this demo I will use standard.. For implementation it is preferred to use Premium for additional features.

I left other options to defaults. 

Click on Review + Create button.

Create Key Vault

Click Create button.

Create Key Vault

Give it a few moments to create the resource.

Click Go to resource button.

Key Vault Created

Assign Azure Client Application to access Key Vault

To access Azure key vault you need to create App registration under Azure Active Directory. 

I will not demonstrate how to create app registration in Azure, if you need guidance follow this link:

https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app

Under the key vault menu, select Access policies.

Key Vault Access Policies

Click on + Add Access Policy button:

Add Key Vault Access Policy

Next to Select principal, click on None selected:

Select Azure App registration

In the search box, type the name of the app registration or enter the app Id.  From the search results select the App registration, then click Select button:

Select Azure App registration

Click Add button:

Add Azure App registration to the Key Vault

From Secret permission drop down, select Get and List, then click Add button:

Select App Registration permissions to Key Vault

Add Password/Secret to Key vault

Under Key Vault menu, select Secrets, then click on +Generate/Import button:

Add Secret to Azure Key Vault

Enter the following:

Name: This name will be used to fetch the secret from D365 F&O

Value: the value of the App secret

Click Create button:

Add Secret to Azure Key Vault

Repeat the same for the App Id.

We are done with Azure portal, lets move to D365 F&O.

Set up MS Dynamics F&O

In D365 F&O navigate to

System administration > Setup > Key Vault parameters:

Click on New button and enter the following:

Name, Description: up to you what you want to call the key vault in D365 F&O

Key Vault URL: this must be copied from the Azure portal

Key Vault client: this is the App registeration that has access to the Key Vault.

Key Vault secret key: the secret of the App registeration used to access the Key Vault.

Under Secrets, click + Add button to add the secrets/passwords stored in the Key Vault:

  • Name: Must be unique
  • Secret: you must use the following format: vault://<KeyVaultName>/<SecretName>
    • <KeyVaultName>: This is optional and can be ignored.
  • Secret type: Manual

Click validate to ensure your entries are valid.

Key Vault Parameters

To use the Key Vault secrets by code use the following snippet:

private static str getKeyVaultSecretValue(str _keyvaultSecretName)
{
    KeyVaultCertificateTable    certificateTable    = KeyVaultCertificateTable::findByName(_keyvaultSecretName);
    str keyvaultValue = KeyVaultCertificateHelper::getManualSecretValue(certificateTable.RecId);
    return keyvaultValue;
}

REF: https://docs.microsoft.com/en-us/dynamics365/finance/localizations/setting-up-azure-key-vault-client

REF: https://azure.microsoft.com/en-us/services/key-vault

if you are looking to work with certificate files, you first need to activate this option in System parameters:

System administration > Setup > System Parameters: under General tab, set Use advanced certificate store to yes:

No alt text provided for this image

In Azure portal you need to follow steps listed in this MS link to upload the certificate (pfx) file using PowerShell script. The steps here are a bit vague and I did not get a chance to test uploading certificate then call it from D365 F&O:

https://support.microsoft.com/en-us/topic/maintaining-azure-key-vault-storage-ebd478ba-446e-61cc-4a17-39c1a64cc2d6

Next blog I will talk about how to generate Azure authorization token to access Azure service.

Microsoft Dynamics 365 for finance & Operations Development environment IISExpress keeps on crashing

Today, I stumbled upon an issue with the development environment having IISExpress crashing and no one was able to browse D365 F&O environment.

By default IISExpress starts automatically when opening visual studio (yes, I know we can change the default to IIS by modifying DynamicsDevConfig.xml) acting as the host of the D365 F&O application.

By checking Event Viewer logs and found that AxDB LOG file size has grown dramatically and the drive hosting it ran out of space.

AX is shutting down due to an error. Error during initialization of Message Broker. Please verify that your AOS instance has connection to the AOS Database. Error messages follow: Could not execute operation against the SQL Database. The transaction log for database ‘AxDB’ is full due to ‘LOG_BACKUP’. Exception details: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. —> Microsoft.Dynamics.Ax.Xpp.Messaging.MessageBrokerStartupException: Could not execute operation against the SQL Database. —> System.Data.SqlClient.SqlException: The transaction log for database ‘AxDB’ is full due to ‘LOG_BACKUP’. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand

MSSQL Logs Drive:

MSSQL Logs Drive

Resolution

To clear up disk space we need to shrink DB Log size.  This can be done in various ways:

  • Stop AOS and IIS services
  • Restart SQL Server Service
  • Or Right Click the database name and choose: Tasks > Shrink > File
  • Or Use of DBCC SHRINKFILE command (best option)

To get the temp log files names, run the following SQL select statement:

SELECT name, file_id, type_desc, size * 8 / 1024 [TempdbSizeInMB]
FROM tempdb.sys.database_files
WHERE type_desc = 'Log'
ORDER BY type_desc DESC, file_id

Using the output from the select statement, execute DBCC SHRINKFILE command for each file:

use tempdb

Go;

DBCC SHRINKFILE(templog, 10);

If the DBCC command is not decreasing the file size try clearing the plan cache:

DBCC FREEPROCCACHE