Ever since D365 Finance & Operations V10, we’re in the Managed Updates model which aligns all Customers on a similar Platform Version – It’s the so called “One Version” strategy which brings a lot of benefits. But is there really ONE VERSION in reality? We have License keys, Parameter modules, SysFlighting and Feature Management which already contains 250+ Features in V10.0.11 PEAP. Did you all enable them? If you sum all these parameters, D365 Finops installations can fundamentally differ even if the underlying Platform version is similar.
Now with D365 Retail (Commerce) there is yet another variable – A relatively new Retail/Commerce Parameter area which is controlling Retail functionality behind the scenes… In this blog post we’ll dig out all the Features that can be enabled from here. Fellow Functional and Technical D365 Retail/Commerce consultants sit tight: this area is likely to become more and important in the future. It can also be really helpful for your own customisations.
1 – Commerce Configuration Parameters – Introduction
If you open D365 Commerce and you navigate to Commerce Parameters > Configuration Parameters you end up in an area which seems rather boring:
But it’s actually the opposite: this is the place where unexpected magic can be unleashed. Maybe you remember the .INI files from the old days or the .config files in web applications – This is the place where you can set any parameter and parameter value in OPEN TEXT. So imagine you’re coding your own new Retail Feature and you’re implementing new magical Business Logic to enhance Omni-Channel Retail in 3 flavours: “Legacy”, “Full Retail” and “Ultimate Retail”. However, the “Ultimate Retail” flavour takes you months to build and you only want to enable it for a few special customers who will beta test it. It’s actually your little secret. In your X++ code, you then code a reference to evaluate a new Value MySecretRetailFeature in the Configuration Parameters grid with the 3 possible values “Legacy”, “Full Retail” and “Ultimate Retail”. Default is “Full Retail”, so all customers silently work by this setting. You don’t need to bother about implementing a new custom tab “My Customisation” with a new dropdown which is visible for all customers. Instead, you’ve just built your own secret Retail Flight Key (!).
If you look into the X++ code in D365 Commerce you’ll find Retail flight keys which are implemented by Microsoft behind the scenes. But we fellow D365 Commerce fanatics live in a special world: The D365 Retail/Commerce world. So OUR Flight Keys can even have more footprint as we have the ability to ship them to the Channel Database sourcing D365 Commerce Run Time (CRT). From there they can control behaviour of D365 POS, the Commerce Frontend and Retail API connected 3rd party applications. The shipment of the parameters happens through the RetailConfigurationParameters subjob which sits in the 1110 Global configuration Scheduler job:
In this blog post we’ll take a look at all the features which are exposed in this area, both in the D365 Backend as well as Commerce Run Time (CRT). Only a few of them are documented. Before we dive into more detail, here’s an example of a Retail Flight Key that is actually documented (Microsoft Docs):
FEATURE: Enable the ability to see Product Ratings and Reviews on the D365 POS
CONTEXT (Microsoft Docs): Product Rating and Reviews can be captured in the Commerce Storefront and made available in-store to serve the interaction between Store associates and Customers (for example aided by a dual screen POS).
This feature can be enabled by inputting the following Flight Key: RatingsAndReviews.EnableProductRatingsForRetailStores=true
2 – List of ‘Hidden’ D365 Retail/Commerce Features: D365 Backend
If you want to inquire all Retail Flight Keys developed by Microsoft which can be unlocked through the Commerce Parameters > Configuration Parameters form, then do the following:
- Open the D365 AOT in Visual Studio
- Search for “featurecontrol“
- Select one of the classes -> Right mouse button -> View code
- Scroll all the way up to the top of the code which lists the Flight Keys as constants:
See below an overview of all Flight Keys I could find in D365 V10.0.11 PEAP in applying this approach – Before you dive into this list please note:
- Column “Default” indicates what the default setting is if the key is not set at all. In some place this is commented in code. Please note that the comment in code may be wrong compared to actual behaviour. I have not tested this (!).
- Note that for Flight Keys that are used in the D365 backend, a string to int conversion is taking place when the Parameter value is read from the table. So to enable a Flight Key the word “true” is to be inputted and “false” for disabling. D365 Commerce Run Time (see section 3 in this blog post) expects integer values 0 or 1 (!). So this is also how you can distinct HQ vs Commerce Run Time (CRT) related Flight Keys :):
Overview | Retail & Commerce Flight Keys in the D365 Finance & Operations Backend
3 – List of ‘Hidden’ D365 Retail/Commerce Features: D365 Commerce Run Time (CRT)
As stated before, Retail Configuration Parameters (Retail Flight Keys) can be set in the Retail Parameters form in the D365 Finance & Operations back end and then shipped to the Channel Database by the 1110 Distribution Schedule. From there, D365 Commerce Run Time can use them to control operation in POS, Commerce Storefront or any other App. if you’re unfamiliar with the CRT Architecture principle, then I’d recommend you to read my blog post on the Basics of the D365 Retail and Commerce APIs. As will become clear below, Microsoft have already implemented the use of the Flight Keys in CRT in quite a lot of places and this is growing with every new D365 Release (!).
It’s pretty easy to find all the use of the Retail Configuration Parameters (the ‘hidden’ Retail Flight Keys’) inside CRT if you take my ‘Engine Room’ approach – For the Tech interested – Note: this is similar to finding an X++ reference for a table/form in the AOT:
- Open .NET Reflector as described in the blog post and ensure to operate it against the latest CRT DLLs.
- Navigate to Microsoft.Dynamics.Commerce.Runtime.Entities > Microsoft.Dynamics.Commerce.Runtime.DataModel -> RetailConfigurationParameter
- Select RetailConfigurationParameters -> click right mouse button and select Analyze
- Expand the tree structure and expand the child element Used By – Now all the references are listed:
I’ve inspected these references and listed the actual parameter key/value pairs below. Please note again that I have tested only some of these parameters.
Overview | Retail & Commerce Flight Keys in D365 Retail CRT
4 – Closing Words
Working myself down the lists above, I’ve discovered some really interesting Flight Keys – I’ve already applied some of them in my current project. Each of the Flight Keys is really a story in itself and testing can be time consuming. So please share your experience if you get to test any of them or find new ones in upcoming versions.
Note: While applying some of the Flight Keys I found a small bug in the use of the Flight Keys: some of the Flight key values exceed 60 characters while the Value column in Commerce Parameters > Configuration Parameters only allows for 60 characters. Even though this leads to truncation, the parameter is still picked up by D365 Finops. Microsoft is likely to fix the truncation in V10.0.13:
I hope this article inspired you to get even more out of you D365 Commerce implementation!