Don’t be the Window Dressing Consultant

Welcome to the world of Window Dressing Consulting, where the appearance of knowledge and success is always a layer thicker than the foundation it’s built on. It’s a glittering path for those enchanted by the allure of titles and high salaries, with little regard for the hard work of generating actual value or, heaven forbid, real results.

First and foremost, a window dressing consultant is a master of the art of looking busy. Meetings? Scheduled back-to-back. Reports? Exquisitely formatted, yet beautifully devoid of substance. This isn’t just a job; it’s a performance art where the illusion of work is the masterpiece.

Acrobatics and the Mirage of Success

In the realm of Dynamics 365 implementations, some consultants play acrobats, twisting projections and bending budgets to present a facade of flawless execution. This performance, while mesmerizing, often masks the real challenges and true progress of system integration. The success of a Dynamics 365 project shouldn’t be measured by the dazzle of immediate results but by the solid, lasting value it delivers. Real expertise shines through in transparent practices and genuine achievements, not in the illusory spectacle of quick wins and inflated metrics.

The Symbiotic Relationship with Buzzwords

Ah, the ever-evolving lexicon of business buzzwords: synergy, paradigm shift, AI/Copilot. A window dressing consultant doesn’t just use them; they thrive on them. These words are the smoke and mirrors in their toolkit, a way to dazzle and bewilder, turning the absence of substance into a seemingly profound revelation.

The High Road to Nowhere

Embarking on the path of window dressing consulting might seem like a high road, paved with the gold of good intentions and grand titles. But beware, this road leads to nowhere. It’s a circular track that runs on the fuel of appearances, never reaching the destination of actual value.

A Mismatch of Paths

Let’s be clear: the essence of a consultant’s job is to unearth real value for their customers, their employer, and themselves. It’s about balance. When one becomes a purveyor of facades, selling advice that’s as hollow as a chocolate Easter bunny, they’re not consulting; they’re conning.

In the grand scheme of things, the consulting path demands integrity, insight, and, above all, balance. If you find yourself drawn to the shimmering surface of window dressing, remember that it’s the depth that counts. The world of genuine consulting is about creating lasting value, not just a dazzling exterior. So, if you’re contemplating a career as a window dressing consultant, you might want to consider this: at the end of the day, it’s better to be a lighthouse of truth than a mirage in the desert of deception.

Chatty 4.0 has helped me with this text, but the core essence remains my view;  Don’t be a Window Dressing Consultant.  Generate measurable value every day.  This means value for the customers, Value for your employer and value for yourself.  And if you wonder how I interpret value;  it’s cash! 

Dynamics 365 – Power BI reporting – Do NOT

Here is a super quick guide for what NOT to use as base line information when building reporting:

Do NOT create reporting on data originating from Sales Table and Sales Lines.  These data change a lot, and are not permanent.  Think of Sales Table and Sales Lines as a “journal”, that have little value after the transactions have been posted.  Also, remember that Sales Table and Sales Lines can easily be deleted and archived to keep the Dynamics 365 lean and up to date.  Aim to do the reporting on CustInvoiceTable/line instead for invoiced orders.  For “faster” reporting to show what orders came in yesterday you can do some highly filtered reporting, but as soon as the sales orders are invoiced, think that the transactions are gone. Power BI is optimized for aggregated and summarized data, not for processing large volumes of transaction-level detail in real-time.

The same applies to Purchase Table and Purchase Lines

Do NOT create reporting on data originating from InventTrans.  Especially do not enable track changes on this table to get “delta” updates in BYOD or in Azure Synpase.  It just slows down the transactions, and you end up with a sluggish and slow system.  You will also experience a lot of blocking in the DB.  Also remember that Dynamics 365 will archive inventory transactions, so they are not permanent.

Do NOT create reporting transactional on-hand tables.  Use inventory visibility instead.

In short – really, really, really rethink on what data you are using for reporting.  You will thank yourself afterwards, and your “lessons learned” list will be shorter.

D365 eCommerce : Let’s talk about WEBP

In the architectural overview of Dynamics 365 eCommerce we can see that there are a few central components dealing with digital assets like images, videos and documents.

A central component is image resizer service that automatically adjusts the size and quality of images according to the device and context of the user. This helps improve performance and user experience. In essence it is performing a LOT of caching of resized images.

The format is :
&w=WIDTH_NUMBER
&h=HEIGHT_NUMBER
&m=MODE_NUMBER
&q=QUALITY
&f=IMAGE_FORMAT

WIDTH_NUMBER and HEIGHT_NUMBER specify the width and height values in pixels (0–3000), and MODE_NUMBER specifies the image resizer mode to use.

The image resizer is quite compute intensive, so the end result is heavily cached end to end.  It also seems that the resizer is a shared service per geo.

To better understand the image resizer I have performed some light weight test, by using the F12 developer tools, and here is a tip to test and find what parameters does fit your requirement.

Let’s take the Microsoft demo site : https://www.adventure-works.com/duonovi-pro-men-s-coat/68719519871.p

When I press F12 and filter on images, I can see the URL to both the CMS and the image resizer

If I right click on one of the requests I can edit and resend:

I can then test the performance and timing loading of the pictures, by changing the w, h,q, f and m:

I can also just add additional parameters like I have done above, by adding “test=Test1”, as this will bypass the server side caching and allows me to test the performance of the resizer.  By clicking “send” I can then get a quite good ide of how long a “cold cache” image resize would behave.

So to save you the time, I did a few tests so that you could see the difference in imnage sizew and resonse time. (The server here is in the US, while I’m in Norway)

ScenarioImage sizeTime
Fetching the “raw” image without cache (png)360 kb921 ms
Fetching the “raw” image with cache (png)360 kb141 ms
Testing with PNG uncached
&w=0&h=772&q=80&m=6&f=png
526 kb970 ms
Testing with PNG cached
&w=0&h=772&q=80&m=6&f=png
526 kb135 ms
Testing with jpg uncached
&w=0&h=772&q=80&m=6&f=jpg
66 kb527 ms
Testing with jpg cached
&w=0&h=772&q=80&m=6&f=jpg
66 kb88 ms
Testing with webp uncached
&w=0&h=772&q=80&m=6&f=webp
18 kb782 ms
Testing with webp cached
&w=0&h=772&q=80&m=6&f=webp
18 kb45 ms

So my unofficial conclusion is that fetching images uncached takes a long time.  The reason is that the resizer uses a lot of time, and I also see the larger the raw file is, the more time is uses to create the cached versions.

But when the image is cached, the webp format is superior and also results in the fastest download time and image size.  As far as I see in the site builder, the current modules are fetching images in jpg format, and this gives a OK cached performance.

What we have done in our projects is to switch to the webp url for better performance on loading images.  I specially see that on the PDP (Product Details Page), when looking at the zoomed image, the f= parameter is not present.  And if you have a large PNG raw, then the timing of resizing and fetching the image can be many seconds:  Like https://images-us-prod.cms.commerce.dynamics.com/cms/api/stpmsksxpr/imageFileData/search?fileName=/Products%2F61100_000_002.png&fallback=/Products/61100_000_002.png&m=6&q=80

I also think it is a good idea to land on a standardized raw image size, and my recommendation is W=1280 and H=1972. When fetching the picture from the resizer, also try out q= in the range of 50-80 to balance between picture size and quality. On a server cached scenario you should look for a “waiting for server response” in the range of 40-60ms and content download around the same.

Conclusion

When working with pictures in Dynamics 365 eCommerce, be aware of the format and size in the URL to get good performance.  Start looking into if you want to try out the webp format to get even better performance. (Not supported in std modules yet, but the resizer seams to support it and will require that you clone a few modules to add support for this).  Also read the following page to better understand possibilities : https://learn.microsoft.com/en-us/dynamics365/commerce/e-commerce-extensibility/image-component

Happy DAX’ing 🙂

D365 new year.  Let’s take the trash out.

Exciting news from Microsoft has just landed a new preview feature, and it’s all about making our Dynamics 365 environment cleaner, more efficient, and compliant.

In a recent Yammer post, Microsoft announced a significant upgrade to the storage capacity experience in the Power Platform Admin Center (PPAC) for Finance and Operations. This new (preview) feature enables a deep dive into the storage consumption for each table within the Finance and Operations environment. Now, administrators can not only see the total storage used but also understand which tables are the heaviest. This level of detail was previously available only for Dataverse tables but is now extended to include Finance and Operations, bringing a new era of transparency and control.

Why is this Important?

1. Optimized Performance:

Data clutter is not just a storage issue; it can significantly impact the performance of your Dynamics 365 system. By identifying and cleaning up large, outdated, or unnecessary tables, you can streamline processes and improve overall system efficiency.

2. Cost-Effectiveness:

With the clear visibility of data storage, you can manage your resources better. Cleaning up unnecessary data can help stay within your storage capacity entitlements, avoiding additional costs.

3. Improved User Experience:

A well-maintained system with relevant, up-to-date information enhances the user experience. It makes data retrieval faster and more accurate, aiding decision-making processes.

How to Make the Most of This Feature?

  1. Regular Audits: Schedule regular audits of your Dynamics 365 data. Use the new feature to identify high-storage tables and assess whether the data within is current and necessary.
  2. Establish Data Cleanup Policies: Create policies for data retention and cleanup. Ensure these policies are in line with legal requirements and business needs.
  3. Involve Stakeholders: Engage with various departments to understand the relevance of data. Sometimes, what seems redundant in one context is critical in another.
  4. Leverage Automation: Consider automating the cleanup process where possible. For instance, set rules for archiving old records.
  5. Monitor and Adapt: Post-cleanup, monitor the performance improvements and storage savings. Use these insights to adapt and refine your data management strategies.

And to understand how and what to clean up, then the following post is helpful :

https://learn.microsoft.com/en-us/dynamics365/fin-ops-core/dev-itpro/sysadmin/cleanuproutines

Happy DAX’ing !

CoPilot in Dynamics 365 implementation portal

Have you explored the Dynamics 365 implementation portal (https://experience.dynamics.com/FTimplementationportal )? You should! Lot’s of value and checklists available there.

The Dynamics 365 Implementation Portal is designed to assist both customers and partners in guiding their Dynamics 365 projects to a successful completion. This portal offers detailed implementation advice and strategies to mitigate risks, tailored to various workloads and applications within a project. Initially, it was a key resource for the FastTrack for Dynamics 365 program, aimed at customer implementations. However, it has since expanded to offer a comprehensive, self-service experience for all users.

When customers onboard their project with the Implementation Portal, they gain access to specialized guidance that is in line with the Success by Design framework. This approach is endorsed by both the FastTrack and the Dynamics 365 product engineering teams, ensuring that the advice provided is both relevant and effective.

I just learned that Microsoft launched the Implementation CoPilot Public Preview.

In the portal, check out the icon on the bottom right of the page, and feel free to ask the CoPilot for assistance.

It will look for all the Dynamics 365 and Power Platform Documentation, as well as Success By Design and Implementation Guides.

 

Happy DAX’ing

D365 eCommerce and Relevance search – When life gives you lemons, make lemonade

Dynamics 365 Commerce utilizes cloud-powered search to enhance product discoverability. This feature is crucial for customer interaction across various channels like e-commerce and point of sale (POS), ensuring customers can quickly find products. This search experience includes advanced capabilities like faceted navigation, immersive autosuggest, and sorting options for better product discovery and scalability required for e-commerce traffic​​.

BM25 ranking

It is not always easy to understand exactly how the current search is working, and I will try to explain. The core center of the search is based on the ranking system BM25, where ‘BM’ means “Best Match”. BM25 is a popular ranking function used by search engines to estimate the relevance of documents to a given search query. In simpler terms, it’s a formula that helps determine how well a document (like a webpage, article, or product description) matches a search query. Here’s a basic explanation of how it works, using a simple example:

  1. Term Frequency (TF): This refers to how many times a search term appears in a document. For instance, if you’re searching for “chocolate cake” and a recipe mentions “chocolate” 10 times and “cake” 5 times, these numbers contribute to the term frequency part of the BM25 calculation.
  2. Inverse Document Frequency (IDF): This measures how common or rare a term is across all documents. If every recipe on a site mentions “cake,” then “cake” is a common term and has a lower IDF. However, if only a few recipes mention “chocolate,” then “chocolate” is rarer and has a higher IDF.
  3. Document Length: This part of the formula adjusts for the length of the document. A longer document might naturally use a search term more often, so BM25 compensates for this. For instance, a long article that mentions “chocolate” 10 times might not be as relevant as a short article that mentions “chocolate” 5 times.
  4. Query Length: BM25 also considers the length of the search query. The relevance of each term in the query to the document is considered to determine the overall relevance of the document to the query.

Example:

Suppose you have two recipes on a cooking website:

  • Recipe A: A short recipe for “Chocolate Lava Cake” that mentions “chocolate” 3 times.
  • Recipe B: A long article about the history of cakes that mentions “chocolate” 10 times.

If you search for “chocolate cake,” BM25 would calculate the relevance of both documents based on how often “chocolate” and “cake” appear in each (TF), how common these words are across all recipes (IDF), and the length of each document. Despite having fewer mentions of “chocolate,” Recipe A might be rated more relevant than Recipe B because it’s more focused and shorter, making its use of the term “chocolate” more significant.

In essence, BM25 helps search engines prioritize documents that are more likely to be what the user is looking for, based on how terms are used within them and how those terms are distributed across all documents.

Azure Search

In D365 eCommerce Azure search ranking is determined by underlying search engine algorithm BM25. You can refer to this document to understand how it works https://learn.microsoft.com/en-us/azure/search/index-similarity-and-scoring . It is basically a variant of the TF/IDF algorithm. The algorithm also takes corresponding language index (Like for nb-no locale is using “nb.microsoft” – Norwegian language analyzer) for all language fields like Name, Description, Keywords, Attributes etc. I asked Microsoft to explain one specific scenario we have been struggling on, and that is when searching for lemons (Sitron in Norwegian), and why we could not make this the highest ranking on the list. Instead, it came ranked as number 2. It is important to mention that the product name in this case is “SITRON KG”. If I rename the product is “SITRON” it will be ranked as number 1.

The reason why product sitrongele is returned as highest ranked product is because, with nb.microsoft analyzer, the word sitrongele is split into below tokens in search engine inverted index:

 “tokens”: [

       {

           “token”: “sitrongelé”,

           “startOffset”: 0,

           “endOffset”: 10,

           “position”: 0

       },

       {

           “token”: “sitrongele”,

           “startOffset”: 0,

           “endOffset”: 10,

           “position”: 0

       },

       {

           “token”: “sitron”,

           “startOffset”: 0,

           “endOffset”: 6,

           “position”: 0

       },

       {

           “token”: “gelé”,

           “startOffset”: 6,

           “endOffset”: 10,

           “position”: 0

       },

       {

           “token”: “gele”,

           “startOffset”: 6,

           “endOffset”: 10,

           “position”: 0

       }

   ]

 The SITRONGELE is compound word in Norwegian which combined by sitron and gele, so that it is split into tokens including both sitron and gele. That is why sitrongele is also returned when searching for “SITRON“.

Although both “SITRONGELE” and “SITRON KG” contains the token SITRON, the document for SITRONGELE product contains more matched token than document for “SITRON KG“:

From the above table, we can see that there are 6 matched tokens in “SITRONGELE” document, but 4 matched tokens in “SITRON KG” document. The more matched tokens, the higher rank of the document. That is why SITRONGELE product is in front of SITRON KG product in search results.

The BM25 algorithm adjusts its rankings based on term distribution within the available data. It tends to perform well with longer queries due to its handling of term saturation and information length consideration. Despite its effectiveness, BM25 has some limitations. It does not understand the semantic meaning of query terms or documents, which means it might not fully capture the search context. Additionally, BM25 treats all user queries equally, lacking a personalized approach to search results. Moreover, BM25 is subject to the limitations of the terms and data it is applied to, and its effectiveness can be influenced by the nature of the available information and the queries.

Based on this understanding we can see the importance of having the right searchable product name, search name, description, and attributes. What I further would like to have is a way to better control the ranking by having the ability to boost certain products based on campaigns, pricing, availability, and also to easier control with per site/legal entity. I also in the future hope to see search features that are self-improving and learn what customers are searching for and improve the search results accordingly.

There are extensibility options that developers can do to adjust the search algorithms, and it is advisable to involve Microsoft if there are specific needs, and there are also ISV solutions available in the marked place, and one of them being recommended are the unbxd.com. I have not yet talked to them or understood their offering, but it is a path to investigate if even more advanced search capabilities are required.

I would also like to thank the community for 2023. It has been a very productive year with lots of learning and new features. 2024 will be the year we see more F&O/eCommerce deliverables in the AI/CoPilot area, and that will be super interesting.

Happy Dax’ing

 

Dynamics 365 eCommerce, search and no hype

Hey there, eCommerce enthusiasts! Get ready for some exciting news from the Dynamics 365 universe. Microsoft’s hitting pause on Product recommendations for newbies, but hey, who says we can’t have a little fun in the meantime?

Enter the world of ChatGPT for Excel – think of it as your personal eCommerce wizard! This nifty tool is like having a magic wand to conjure up snazzy search terms for products on your eCommerce site. Just line up your products, wave the formula wand, and voila – five awesome search terms for each item, in as many languages as you need. Abracadabra!

Here’s the secret sauce:

  • List your products (the more, the merrier!).
  • Apply this cool formula for instant, catchy search terms.
  • Mix these into your search attributes and watch the magic happen.

The great thing is that the AI understands the product and will result in better search terms.

And because we love to experiment – I played around with ChatGPT for Excel to juggle the product display order. Check out this spell:

=AI.ASK(“Rank between 1 and 1000 on expected popularity. Only reply with the number. No text. It’s OK to randomly choose a number. Low number is a popular product, and 1000 is less popular”;B2)

A little more tweaking and we could be onto something epic. And guess what? This is just the tip of the AI iceberg in Excel! Just imagine the fun when Microsoft CoPilot jumps into Excel – it’s going to be like having your own AI sidekick! So, stay tuned, keep experimenting, and happy DAX’ing! Let’s make your eCommerce journey an adventure to remember.

D365 – Overriding code with a hack(100% meaningless)

The following blogpost is 100% meaningless and can in no circumstances be used for anything other than better understanding Dynamics 365 code and playing around. What I’m about to show will NOT help you in any way, or make you more happy.

When developing in Visual Studio you are restricted to make overrides to any Microsoft code. We are currently ONLY using extensions. You can read more about the concept here.

But in rare occasions when working with analyzing standard code, it could be interesting to make a change to the standard code, compile and execute to see the effect. It could be scenario’s where we want to inform Microsoft of improvements or issues. It could also be related to cooperation with Microsoft on the CDE (Community Driven Development).

When trying to make changes to an existing (SYS) object you will get the following error informing you that you are not allowed to make any changes to the ‘Application Suite model.

But there is a way to “hack” your way around it. You can change the Layer in the model descriptor file. For the application suite you can find the model here:

In the descriptor file you can make changes to the Layer, moving it from SYS and upwards, like into the ISV layer:

If I select “8” as layer, then the model is moved to the ISV layer.(You also need to do this to some more descriptor files)

Then the code can overridden, and you can play, test and learn.

And before you pump me full of “We don’t do this” replies, remember I titled this as 100% meaningless

Now, do this the RIGHT way and build your solutions using extensions, and come to terms with the fact that the application is sealed, and we have a “One-Version” approach!

 

Happy DAX’ing

 

Dynamics 365 : Performance benefits of Omnichannel media management

Scheduled for release on Monday, October 23, 2023, Microsoft’s Omnichannel Media Management feature promises significant performance gains, particularly in eCommerce and POS. Beyond merely optimizing digital asset performance, this feature offers a range of functionalities:

Key Features:

  1. Integrated Product Image Management: Dynamics 365 now includes an iframe that links directly to the site builder. This seamless integration offers granular control over the presentation of product images.
  2. Optimized Load Times and Caching: The new feature ensures quicker image loading and more effective caching. Upcoming support for the webp image format is expected to further accelerate load times.
  3. Reusable Media Assets: No longer are unique filenames required for each product. Media assets can be reused across different products. Several layers of fallback.
  4. Dimension-Specific Assignment: Media can be allocated to particular product dimensions, allowing for the omission of irrelevant dimensions.
  5. Bulk Media Management: Tab-separated .tsv manifest files facilitate the bulk export and import of media assignments and metadata.

Performance benefits

The Omnichannel Media Management significantly enhances user experience. For instance, where the previous approach took over 400ms to load an uncached image, the new feature reduces this time to just 21ms.

Current way of loading pictures was a “search” with a 401ms server response time and only a 15 minutes cache.

New way of loading pictures is fetching the pictures directly with a 21 ms server response time and is also adding 120 hours of caching.

Additionally, with effective caching, content download time is virtually eliminated, leaving only a 19ms server response time. This is close to the theoretical minimum, constrained only by datacenter latency.

Given these advantages, there’s a compelling case for starting to use the new Omnichannel Media Management solution. It adds a new dimension of performance and usability to the Dynamics 365 Commerce suite, making it a crucial update for those invested in performance optimization.

So, try it out if you are using eCommerce or POS, and want pictures to become lightning fast!

Setting the correct time zone for service accounts in Microsoft Dynamics 365

The setting of the correct time zone for service accounts in Microsoft Dynamics 365 is crucial for accurate business logic execution, particularly when dealing with time-sensitive functionalities like order deadlines. Given your interest in Dynamics 365, eCommerce, and Supply Chain, this topic is indeed pertinent.

Hidden within the user accounts in Dynamics 365, you’ll find service accounts like RetailServiceAccount, which is vital for real-time calls between the Cloud Scale Unit (CSU) and Finance & Operations (F&O). To locate these accounts, navigate to the user section and apply the isMicrosoftAccount = true filter.

Then you get the following list:

Each service account has a default preferred time zone, sometimes set to GMT-8 for RetailServiceAccount. This becomes crucial when you’re building features that rely on date and time calculations. For example, order deadlines for same-day or next-day deliveries are often determined based on the time zone. Within the code, you may encounter instances where DateTimeUtil::getUserPreferredTimeZone() is used, as in the SalesCalcAvailableDlvDate class. This function fetches the time zone from the user executing the code, which for retail calls is typically RetailServiceAccount.

If the time zone isn’t set correctly for service accounts, time-sensitive calculations like order deadlines could be inaccurate. This method appears 430 times in the standard codebase, making its impact substantial. To modify these settings, you can simply add the preferred time zone column to the user account, click ‘Edit,’ and make the necessary adjustments. This is also applicable to other settings like language and number format.

It’s imperative to set the correct time zone for service accounts executing system jobs or batches in Dynamics 365. This ensures that your business logic related to date and time operates as intended. Given the relevance of this topic to your work in eCommerce, Supply Chain, and management consulting, it’s a detail that warrants careful attention.

And then to a question: What should we do if we operate in multiple time zones? Then I think there are more improvements to be made to ensure that time zone calculations are better handled, and is not originating from the preferred time zone on a service account.

Dynamics 365 CSU – Cache is king

In the Dynamics 365 eCommerce project we where implementing a pricing logic that was quite complex and required many steps to calculate a price. The prices are unique for each customer, product, and other aspects, and the prices had to be calculated each time and in real-time. But calculating prices are a time- and compute intensive operation and is not always aligned with how today’s customers expect eCommerce sites to work. The expectation is that when browsing a site, the prices are there instantly, and that it is easy to search, filter, refine and ‘order by’. In traditional eCommerce sites, the prices are most often a flat table of precalculated prices, and often in the millions of records. But we did not want this. We wanted a pricing logic that was dynamic and real-time contextualized, but still fast.

The way we then first designed it was to create a price caching logic in the CSU (Cloud-Scale-Unit), where the prices were stored in a memory cache for up to 24 hours. We tested this approach in a Tier-2 environment, and we were amazed by the performance we archived. Then we decided to deploy to production, and quite soon we realized that we did not get the expected performance. Somehow it seemed like the cache we built was sometimes hit and sometimes not. The production systems behaved differently than what we tested in test/UAT systems. In essence it was sometimes fast, and sometimes slow.

I then went deeper into telemetry of the CSU, that have become very good in later releases, and where Samuel Ardila Carreño have also have provided some excellent CSU/Azure Data Explorer dashboard as exemplified under. Here we can see the exact timing of each API call, frequency, and average. A very nice way to understand performance of API’s.

But back to the story, where the caching failed. In this case we had one CSU for eCommerce, and we see that caching results is not what we expected. By deeper analyzing through the Azure Data Explorer, we realized that One CSU is NOT one machine. Is it multiple stateless services. In the environment we have, we could trace it down to 15 CSU microservices that seem to be load balanced. This is why our new memory cache is failing. The load was under the hood shifting from one microservice to another. The probable reason for this is scalability. We have also realized we can update CSU’s and eCommerce packages in prod without seeing any downtime. This is probably because updates and traffic are just being switched from one stateless microservice to another. And this was the main reason why our memory caching was not working.

When we learned this, we decided to not only have cache in memory, but also to create a shared cache table in the CSU. So, when a price was calculated we stored the price in both the memory cache, but also on a cache table that all 15 microservices read from. This gave us a much better performance that is closer to eCommerce customers’ expectations.

I have always wondered why the eCommerce SCU’s come in Tier-1, Tier-2 and Tier-3 levels, and it have never been clearly explained to me the technical differences. But I think I see it now. It is probably the number of stateless micro services under each CSU.

So the lessons are; 1. Understanding the underlying architecture is essential for achieving the expected outcome. 2. Cache is king, when done correctly.

 

 

 

4 Commerce hypes from Gartner

At the inspirit365 Vision Summit in Paris, I got to present details from the latest Gartner report, Hype Cycle for Retail Technologies, 2023. There are 4 areas I would like to relate to the Dynamics 365 Commerce offerings, where I think Microsoft have a very strong offering. I cannot share the Gartner report, but I highly recommend you to seek it to get the full report.

I will try to link these 4 technologies towards what we have in Dynamics 365, and what Microsoft have in their short upcoming roadmap.

1. Retail Media Technology Platforms

The definition of this hype is technology platforms for retail that supports media networks. This allows stores to display products from third parties, such as brands, while the customer is shopping. Most often used online, it can also be used in physical stores for a comprehensive retail strategy. The upcoming Omni-channel media management features fit’s into this this hype.

In the complex ecosystem of retail, efficiency and simplicity are paramount. Microsoft Dynamics 365 Commerce addresses this by offering native media management features that are seamlessly integrated between the Commerce headquarters and site builder. This integration streamlines the media asset management workflow by centralizing it in the Commerce headquarters, the very locus where merchandising decisions are made. This strategic enhancement reduces complexity and operational friction for both system integrators and merchandisers. By offering an omnichannel media management solution that is immediately functional ‘out-of-the-box’, Dynamics 365 Commerce substantially elevates the efficacy of retail operations. You can see the solution in action on YouTube.

2. Unified Commerce Platform

Dynamics 365 have been fortunate to be in this space for a long time. The definition of this hype is having a comprehensive trading platform simplifies commerce across all touchpoints, allowing customers to see, purchase, and engage. It connects stores, kiosks, websites, mobile, social media, and smart devices, regardless of how they are used. I cannot emphasize enough the importance of have a out-of-the-box architecture to support this. I know that more is wanted, but I also see ongoing investments like micro services for Inventory Visibility, and more coming. It may be a hype for Gartner, but for Dynamics 365 it is an reality.

3. Contextualized Real-Time Pricing

The definition of this hype is having real-time pricing based on attributes and relationships allows for immediate price adjustments across all touchpoints. Prices can be influenced by factors such as competitor pricing, special offers, customer loyalty, and immediate demand. This dynamic pricing model enables businesses to respond swiftly to market changes, optimizing revenue and enhancing customer satisfaction. It’s a modern approach that aligns perfectly with the imperatives of omnichannel retail.

The feature from Microsoft that supports this, is the Manage attribute-based omnichannel sales pricing. The full documentation is available here, but I wanted to show my interpretation of this solution. Prices are a sequence of steps, and triggers/attributes explaining when the different components should be active.

Attributes are properties that can be placed on not only customers and products, but also on more transactional properties like sales order header and line. When a price component is activated are the union of them.

As each component can be activated it means we can have a price tree, that controls the sequence and enablement of the components according to attributes. Microsoft uses the following diagram to show how different calculations approaches can be built.

Performing real time calculations are a compute intensive achievement, and if you have been in the field of combinatoric and permutation complexity we know that calculating the best and perfect price is difficult. And I know that this have a special focus at Microsoft. The solution is still in preview, and I expect that we will see performance improvements in the near future.

4. AI in retail

The definition of AI in commerce is about technology that adapts without specific programming, based on data and usage. These systems recognize patterns, predict events, and operate autonomously. AI is critical for algorithmic trading and is often a part of business applications provided by vendors. Indeed, the integration of AI capabilities can transform retail operations by automating complex tasks, offering predictive analytics, and personalizing the customer experience. In a marketplace increasingly driven by data, AI’s role in enabling intelligent decision-making is invaluable. The first step on this journey are Co-Pilots, that we gradually see is lighting up in the Dynamics 365 stack. Most merchandisers with large product catalogs want a more efficient way to enrich products, and one of the area I look forward to is the use of CoPilots to generate product enrichment content for e-commerce sites/sitebuilder. To see it in action, take a look at the following YouTube video.

Conclusion

The future of commerce is not a distant horizon; it’s unfolding right here, right now. The latest advancements captured in Gartner’s Hype Cycle for Retail Technologies, 2023, echo strikingly well with the functionalities and roadmaps of Microsoft’s Dynamics 365 Commerce. From leveraging omnipresent media platforms and unifying commerce across various touchpoints to real-time, attribute-based pricing, and the game-changing role of AI, Dynamics 365 is not merely keeping pace—it’s setting the pace. These aren’t just technological ‘hypes’; they are tangible solutions shaping the next chapter of retail. I invite you to not just read the report but to experience these innovations firsthand. Remember, we’re not talking about the future in abstract terms; with Dynamics 365 Commerce, the future is an executable file. Stay tuned for more insights, and as always, let’s continue to bridge the gap between technology and real-world retail solutions.

It’s Time to Increment Dynamics 365 to Version 11: A Focus on Dataverse and CoPilot Innovations

In the evolving world of business applications, Microsoft Dynamics 365 has consistently played a pivotal role in empowering organizations to drive digital transformation. With a rich history of releases, each version of Dynamics 365 has brought about significant enhancements and introduced innovative features to streamline operations, improve customer engagements, and accelerate business growth.

As we observe the continuous enhancements in Dynamics 365, it’s imperative to focus on the newest developments that have spurred the dialogue around moving to the next version – Dynamics 365 Version 11. The key catalysts for this conversation are the advancements in Microsoft Dataverse and CoPilot

The Dataverse Revolution

Microsoft Dataverse, formerly known as the Common Data Service (CDS), is an integral part of the Dynamics 365 ecosystem. It’s a robust, scalable data platform that securely stores and manages data used by business applications. Its seamless integration with Dynamics 365, Power Apps, Power Automate, and Power BI provides an unrivaled foundation for building and deploying applications that meet complex business requirements.

The latest innovations in Dataverse have truly redefined its capabilities, making it a cornerstone of Microsoft’s business applications strategy. With enhanced security features, improved data management capabilities, and new integration points, Dataverse has become more powerful than ever before. It is poised to revolutionize how businesses manage, use, and derive insights from their data. This dramatic shift in the data landscape is a compelling argument for incrementing Dynamics 365 to version 11.

The Emergence of CoPilot

Alongside Dataverse, another innovation that warrants the move to Dynamics 365 Version 11 is Microsoft CoPilot. CoPilot, a new feature of Dynamics 365, utilizes advanced AI to assist users in navigating the system, understanding data, and making informed decisions. It has the potential to greatly improve user productivity and efficiency by offering personalized guidance and insights.

The cutting-edge capabilities of CoPilot, ranging from its ability to provide contextual insights, to its ability to guide users in accomplishing tasks, are truly transformative. CoPilot’s sophisticated AI capabilities not only enhance the user experience but also elevate Dynamics 365’s potential as a holistic business solution.

The addition of CoPilot to the Dynamics 365 family marks a significant step forward in Microsoft’s commitment to leveraging AI for business optimization. This evolution in Dynamics 365’s AI capabilities further underlines the need for a move to version 11.

Time for Dynamics 365 Version 11

Given these advances in Dataverse and CoPilot, it’s clear that Dynamics 365 is heading towards a new era of innovation and progress. The extent of the changes brought about by these enhancements signifies a new phase in the evolution of Dynamics 365. This phase warrants a new version number – Version 11.

Moving to Dynamics 365 Version 11 is not just about acknowledging the impressive innovations in Dataverse and CoPilot. It’s about recognizing the strides Microsoft is making in using technology to transform how businesses operate. It’s about acknowledging the continual evolution of Dynamics 365 and its increasing impact on digital transformation strategies worldwide.

In conclusion, the time for Dynamics 365 Version 11 is now. As we embrace the remarkable advancements in Dataverse and CoPilot, let’s look forward to a new chapter in Dynamics 365’s story – a chapter defined by innovation, adaptability, and the relentless pursuit of empowering businesses to achieve more.

A Million Moments of Gratitude: Celebrating Our Milestone Together

As I sit down to pen this message today, my heart brims with a sense of joy and humility. Why, you may wonder? I’ve just crossed an incredible milestone that I scarcely dared to dream of when we embarked on this journey. My blog, my shared space of learning and exchange, is right now surpassing the monumental mark of 1 million hits! A figure so vast, it’s almost daunting. Yet, each digit in this number represents a moment of connection, a spark of learning, a shared slice of life. It’s a testament to the power of the Dynamics 365 community we’ve built together – a community that pulsates with vibrancy and engagement. To you, my cherished community, I owe an ocean of gratitude. 🙏

A heartfelt thank you to my community friends, inspirit365 colleagues, and our cherished customers. Your unwavering support, creativity, and dedication are the pillars on which this blog stands. Your commitment to preserving the quality and integrity of our content is why we have been successful in nurturing such a robust and engaged readership. This journey is as much yours as it is mine, and I’m profoundly grateful to be traversing this path with you.

I would be remiss if I didn’t extend a special word of thanks to my fellow Dynamics 365 bloggers and other community sites. Your work is a constant source of inspiration, and together, we’re making this community stronger and more vibrant. Looking to the future, I pledge to keep pushing the boundaries, to continue to evolve and strive for better. In this Dynamics 365 community, we grow, learn, and form lasting friendships together, united by our shared Dynamics 365 passion and curiosity.

From the deepest recesses of my heart, I say once again, thank you. Here’s to the next million!

 

//Kurt

D365 eCommerce implementation and costs

I’ve received several inquiries about implementing Dynamics 365 eCommerce in a B2B context, with a recurring concern being the associated costs and efforts. In this post, I will share my experiences and recommendations for creating a B2B eCommerce site catering to both local and regional markets. The example presented here represents a medium-sized eCommerce implementation. Keep in mind that there are possibilities for smaller B2B implementations with fewer requirements and greater reliance on “out-of-the-box” solutions based on Adventureworks or Fabricam.

Super-duper executive summary:

Under many assumptions, and with an eCommerce site handling 5,500 orders/month and eCommerce revenue of $2,750,000/month, you should budget approximately $14,500/month for licenses and an implementation cost of around $500,000 over six months. Averaging this cost per month across 36 months results in approximately $35,000/month. While the price may seem steep, it is essential to consider the alternatives and the additional efforts required to integrate third-party eCommerce sites with F&O. Dynamics 365 pricing aligns with what is commonly observed in the market. Integrating with third-party eCommerce systems might appear attractive in a PowerPoint presentation, but often leads to a complicated web of integrations, workarounds, and issues entirely detached from Microsoft’s innovation. Don’t deceive yourself. It is also crucial to maintain a close relationship with your implementation partner, as they can offer valuable insights on how to keep licensing costs within a reasonable range.

Licenses

The go-to resource for licensing questions is the Dynamics 365 Licensing Guide, which is updated regularly. In a nutshell, here’s what you need:

  1. Dynamics 365 Commerce HQ users (usually attach licenses to other F&O users).
  2. Select a Tier level, which determines the scalability and boundaries regarding the number of orders per month you can have.
  3. Add overage Tiers if your order count exceeds the limits of Tier SKU.

Additionally, Microsoft has introduced the concept of “bands” that regulate the number of transactions allowed based on average order value. A sweet spot for B2B is typically Band 3/4, which grants the following number of orders per month:

For example, a B2B customer with 5,500 eCommerce orders and an average value of $500/order would generate $2,750,000 in monthly revenue. The expected eCommerce licensing cost for such a scenario would be around $14,500/month. In this example, it would correspond to 0.51% of the sales basket value or $2.6/order in eCommerce licensing costs.

Implementing Dynamics 365 eCommerce offers a seamless and integrated online shopping experience for your customers. While there may be cheaper solutions available, they will require you to tackle integration challenges yourself, often leading to limitations, issues, and a siloed approach. The implementation process involves planning, design, configuration, customization, testing, deployment, staff training, and support. For B2B, specific requirements may necessitate extensions, as they are often not covered by the standard solution.

Resource plan

A minimum of 6 months project is my recommendation, and the following resource plan:

  1. Project Manager (1 FTE)
    Responsible for overall project management, communication, and coordination.
  2. Business Analyst/Functional architect (1 FTE)
    Responsible for gathering requirements, analyzing business processes, and developing functional specifications.
  3. Commerce/eCommerce Technical Architect (1 FTE)
    Responsible for designing and configuring the Dynamics 365 eCommerce solution, Site builder and setup in Azure B2C.
  4. Senior/Expert Developer(s) (4 FTEs)
    (X++) Responsible for customizing and integrating further and to handle extensions in F&O
    (C#) Back-end developer that deeply understands the Commerce SDK and CRT(Commerce runtime), and can create B2B extensions packages.
    (JavaScript/TypeScript) Back-end developer that can create and clone eCommerce modules.
    (CSS) Front-end developer that works in the front-end design
  5. Quality Assurance Specialist (1 FTE)
    Responsible for testing and ensuring the quality of the solution.
  6. Training Specialist (0.5 FTE)
    Responsible for staff training and creating user guides and documentation.
  7. Support Staff (1 FTEs)
    Responsible for ongoing support and maintenance.

Project Phases:

Discovery/Initiation (1 month)
  • Define project objectives, scope, and requirements.
  • Assemble project team.
  • Develop project schedule and milestones.
  • Identify key stakeholders and establish communication plan.
  • Perform risk assessment and develop risk mitigation strategies.

Solution modeling (1.5 months)

  • Analyze current business processes and identify areas for improvement.
  • Design eCommerce site layout, navigation, and user interface.
  • Configure Dynamics 365 eCommerce modules and settings.
  • Set up product catalog, pricing, promotions, and inventory management.
  • Configure payment gateways and shipping options.
Build (1.5 months)
  • Develop custom functionality and extensions as needed.
  • Further integrate Dynamics 365 eCommerce with existing extensions.
  • Configure customer segmentation and personalization features.
  • Implement advanced analytics and reporting capabilities.
Test (1 month)
  • Perform unit, integration, and system testing.
  • Conduct user acceptance testing (UAT).
  • Address and resolve any identified issues or bugs.
  • Perform performance and security testing.

Deploy/Go-Live (1 month)

  • Plan and execute data migration strategy.
  • Deploy Dynamics 365 eCommerce solution to production environment.
  • Train staff on using and managing the eCommerce platform.
  • Create user guides and documentation.
Support and Continuous Improvement (ongoing)
  • Monitor system performance and address any issues.
  • Gather user feedback and implement continuous improvements.
  • Provide ongoing support and maintenance for the eCommerce solution.

Scope of an eCommerce site

Dynamics 365 eCommerce consists of several modules and components that need to be included in the scope. To keep track of this, I recommend building a WBS structure in DevOps that allows for following of each aspect of the implementation. The main aspects I recommend are:

  1. Processes
    Create a list of all processes associated with eCommerce, that includes steps of what is needed to be done in Dynamics 365 F&O/HQ. Like creating products, prices, customers on hand etc. In a typical implementation you will have 50+ processes, that also cover processes that your customers will do in the eCommerce site.
  2. Azure B2C and Azure frontend
    Authentication and access control are essential elements and expect to have 20+ work items related to this topic.
  3. Modules
    Create a list of all D365 eCommerce modules. In total there are 71 main modules, and several sub-modules. The reason why you want to create a WBS on these, is because you will have to evaluate if you should clone some of them, and if you should create a theme/design around them. You also need to be ready to create subtasks to handle languages/translations and to further create local regulatory features. The developers will mainly work on these.
  4. Fragments
    Create DevOps work items on components that can be reused across the site. These are fragments like headers, footers, breadcrumbs, common metatags, and internal/external scripts. Also keep in mind that you may need to create channel and language specific versions of each fragment. In the projects I have been with there will be 16+ fragments multiplied with number of channels and languages.
  5. Templates
    Create work items on templates that will be reused. In a normal project there will be 12+ fragments.
  6. Pages
    Create a work item per page. Normally this will be approx. 40 pages multiplied with the number of channels and languages. The pages you should invest in are PDP (Product Details Page), Search and Category pages, Cart and Checkout pages. They need to be flawless!
  7. Theme
    You may start out with cloning the standard Adventureworks/Fabricam theme, and then extend from there. We often see that we want elements from both the themes, and we then need to do a lot of work on the themes to get the right look and feel. DO NOT UNDERESTIMATE the work required on design and theme and be prepared to invest heavily in this area. This is more than selecting colors but is directly linked to how eCommerce users will interact with the site. Expect to have 50+ work items in this, and you must go deep to the design you require.
  8. Media library
    eCommerce is a very visual delivery. Good pictures are essential. Not only for products, but also to create visual elements in the site.
  9. Microsoft support cases
    In the project you need a very tight relationship with Microsoft Support for clarifications. Not everything is available as documentation, and sometimes you need to have expert help to push things forward. Especially since there are new features and improvements quite frequently. I recommend adding all communications and SR numbers in your DevOps, so that you bring visibility and tractability of all support. Also, very often you may have feature requirements that is not part of standard, and you may need to find workarounds to ensure progress. Waiting for the next release may not always be an option. It is not uncommon to have 50+ support cases through implementation.

Conclusion

Implementing Dynamics 365 eCommerce in a B2B context may seem like a Herculean task, but with the right planning, resources, and a sprinkle of determination, you can make your eCommerce platform the talk of the town. Remember, Rome wasn’t built in a day, and neither will your eCommerce site, but if you follow the steps laid out in this guide, you’ll have a platform that even Julius Caesar would approve of. So, gear up and embark on this eCommerce odyssey, and who knows – you might just become the “Amazon” of B2B commerce. Good luck, and may the Dynamics be with you!

D365 eCommerce – My personal copy-paste blog

This blogpost is meant for myself as a copy-paste of stuff I often use when working with Dynamics 365 eCommerce. If others can benefit from it just makes me happy.

URL’s when working with D365 eCommerce sites:

Depending on the URL, you need to add the prefix ‘?’ for the first parameter, and ‘&’ for the next etc.

preview=inprogres Preview pages that is not published in sitebuilder

source

debug=true Turns on debug mode and displays module errors

source

theme=fabrikam

theme=starter

theme= adventureworks

Change the theme of the site to check if there could be issues with your own theme.
domain=xxx.yyy.com Set the domain. Only relevant on dev/test environments
cachebypass=get Bypasses any cache

To sign-out

[URL]/_msdyn365/signout

Also when looking for page source code, search for “SDK” to see version of the site.

Robot.txt

When working with eCommerce sites, I don’t want the search indexer to pick-up development stuff. Here are the Robots.txt that prevents search engine to crawl the site. As realized in practice, search engines REALLY want to sell our stuff, and you may get unwanted traffic into your development site.

User-agent: *

Disallow: /

Yarn commands

When working in visual studio code the following commands are used a lot.

Yarn
yarn --force
Installing all the dependencies specified in the package.json

source

yarn cache clean
Clean any cache
yarn start
Build and launch the Node server using the port defined in the .env file
yarn msdyn365 pack
Creates a package (modules, data actions, themes, and so on). This package will then be uploaded to LCS.
yarn msdyn365 pack --preview
Get the good stuff. Creates a package with the latest SDK preview version
yarn msdyn365 update-versions module-library

yarn msdyn365 update-versions retail-proxy

yarn msdyn365 update-versions sdk
Updates the entity (SDK, module library, or retail proxy) versions to the latest release.

and add –preview to get preview versions

remove-item .\yarn.lock
Remove the lock
Remove-Item -path .\build\ -recurse -force

Remove-Item -path .\lib\ -recurse -force

Remove-Item -path .\node_modules\ -recurse -force

Remove-Item -path .\submission\ -recurse -force

Remove stuff

CSU URL’s:

https://%5BCSU-URL%5D/commerce/GetEnvironmentConfiguration Get a lot of metadata of version, .NET etc
https://%5BCSU-URL%5D/commerce/Swagger Yupp, but not yet

URL’s when working with D365 F&O:

Depending on the URL, you need to add the prefix ‘?’ for the first parameter, and ‘&’ for the next etc:
https://site.domain.com/page.format?parameter1=value&parameter2=value…

lng=nb-no

lng=en-us

Quick switching between languages
theme=0..4 session color

density=30

density=21

&density=30 on a tablet and use &density=21 on your PC
Cmp=USFM Company
limitednav=true Reduce navigation
embedded=true Remove any fancy many/banner stuff
hidesplash=true Hide startup splash screen, and save 0.000001 secound in startup time
debug=true Debug mode of Dynamics 365, so see timings
Info=true
mi=xxx Menu item
mi=SysClassRunner&cls=xxx Runnable class name, try SysFlushAOD and enjoy the slowly crawling experience of rebuilding any caching (This is a joke!!!)
mode=trial Funny one to guide new users around. I think this is meant for trials

 

D365 Understanding limitations

As we know, the Dynamics 365 portfolio of apps and functionally is extremely rich and have vertical features for most industries. We also know that driving the Microsoft R&D with a tight coordination between the apps is difficult, and I also understand Microsoft want to provide new highly requested features and innovation quickly to the market. In the highly agile and innovative domain we are in, this can be seen as an accelerated delivery of MVP’s (Minimum Viable Products). The nature of MVP is more quickly get feedback from the marked to better understanding on where the next innovation cycle/wave should take the feature.

Understandable this can result in release of features that have limitations and workarounds. Microsoft is quite good in documenting limitations, but I would say we see an increase in limitations where apps and feature combinations that are not supported, colliding or limiting each other. I did a small search in learn.microsoft.com, and there are more than 186 documentation pages describing limitations that you should be aware out. Click
here for the a list of limitations. Also be aware that there are also many undocumented limitations when you try to combine features from different areas like SCM, Commerce, Process industry, Dual Write++.

Understanding limitations can save you for a lot of time in project and prevent implementing scenarios that is not working or supported. My recommendation is to search for limitations as an important step in any implementation, to ensure that you don’t hit into a hard documented limitation. Very often you realized the consequences of the limitations until you actual test.

Here is just a very small example subset of some limitations Microsoft have described to give you an idea:

Demand forecasting Demand forecasting might not be the best fit for customers in industries such as commerce, wholesale, warehousing, transportation, or other professional services.
Cross-company data sharing
  • Sharing can’t be used with dual-write.
  • Deletion of shared records isn’t yet fully supported and shouldn’t be used.
  • Ledger or default dimension can’t be shared
  • Sharing can’t be used in combination with Retail Channel Databases.
Cross-company product sharing Not released yet, but it is very restricted to what can be shared. Do not assume anything, and keep in mind that it is very painful to reverse after you have enabled it. READ THE DOCUMENTATION!
Infinite capacity scheduling for Planning Optimization
  • Supports only infinite capacity.
  • Doesn’t support resource load functionality.
  • Doesn’t consider route scrap.
  • Supports Duration only as the primary resource selection.
BYOD scheduled batch jobs
  • There should be no active locks on your database during synchronization. Active locks can cause slow writes or even failure to export data to your Azure SQL database.
  • You can’t export composite entities into your own database. Currently, composite entities aren’t supported. You must export individual entities that make up the composite entity. However, you can export both entities in the same data project.
  • Entities that don’t have unique keys can’t be exported by using incremental push. You might face this limitation especially when you try to incrementally export records from a few ready-made entities. Because these entities were designed to enable the import of data, they don’t have a unique key.
Data import/export String sizes are limited to 32,768 characters.
Product change management If you have a distinct product, you can change it only to an engineering product that doesn’t track the product dimension in transactions
Active Directory security groups Several of the limitations affect internal control and auditing
Cross-company behavior of data entities
  • Company or legal entity fields other than the system dataAreaId field can’t be recognized or treated automatically in the that way dataAreaId can.
  • The cross-company behavior for views is too restricted to the properties of the root data source, even when non-root data sources have a dataAreaId field.
Asynchronous customer creation mode
  • Loyalty cards can’t be issued to async customers unless the new customer account ID has been synced back to the channel.
Dual Write : Sync on-demand with the Supply Chain Management pricing engine
  • The setup of charges and charge allocations in Supply Chain Management isn’t replicated in Sales.
  • Pricing doesn’t consider special retail pricing that is specified in the Retail Channel column on the sales order line page in Supply Chain Management.
  • Discounts that are defined in the Trade Allowance Management section of Supply Chain Management aren’t considered.
  • Pricing doesn’t consider sales agreements.
You can’t add the Price unit field to the Purchase agreement page
  • Some shared fields in the agreement framework can’t be included in personalizations. This limitation occurs because of the data model that is implemented. Therefore, you can’t personalize the Price unit field.
Movement of inventory with associated work in Warehouse management
  • Only the ad hoc movement is currently supported. That means that you will not be able to move reserved inventory through the movement by template mobile device menu items.

If I’m not limited on time, I can try to add more limitations later. Take care, and remember the future have no limitations

D365 eCommerce : Image it !

In March 2023 the public preview of integrated omnichannel media management features are planned, and I’m really looking forward implementing this feature at customers. In simpler terms, the new feature makes it easier for you to manage all the media assets (like product images, videos, and other documents) related to your online and in-store sales. You can now upload, organize, and keep track of all these assets directly from within Dynamics 365. This way, you don’t have to worry about any complicated setup or struggling with separate systems. With these improvements, managing your media assets will be much smoother and more efficient.

But while we wait for this, we must use what we got. I want to share a small experience that was resolved together with Microsoft support. In essence I was expecting that when using the Adventure Works theme, that I should be able to see 4 pictures of a product like this:

But when trying things out on my own environment I only got the eCommerce to show 1 picture. I double checked that I really had multiple pictures in the, and also checked that the naming of products was set up correctly. Basically, product images should be named “/Products/{ProductNumber}_000_001.png”. 001 is the sequence of the image and it can be 001, 002, 003, 004 or 005.

 

But what as strange, is that I could not even see that the eCommerce site even did a call to fetch picture 002 .. 005 from the media library. After some deeper analysis, it was clear that the main reason why eCommerce was not fetching pictures was that we need to generate picture URLs from the following screens:

Here you can work more specifically assigning the filenames towards the products. You can also edit the list in excel and use different formats. Like using jpeg instead of PNG. I also think it could be possible to add URL’s towards pdf or any other filetypes.

 

So the essence here is that the link between products and media assets can be maintained and controlled from within Dynamics 365. It also means that if you don’t have multiple pictures of a product, you can delete those media URL’s you are not using. This can improve eCommerce performance, as it then will not try look for media assets that don’t exists.

 

I would also recommend to take a look at the Youtube video (How to upload images to Point of Sale using Media Library in Dynamics 365 Commerce) from Eugene Shamshurin for additional details.

 

Take care friends

 

 

 

D365 – This blogpost is not written by ChatGPT

I have played with ChatGPT, and when looking through social media, blogpost and videos, it seems we have now entered the early ages of AI and we can ask ChatGPT to generate almost anything we are asking for. I have started to start ask myself philosophical questions and what will be replaced by these systems. There seems to be no limitations, and the entire community is in the “hype”. We get the feeling that ‘This would change everything’.

But, when I do a deeper reflection and get a deeper understanding of what this could bring, I see that we are still in the very early stages. My impression is that there will take long time before we see drastic changes to the Dynamics 365 community and ecosystem.

  • We will still go to work.
  • Customer will continue to purchase our services.
  • Competence and experience are not easily replaced.

In short; the hype is here, and keep in mind that we have had chatbots since the 1966, and the first was Eliza. Through the 90’s there was also countless others that made us think that ‘the future is here’. Also there are also alternatives like Chatsonic and the google LaMDA that is trying to do the same.

After playing around, I see is:

  • Facts are very often just wrong. I would say the correctness to be like a highschooler with a ‘B-‘ grade.
  • There is no accountability.
  • Missing references to the results.
  • There is a lot of text-predictions, but there is limited creativity.

It is fantastic fun to play around with, and I will use it going forward. This most significant change is that there will be a few new billionaires in the industry. But ChatGPT will not ‘Change everything’ currently, and I hope this blogpost will age well the next 5-10 years.

PS! I asked ChatGPT to grade this blog post, and it gave me a B

D365: BarTender and label integration using REST API

Do you feel that the of printing labels in Dynamics 365 is a bit difficult? The options we have in standard D365 is to learn Wave label printing. Or you can look into ISV’s as ISV Docentric.

Labeling connects the transactional world with the physical world. We meet customer labels requirements for identifying products, pricing labels, locations, receiving labels, shipping labels, units, boxes, pallets/license plates. In addition to just labeling, there are also the requirements for RFID marking products, and some cases to print out plastic badges or tickets. The possibilities are enormous for automating and improving data quality and process automation.

From my personal experience I have preferred the BarTender solution from Seagull Scientific, and they have now also launched a cloud edition of their labeling system. In Wave 2020 Wave 1, there was in the roadmap an integration to BarTender, but this was moved to a future release. Since then, it has been silent. In short, I have not found a good BarTender integration for Dynamics 365.

So, I decided to just create a new one . But this time using a REST based cloud-integration, that could be generic, and that could also be used for all kinds of integrations. My first step was to deeply understand how such a integration should be working. Then I found the following video on how to set it up by accessing a web service where I just had to post a JSON towards a URL. I will try to explain how I did this in Dynamics 365, and exemplifying it by creating an customer address label.

Step 1: Create the label design in BarTender

My first step is to use the BarTender and design the label. I create the Named Data Sources and populate it with data. Here I have 3 data elements like AccountNum as a QR code, CustomerName and CustomerAddress, and have just added some sample data to each of the named data sources.

Now I have a label design, and I next need to populate this design with some data through a web-service.

Step 2. Use the BarTender integration builder to create a WEB-Service.

The BarTender integration builder is a fantastic tool, that makes building a REST-based integration service easy to build. Just import the already created label design, and create a variable for each named data source as demonstrated in the following video. Here you see that I have created a variable for each named data source.

Step 3. Test the WEB-Service.

For testing the label printing, my preferred tool is insomnia. Here I very easily can test my new web-service. I create a Post where a JSON looks like the following: Here I add value to the variables.

I then click “Send”, and in the insomnia, it is reporting back that the label is printed. I did specify that I wanted a PDF version of the label, and here is what I got:

Step 4. Deploy the WEB-Service

The next step is to deploy the service, and how to do this is available in the BarTender documentation.

Preliminary Summary:

At this time, we have a working REST service that will send labels to a printer, by posting a JSON file towards a URL. Our next step is to have Dynamics 365 F&O to generate such a JSON from data and to send it to the webservice.

Chapter 2 : Collect and send data from Dynamics 365 to the webservice

To make this happen, I decided to create a very small extension with the purpose to build the JSON from any data within Dynamics 365. I will show this extension from a user perspective.

Screen 1: Label Types

The first screen created was a place where you could define label types. Each label type have a ID and a name. You can also choose to connect the label towards a Main table identifier or a source class for special cases. In addition, you may further connect to joined tables through a query relation. Then the user us adding named data sources, and each can be a field, display method, class method or a free text. You may also add default values.

In the header you will also have the option to log the label and to create some notes about the label.

Screen 2: Enable the ability to print label from any screen.

The next thing I did was to create an extension to SysSystemDefinedButtons. This allowed me to dynamically add a generic menu on ALL forms, and only if there was a label defined on any of the data sources in the form, a View and print menu will show. I can multiselect records and send them to be printed or logged.

Screen 3: Printed labels

As each print can be logged, each label generated will get a unique label ID, and where all named data source values will be filled based on the label type

If I look at the “header” view I will also see the JSON created.

And this gives me the following label.

Final Summary:

This very small extension gives us the ability to generate the necessary data that can be sent to the label printing webservice. It can also be a candidate to completely replace the standard label printing made available in in WMS module, and further enhance the ability to generate labels all over Dynamics 365. There is also a very simplified API, that allows for label printing to be automatically executed at certain steps. Like in WMS Wave Steps, so that when an action in the WMS mobile is performed, then the label is printed. This way of dealing with labels could also easily to extended to other scenario’s like commerce/POS. Or to generate customer return labels in eCommerce. The possibilities are endless. And as the F&O code basically just are building a JSON to be sent to a web-service the tool can also be used for other labeling software or other 3’rd party tools.

Will the ideas and X++ code be shared with the community?

There is only one way that this would be shared with the community, and that is if Microsoft takes ownership to the solution and makes sure that we in standard very easily can design and create new labeling concepts in external tools like BarTender. If you as a reader have reached to this section in the blogpost, then you can influence this by voting on a Microsoft idea made available here. If accepted by Microsoft they will get the code for free and must ensure that we as a community get a long-lasting best-of-breed solution for label printing.

Dynamics 365 – 90% of everything is crap

Your have surely heard about Sturgeon’s law that “90% of everything is crap”. Dynamics 365 is one of the most comprehensive and feature rich business application in the marked and trying to learn or use all the features would be lifelong study effort beyond the capacity of any person. I can say with 100% certainty that nobody in the world deeply knows about all the available features and functions. When implementing Dynamics 365 at a customer, we often see that only a fraction (10%?) of the available features is being implemented. Does this mean that 90% of what we have in Dynamics 365 is “crap”?

The definition of “crap” is subjective and sometimes controversial, so it’s not always obvious whether something should be viewed as “crap”. But for one person involved and looking at the entirety it could get this impression. The other element is that “crap” is a retrospective experience. You don’t know if something is “crap” unless you understand what is not “crap”. Like Thomas Edison had to evaluate 10.000 prototypes for a lightbulb before he cracked the solution(myth). Did he have 9999 crap’s and one success?

To identify the “crap”, there are one VERY important activity in any implementation that becomes a critical prerequisite to succeed within a constrained availability of resources (time, money, people).

Scoping!

I wanted to share with you some of my best practices on how to address scoping on a very early stage in an implementation project, to identify more quickly what to spend time and focus on. For this there are 3 major pillars of focus in any implementation project: Processes and Responsibilities, People and Planning, Systems and Data

When we are running projects, we therefore always start with a discovery phase where we try to find the right direction and what the implementation project should focus on. The main deliverables are a Project Blueprint/SOW, Process Scope Definition and a Draft Solution Design. This allows the main project to be focused on the 3 pillars from a strategic perspective. Too often I have seen projects jumping into actions and details too early, and skipped scoping (aka “Cut the crap”)

Processes and responsibilities

Doing things in a new way with some degree of business process reengineering can have a positive effect on organization. New cloud technology and new ways of handling responsibilities are key enablers. At inspirit365 we have a process library that consists of 850 processes that is organized into 3 levels and are End-to-End focused. The processes describe responsibilities and are tailored towards how out-of-the-box Dynamics 365 functionality and features are supporting the most common processes. The Level 1 and level 2 processes are for classification, while level 3 is how to perform the processes in the system. As the processes organized around standard features there is a very good way of understanding the end-to-end flow.

To ensure we end up with a relevant list of processes we are running a MoSCoW process, to scope out “the crap”, and will classify the processes in scope according to the following classifications

In an implementation project we will prioritize the “Must have” processes and define the implementation of these processes as the critical path. The other classifications are improvements. What we also try to scope is we should aim for creating a “test script” that will be typically used in UAT and for training purposes.

In essence, we quite quickly get an actionable WBS structure we can divide among the project team, and that can better ensure that the processes are successfully implemented. When we run this scoping classification, we often see that we and up with a fraction of the 850 processes we have in our model. But the important takeaway is that processes vary for each customer based on what they need.

System and Data

To support the processes, we want to quite quickly setup a “baseline” of Dynamics 365. A baseline is a system that is not empty but is populated with as much fundamental setup as possible. Here I like to use what already exists in Dynamics 365; Data Management Templates and build a DevOps hierarchy list of all essential elements that needs to be considered and in what sequence you should set them up on. You can find these standard templates here:

Then you just “load default templates” to create lists of what you should consider and in what sequence you should set them up in.

After you have created this, then just copy the lines into excel and import them into DevOps. We then have a WBS “checklist” of most of the elements that we should consider setting up in the baseline system. When working on this list, we can very quickly see the status of setting up and for scoping what needs to be set up. I also suggest adding the URL to the setup and taking a screenshot of the setup as a documentation of the setup.

This gives a fantastic transparency, and we very quickly can identify what have been setup, and what is identified as “crap”. We also get a fantastic insight of the status of the implementation project. We know exactly what have been done, and what remains to be concluded. Processing through these work items does not take too long, and after a few days of setting up the baseline we are ready to model the processes in Dynamics 365.

People and planning

We have a model that guides the project successfully through an implementation from Discovery/Strategy, Initiation, Implement, Prepare and Operate and as a reference I recommend to use the Microsoft Implementation guide “Succeess by Design”. What we have done is to create our own WBS structure based on main deliverables, that allows to create a clear visibility of the scope, estimates and effort from a commercial perspective. To give a peek into how this looks from a DevOps WBS perspective we have codified all deliverables. And in DevOps we can then follow up the progress all through the project. As we have structures, we can also assign and scope the deliverables down to the essential elements. This allow us to be focused and scope down as much as possible.

Summary

Scoping is an essential. It sets more realistic project objectives and straighten the priorities. The more “crap” you can remove from the initial scope the higher chance you will have to have a successful go-live. My experience is that “scoping down” give a more controllable implementation than “scoping up”. If you have not created your own process-model a good starting point would be to collect as much as possible from Microsoft Learn or from Microsoft docs. From there you can build WBS structures that allows for repeatable scoping with customers. And remember that 90% of everything is crap.

D365 eCommerce : Invalidate the cache

I often work in an WYSIWYG pattern, where I do a change, and then look at the change when working with D365 eCommerce. I’m changing products, attributes, categories, customer hierarchies, forms. One thing that had me irritated, is the extensive caching being done in D365 eCommerce, and you can read more about data action cache settings here. OOB some cache settings have a TTL(Time to Live) of 43200s (That is 12 hours). Also take into consideration that D365 Commerce Distribution jobs needs to be executed. So in worst case scenario’s you have to wait for some time to see some of the changes.

But here is a tip of what I do to speed things up. In sitebuilder, change the cache key suffix.

This invalidates the cache, and in most cases the site is updated.

But!!! It is not recommended to do this extensively in a production environment.

If you also have some additional information or tips, please share

 

 

D365 Commerce : Omitting serialization of null and default values in JSON payloads

I have always been interested in how to improve performance, and I have understood that there is no silver bullet or switch you just can turn to get dramatically improvements. The path towards performance is a delicate balance between functionality, usability, scalability and effort/budget. Together with friends, I think we have found some low-hanging fruits that may shave of milliseconds for POS and eCommerce API’s, but we need your help. If you would like this feature to become available, please use the community superpower() and vote on the following idea:

https://experience.dynamics.com/ideas/idea/?ideaid=9cbbf368-a614-ed11-b5cf-0003ff45afb4

To explain the idea, when the POS and eCommerce is communicating with CSU(Commerce Scale Unit), then JSON is used as the lightweight data-interchange format. It is easy for us humans to read and it is easy for machines to parse and generate. Let’s take a concrete example. When looking up a product, then the attributes of that product is shown, and in the following example I only have one attribute; Item number, but the JSON still contains the complete structure. Sending null and default values is just taking space without transferring any actual information.

Any data we are sending will affect processing of the JSON, and networking time to transfer the messages. By further minimizing the JSON messages we can improve the response times and the performance experience. The JSON generators used with Dynamics 365 to have the capability to omit null and default values, and it is a very small switch to enable, that could reduce the payload quite dramatically (up to 40%-50% on products and product attributes).

Here is a small C# sample code on how to reduce the JSON payload using the JsonSerializerOptions to omit null and default values.

——————————————-

using System.Runtime.Serialization;

using System.Text.Json;

using System.Text.Json.Serialization;

 

[DataContract]

public class TestClass

{

   [DataMember]

    public bool B1 { getset; }

   [DataMember]

    public bool B2 { getset; }

   [DataMember]

    public string? S3 { getset; }

}

 

class Program

{

    static void Main()

   {

       TestClass tc = new() {B1 = true};

       JsonSerializerOptions options = new JsonSerializerOptions();

        options.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault;

        var serialized = JsonSerializer.Serialize(tc, options);

       Console.WriteLine(serialized);

   }

}

Prints: {“B1”:true}

————————————————

If you agree with me, then please vote on the idea, so that Microsoft can implement this performance improvement into future releases.

 

Thanks

Dynamics 365 and the illusions of competence

The Dynamics 365 community is flooding over with excellent articles, video’s, blogposts and learning services, and I enjoy learning new stuff. When I consume the shared content, I feel that I really understand the concept and that it increases my competency. My “knowledge ego” bolster and I feel have a deep understanding on new subjects when I consume what is shared.

Some days or weeks later I get into a situation where it could be useful to express my competency to customers and colleagues, and I suddenly realize I don’t find the right words or is able to express the topic as it should. I then get confused, because I have seen the videos, read the blog’s, and looked into the documentation. Why cannot I always communicate back what I “feel” I have understood? I then realize that I have tricked myself into thinking I was competent.

In psychology the term for this, illusions of competence. There is a misconception that we think that we understand and have learned because we have spent time attempting to do so. To exemplify:

  1. Seeing information in front of you, such as reading a blogpost or seeing a video, doesn’t mean you know it.
  2. Hearing someone come to a conclusion doesn’t mean you know how to get to that conclusion or to explain their argument.
  3. Searching for something on Google gives you the illusion that the information is in your brain.
  4. Spending lots of time with materials doesn’t mean you know it.

In essence we can say that the material our brain consumed into our short-term memory, but never went deep into our long-term memory. And it is in the long-term memory of our brain where the not only facts, but also complex concepts or schemas is the foundation of the deeper understanding. Competence is organizing information into patterns of knowledge, and schemas give depth and richness to our thinking. Understanding and intelligence is derived largely from the schemas we have acquired over long periods time.

I will not try to come up with a good solution, but a good blogpost on how to overcome the illusion of competence is available here.

How does this relate to the Dynamics 365 community?

I have been working with Concorde XAL, Axapta, Dynamics AX and Dynamics 365 since 1997. And I know for a fact that regardless of how much I read, I’m not able to deeply understand it all, as things evolve. As you are reading this post you understand that blogging is also my way for me to understand a topic better. For better understanding and measure my own competence I need to objectively test my knowledge. For this I use Microsoft learn and certifications. It is not bulletproof, but it is the best way I can measure if I have understood a topic.

I’m therefore so happy when I see the Community fellows share their certifications on LinkedIn, and I try to “like” them as much as possible, because I then know that the individual effort for deeper understanding have paid off and we as a community should celebrate this.

BUT! I have a shout-out; There are 3 roles in our community where I very seldom see sharing their learning achievements.

Operations managers, Project managers and Sales managers.

This is people with profound responsibilities does not seem to test their competence. After all, it is often them that takes the final decisions, and they are in a high risk of having illusions of competence.

I therefore challenge Operations managers, Project managers and Sales managers to at least take the beginner certifications to get a better domain understanding, that can lead to better decision making. Here are the ones I would recommend to our dear managers:

Happy Summertime, and wish me good luck in my certification renewals

FastTrack recommendations for success

I give the Microsoft FastTrack team and team producing the docs all credit for the following blogpost! We very often get information overload, and then there is great to get a more compressed summary of what is important to consider in D365 projects. Here is the text from an email that is sent out to customers that is on their D365 journey. All is public information and contains valuable links to the process and documentation. As I find the value of the information/tips in the email as great, I choose to share it with the community, as not all is connected as users into the LCS projects. (PS! The original fast-track email you get have MUCH better formatting than what I’m able to present)

Enjoy 🙂

FastTrack for Finance and Operations Apps Congratulations you will be soon starting the Design and Develop phase!

Dear XXXXX team, The FastTrack team understands that you will be completing the Analysis phase in 2 weeks (we rely on the milestone dates in your Lifecycle Services (LCS) project).
You will be soon starting the Design and Develop phase, which will last until XX-YYY-2022. We, FastTrack team, want to provide guidance and recommended practices for the typical activities at this stage of implementation.

Action required:

  • In project onboarding, you noted that you will have a high number of users. It is important to assess what is the right environment Tier and complete performance testing. For more info, see Selecting the correct Tier.
  • Please update milestone dates in LCS to reflect the real project timeline. We understand that in the beginning of the project it is difficult to predict specific dates. However, we ask you to update those dates to the best of your current estimation. This is important as multiple Microsoft teams rely on these dates.

We would love to hear your feedback about this email! Please use this user survey to share your thoughts with us.

Application lifecycle management (ALM)

  • Define and document the ALM processes for your project and define the branching strategy. Watch TechTalk for detailed guidance.
  • Understand the process of applying updates.
  • Use Azure DevOps for version control to enable traceability and multi-developer scenarios.
  • Make sure all customizations are safely added to source control.
  • Use the Azure DevOps build pipeline to automate builds. Learn more .
  • Have a single deployable package that combines all non-Microsoft code. For self-service topology, this is a hard requirement and during 2020 it will become a hard requirement for standard topology. For more info, see All-in-one deployable packages.
  • Regularly run the customization analysis report (CAR) to identify where custom code should be improved in line with best practices.
  • Keep your environments on the same version.
  • Be aware of the process to turn on maintenance mode in Sandbox and Production environments.

It is important for the project team to define and document the application lifecycle management processes. Here’s an example (graph below) and TechTalk for detailed guidance.

Data management

  • Have a dedicated Golden configuration environment and good governance of changes to it.
  • Understand all available tools for data management operations to be able to select the appropriate method for all project needs. Watch TechTalk.
  • Start preparing master data early. It is common to uncover issues late in the journey, which impacts the go-live timeline.
  • Plan to run user acceptance testing (UAT) on final migrated data.
  • Bring data to Production only after it is validated in a non-Production environment.

There are various data management needs you could encounter in your implementation.

To accomplish these needs, there are several tools available.

The following resources provide you with further details about these tools:

Continuous updates

Microsoft releases 8 updates in a year.

All customers are required to have an update that is not older than 4 service updates. We strongly recommend following the monthly update cadence, however understanding the need for flexibility around business-critical activities we offer the ability to pause up to 3 consecutive updates.

For more info, see Configure service updates and Pause service updates.

Release notes

For each monthly release we publish release notes, which provide details about the changes included in the specific release. Learn more

Feature management

The Feature management workspace allows you to view a list of features that have been delivered in each monthly release and enable/disable those. Learn more. Watch TechTalk.

RSAT

The Regression suite automation tool (RSAT) enables users to record business tasks and convert them into a suite of automated tests. It significantly reduces the time and cost of user acceptance testing. Learn more. Watch TechTalk with demo. Watch TechTalk with setup guidance.

Release plans and Ideas portal

  • Be aware of the features that Microsoft is planning to release in the upcoming period.
  • Share identified gaps in the Ideas portal (or vote on ideas that already exist).

When you are doing the fit-gap analysis, in addition to knowing the current capabilities of Finance and Operations apps it is important to know what enhancements Microsoft is planning to release in the upcoming month, which can help you avoid some customizations or using ISV solutions.

Twice a year Microsoft publishes release plans where we share what are the different enhancements, we plan to release in the next half a year (wave 1 cycle is from April to September and wave 2 cycle is from September to April). Learn more

We listen to your needs and prioritize enhancements based on your feedback. Share your feedback and propose ideas for current product gaps in the Ideas portal. Learn more

Security

Role-based security

Finance and Operations apps use role-based security to assign access to components in the system. A user who is assigned to a security role has access to the set of privileges that is associated with that role.

For more information see “Plan and Implement security”(Microsoft Learn)

Performance strategy

  • Performance of the solution can be affected by various aspects: infrastructure, customizations, ISV code, system configurations, timing of batch jobs, and integrations.
  • It is important to include performance testing as part of Design and development phase and not only in Test phase itself. It will be too late if you do not plan it in advance.
  • Document the customer’s key business scenarios with expected performance metrics and success criteria.
  • Build performance test plan early: define scope, tools, environments, and acceptance criteria.

Here are some additional resources with detailed guidance:

LCS system monitoring

LCS provides various tools to help you monitor, diagnose, and analyze health of your environments. Learn more

Trace parser

Trace parser enables you to take traces and analyze performance. Learn more about how to take traces. Learn more about how to analyze traces Integrations

  • Define integration requirements early.
  • Understand integration patterns and tools, capabilities, and the limitations of each approach.
  • Plan for each integration, not only functional testing, but also load testing.
  • Test edge cases, not only the happy path.
  • Implement error handling and notifications to alert users in case of failure.
  • Don’t misuse OData for high volume import/export of data.

The following integration patterns and approaches are available:

For more information see “Connect to Finance and Operations Apps” (Microsoft Learn)

BI and Analytics

Finance and operations apps have various business intelligence and reporting tools available:

D365 Store Commerce performance test

Hi friends.

A few weeks ago, Microsoft announced that the D365 Store Commerce App is now GA. The MPOS will enter “end-of-support” in release 10.0.33(Spring 2023) according to the following whitepaper. There are still features missing in Store Commerce, like dual display etc, but this will be added in later releases (10.0.28+).

One of the reasons why we have a new app, is to see an improved rendering performance in the POS app. User experienced performance has always fascinated me, and in this blogposts I wanted to do an unofficial performance review of the Store Commerce App in Online and in Offline mode.

First some basic tip: How to install Store Commerce App ?

  1. Read the following docs carefully, and setup D365 Commerce to support offline devices.
  2. Install SQL server. (I’m using the Developer edition) Remember to also install options like SQL full-text Search
  3. Download the store commerce app from LCS asset library
  4. Install the store commerce app using powershell, with the command :
    Store_Commerce Installer_exe_name install –installoffline –trustsqlservercertificate

The test I will be conducting is a very small one, where I scan 4 barcodes, and then do a quick sale. I will be using the Macro Recorder, and running the script 10 times in online and in offline.

  1. D365 Store Commerce Online
    Online scanning of 10 orders took 39s. This means that in online mode running against a T2 (with .net core 3.1) the average time to scan and post this sales basket is 3.9 s.
  2. D365 Store Commerce Offline
    Offline scanning of 10 orders took 50s. This means that in offline mode the average time to scan and post this sales basket is 5.0 s,
  3. D365 CPOS
    I also wanted to compare this towards the CPOS online, and this was a surprise! Scanning of 10 orders took 40s. This means that in CPOS running against a T2 (with .net core 3.1) the average time to scan and post this sales basket is 4.0 s.

My conclusion is therefor that we have a new king in town. The D365 Store Commerce Online is the winning in my test. It surprised me that the D365 Store Commerce Offline actually was close to 1s slower than the online? I think this may be the latest improvements on the CSU that is the effect, and that the improvements exceeds the network latency penalty.

I also want to appreciate the community for the engagement concerning D365: My take on the new Microsoft focus. On LinkedIn the post received more than 45000 views, and from what I hear from Microsoft is that they are appreciating the feedback. I hope to see 2 effects of this, and that is an increase in implementing community ideas, and that the community again can build trust to invest time into the idea’s site.

D365: My take on the new Microsoft focus

On the 6. April 2022 Microsoft had a launch event for Dynamics 365, where Charles Lamanna (Corporate Vice President, Business Applications & Platform) was the key speaker, and presented the latest wave of Dynamics 365. The main innovation theme was organized around 3 concepts; Data, AI and Collaboration.

The main keynote states that Data is ubiquitous, and it’s generated by every part of an organization, and that too often that data is trapped in the ERP and only used for tactical reporting. The storyline here is to unlocking data silos so that it can be used in every business process. And when data is available, then we can apply AI to make predictions and reimagine business processes with automation and by augmenting people. Collaboration processes are a central element to bring people and data together and to enrich both with AI.

As this was a launch event, the focus of new features was organized around these three concepts. This makes the Dynamics 365 CE/DataVerse based apps of the stack the most visible in the launch event presentation. There was very little innovations presented that is based on the Dynamics 365 F&O stack, and on the supply chain investments the new Intelligent Order Management app got the main focus. There where also a substantial time allocated to the Connected Space. But my main takeaway is that Apps based on the DataVerse is where the current innovation focus is.

My thoughts.

I see and understand the direction in tech-stack-unification towards innovations based on the DataVerse as the main platform. I also know that there are investments on the F&O functional stack, but they don’t get the attention and visibility in this launch event. I have been an ERP consultant for 25 years, and the concept of truly and tightly connected systems, transactions, master-data, automation and deep efficient algorithms have been the center for the value I provide to customers. I know for sure that just dumping data into a DataLake or a DataVerse does not solve the actual pains. Putting an AI on top to give predictions and collaborative decision support is great, but yet it does not replace the need for OOB good usability and efficiency of algorithms. We need more than a box of legos where we can build all we imagen. I see and know that the roadmap presented do contains lot’s of new features, but I would like to see more investments to further enhance existing features. Also improving the simple and elementary things to strengthen and improving existing business processes. This could be related to usability, performance, simplicity and further connectivity within the current stack. I know that new innovations and new features are great news and creates attention. But not all customers are ready to implement lot’s of new apps that are still in their early stages and in many cases overkill for what they want to accomplish. Also keep in mind that many customer requirements also have an advanced complexity that makes the use of low-code/power apps not a real working alternative.

My observations

The community have over the last years been able to give feedback through the idea’s site. Here the community votes on good idea’s to further improve existing functionality. This is a goldmine of actual and precise requirements of what users and consultants experience. But we don’t see these community recommendations are being materialized into product improvements. The main focus and attention seem to be on new apps on the DataVerse platform. Let me be more precise. I have taken a look at the D365 Finance, SCM, Commerce and Cross-apps ideas, and in total there are 10.190 ideas, where 306 have been implemented. That is just 3%. I cannot understand that only 3% of community ideas are relevant for a place in the roadmap. The community have spent substantial time in describing these requirements. Here are the actual numbers from the ideas site with the number of ideas and how many that have been completed/included into the R&D backlog.

My wishes

My wish is that the feedback from the community gets more attention as what direction Dynamics 365 should take. If Microsoft want’s, we can together use DATA, AI and COLLABORATION to better understand what D365-customers and the community is requesting as a direction. I’m quite sure the model would predict a very close resemblance to the actual voting on these ideas. I’m not complaining about the direction we are heading, but I am requesting that more R&D funds are invested into what the community are asking for.

I would love to hear Charles Lamanna on the next launch event say that “In our next Wave we will aim to put 25% of the community ideas into our R&D backlog, and we have also processed and given a clear conclusion to the remining 75% ideas. The open community feedback is our inspiration and direction“.

Thanks for reading my thoughts and have a great Eastern.

D365 : A messy tips blogpost

Hi friends.

We learn new things every day, and I wanted to share a new messy blogpost where you will find undocumented some tips. Enjoy.

Azure Zone Pinning

Sometimes I have experienced that Dynamics 365 performs slower than expected. I have in a few scenarios tracked this down the fact that the services are distributed in Azure Availability Zones. It basically means that some times the compute and SQL are not in the same availability zone, and there may be a 2ms latency between availability zones.

So, if you experience unexplainable performance issues, please create a Microsoft support request and ask if they can perform a “Azure Zone Pinning analysis”, and maybe locking the deployment to a single availability zone. You will gain some performance gains, but the “cost” is that you lower the resiliency and reliability for your Dynamics 365 workloads. Microsoft will only do this on production environments and maybe T5 environments. In an unofficial performance review we experienced that opening the custTable form we got a 56% improvement in form opening time on asking on Azure Zone Pinning in a production environment.

Cloud Scale Unit and .NET Core

The CSU is the most central element in Commerce and eCommerce deployment. Microsoft are continuously focus on improving performance, while still ensuring compatibility. When you deploy a CSU, the.NET Framework 4.7.1 that is normally deployed. But you can by creating a
support request ask to change to .NET Core 3.1 on T2+/production CSU’s. If you would like to validate what you CSU is using, then use a browser and type in you CSU URL address and then add /commerce/GetEnvironmentConfiguration If you see “FrameworkName”:”.NET Framework” in the JSON, you got the .Net framework. If you see “FrameworkName”:”.NET” then you have the .NET Core 3.1. In a very limited evaluation, I found the performance gain to be in the area of 5-10 %, but there could be much more when having more complicated price and discount structures, and when the installation scales.

.NET Framework – Total time ~450 ms

.NET Core – Total time ~430 ms

Multiselect product attributes

In eCommerce, product attributes are extensively used to describe products. At customers we see a requirement to be able to select multiple attribute values. Let’s take an example, where we have Material as an attribute. As we can see, the attribute type can be a fixed list as shown here, where the attribute “material” can be metal, wood, plastic etc. But

When setting up the Attribute, we can specify that we allow multiple values:

But when specifying the attribute on a product, we see that we can only select one:

But there is a workaround, and this is to use only ‘Text’ as an attribute type and the delimiter is a pipe character (‘|’)

E.g., Material = Metal|Wood|Plastic

In this way, when you filter on any of the attributes, you will get a result in your eCommerce site or on our POS.

Store commerce app with offline

The store commerce app are now general available. The Store Commerce app runs on Windows devices and can be downloaded from the Shared asset library in Microsoft Lifecycle Services (LCS). The main advantage of the WebView2 rendering engine (the new chromium-based one that ships with Edge). I have yet not benchmarked how performance will be when also using the offline support. But I do expect an improvement in rendering performance. I will update this post later with the results.

 

That’s it for today

D365: 2022Wave1 – Unified pricing service

I have had the chance to look deep into the 2022 release wave 1 plans. There are tons of goodies, and we again see the direction where things are going. There is a lot of investments in the microservices area, and we see the platform opening up like a blooming flower.

There is one specific coming feature that caught my attention; Unified pricing service. I encourage you all to read the business value and feature details.

In essence Microsoft is planning to release a feature allowing for “attribute-based pricing”. I have seen this before in ISV solutions, and it brings a new high value aspect to the more advanced pricing requirements we see in B2B and distribution space. The pricing engine also have a RESTfull API that can expose the pricing to external system.

So, what is attribute based pricing?

Attributes can be any additional property you place on a customer, product, or transactions. Multiple prices/discounts will be triggered based on the properties of the product, and followed up with concurrency modes using best price, compound rules, or price-attribute group priorities. An attribute may anything like customer is part of a chain, area, or are included in specific campaigns defined as an attribute. The same applies to products and transactions that may be marked with attributes that trigger price/discounts. We have seen parts of this in Dynamics 365 commerce with the use of category hierarchies or affiliations that may trigger price/discounts. But pay attention to where this new feature is place; It is place in the “Inventory and Logistics” area, and not in the commerce area. This is a huge plus, as we very often see these requirements at distributors. I do hope and expect that commerce also will benefit for this.

But there is an important aspect when we move into this direction; Prices/discounts are not static records but needs to be calculated in real time. And microservices is the right solution for this.

The only thing I’m disappointed on, is that this feature don’t have a GA date yet, and the public preview is September 2022. And I wanted this yesterday .

But from a customer/consumer perspective this will just make pricing more complicated.

D365 – 252 Solution Blueprint review questions

One of the most important aspects of Success By Design program is to ensure quality in the implementation process and to set the right expectations. One important setup in this process is the Microsoft Solution Blueprint Review workshop that can be offered to customers through extended FastTrack Engagement.

The Solution Blueprint Review workshop covers the following topics:

  • Program strategy
  • Application strategy
  • Data strategy
  • Integration strategy
  • Test strategy
  • Business process strategy
  • Security strategy
  • Application lifecycle management strategy
  • Environment and capacity strategy
  • Intelligence strategy

Solution architects, functional leads, and technical leads are required to attend these workshops. Key stakeholders from the customer and partner teams are recommended to attend.

In the Solution Blueprint workshops there is a lot of questions that you may be prepared to discuss, and that may give you a better understanding of the scope you are going into.

Here are 252 questions that you should be prepared to discuss through the Solution Blueprint process. This list is primary related to Finance and HR. For other operational areas, like Commerce, SCM, Production there may be other types of questions.

Area

Question

Application Lifecycle Management Strategy,Release Process

What is the ALM process and environments, release process, CI/CD, solution management, regression testing, strategies?

Application Lifecycle Management Strategy,Build and Deploy Process

What is the ALM process and environments, release process, CI/CD, solution management, regression testing, strategies?

Application Strategy,Application Architecture

Has the selection of applications and technologies been finalized?

Application Strategy,Application Architecture

Is there a diagram of the to-be application architecture?

Application Strategy,Application Architecture

Are you going to implement multiple Dynamics 365 products? If so, how these will be integrated?

Application Strategy,Application Gaps & Risks

Gaps and Risks identified and with Owners assigned (customer/Partner)

Application Strategy,Application Gaps & Risks

Have gaps been identified?

Application Strategy,ISV Solutions and Add-ons

Which ISV solutions are you going to implement?

Application Strategy,ISV Solutions and Add-ons

What is the ISV implementation strategy?

Application Strategy,ISV Solutions and Add-ons

What is the ISV support model?

Application Strategy,ISV Solutions and Add-ons

Have ISVs been acquired, installed and used during the analysis and design phase?

Application Strategy,ISV Solutions and Add-ons

Is each ISV solution available on AppSource?

Application Strategy,ISV Solutions and Add-ons

Will customizations be required on top of ISV solutions?

Application Strategy,ISV Solutions and Add-ons

How does the ISV solution integrate with Dynamics 365?

Application Strategy,Application Licensing Considerations

Do you have a documentation or list of required licenses for all components?

Application Strategy,Application Licensing Considerations

Do you import order lines from external systems using DIXF or OData for Sales, Invoices (Customer or Vendor), Purchases, General Journals, or Cost Entries?

Business Process Strategy – Finance,General Ledger Strategy

Are all the actual legal entities represented by a legal entity in Finance and Operations Apps?

Business Process Strategy – Finance,General Ledger Strategy

What is the consolidation and elimination strategy?

Business Process Strategy – Finance,General Ledger Strategy

Have the chart of accounts (COA) and financial dimensions been defined?

Business Process Strategy – Finance,General Ledger Strategy

What is the strategy for the main account categories?

Business Process Strategy – Finance,General Ledger Strategy

Has your accounting currency strategy been defined?

Business Process Strategy – Finance,General Ledger Strategy

Has your reporting currency strategy been defined?

Business Process Strategy – Finance,General Ledger Strategy

Do you process foreign currency revaluation?

Business Process Strategy – Finance,General Ledger Strategy

How are you planning to meet taxation requirements?

Business Process Strategy – Finance,General Ledger Strategy

Do you have requirements to track production values in your general ledger?

Business Process Strategy – Finance,General Ledger Strategy

Is there a plan to use the Cost accounting module?

Business Process Strategy – Finance,Fixed Asset and Asset Leasing Strategy

Is the fixed assets module in scope for the project?

Business Process Strategy – Finance,Fixed Asset and Asset Leasing Strategy

Is there a requirement for asset leasing under IFRS 16 or ASC 842 (US GAAP)?

Business Process Strategy – Finance,Fixed Asset and Asset Leasing Strategy

How many fixed assets will be migrated into Dynamics 365 Finance?

Business Process Strategy – Finance,Fixed Asset and Asset Leasing Strategy

Is purchase order integration with the fixed asset module in scope?

Business Process Strategy – Finance,Fixed Asset and Asset Leasing Strategy

Is project management and accounting integration with the fixed asset module considered in scope?

Business Process Strategy – Finance,Budgeting Strategy

Is there a plan to implement the basic budgeting features of Dynamics 365 Finance?

Business Process Strategy – Finance,Budgeting Strategy

Are there budget controls and checking mechanisms in place with the current system?

Business Process Strategy – Finance,Budgeting Strategy

How do you determine what your budget will be? Is budget planning in scope?

Business Process Strategy – Finance,Accounts Payable Strategy

Are Vendors and related transactions managed and maintained in Dynamics 365 Finance?

Business Process Strategy – Finance,Accounts Payable Strategy

Is there need to automate vendor invoice processing based on volume or complexity?

Business Process Strategy – Finance,Accounts Payable Strategy

Is there a requirement to process prepayments to vendors?

Business Process Strategy – Finance,Accounts Receivable Strategy

Are customer transactions like invoices or incoming payments managed in Dynamics 365 Finance?

Business Process Strategy – Finance,Accounts Receivable Strategy

Is there a need to automate customer invoice processing based on the number of invoices?

Business Process Strategy – Finance,Accounts Receivable Strategy

What techniques are used to pay customers?

Business Process Strategy – Finance,Accounts Receivable Strategy

Is there a need to manage credit limits in Dynamics 365 Finance?

Business Process Strategy – Finance,Accounts Receivable Strategy

Is there a need to manage collections and connected processes in Dynamics 365 Finance?

Business Process Strategy – Finance,Accounts Receivable Strategy

Are there requirements to predict when customers will pay their invoices?

Business Process Strategy – Finance,Public Sector Strategy

Is there a plan to enable the public sector configuration key?

Business Process Strategy – Finance,Public Sector Strategy

Do you plan to enable the public sector French regulatory configuration key?

Business Process Strategy – General Features,Mobile Access Strategy

Are there mobile device requirements?

Business Process Strategy – General Features,Mobile Access Strategy

What is the warehouse mobile device strategy?

Business Process Strategy – General Features,Mobile Access Strategy

Are any business process for the mobile devices required in offline mode?

Business Process Strategy – General Features,Localization Strategy

Have you reviewed and validated the language requirements for each location?

Business Process Strategy – General Features,Localization Strategy

Have you validated that your business requirements are met by the provided localizations for each country/region?

Business Process Strategy – General Features,Electronic Reporting Strategy

Do you have plans to use Electronic reporting or Configurable business documents?

Business Process Strategy – General Features,Printing Strategy

Is there a detailed printing strategy defined?

Business Process Strategy – General Features,Printing Strategy

Have printing requirements been documented?

Business Process Strategy – General Features,Printing Strategy

Are there requirements to print to local printers? (Such as check printers, barcode printers, label printers, etc.)

Business Process Strategy – General Features,Alert Rules Strategy

Is there a plan to use Alert rules?

Business Process Strategy – General Features,Workflow/Business Process Flow Strategy

Are you using Business Events with Power Automate flows to extend the workflow functionality for your business processes?

Business Process Strategy – Human Resources,Personnel Management

Are you planning to use worker actions to manage updates to worker data?

Business Process Strategy – Human Resources,Personnel Management

Are you planning to use workflow with your worker actions?

Business Process Strategy – Human Resources,Personnel Management

Are you planning to use position actions to manage updates to position data?

Business Process Strategy – Human Resources,Personnel Management

Are you planning to use workflow with your position actions?

Business Process Strategy – Human Resources,Personnel Management

Have you performed a full gap analysis occurred related requirements for Unions?

Business Process Strategy – Human Resources,Employee and Manager Self-Service

Will Dynamics 365 be the single point of entry for all employee self-service related activities?

Business Process Strategy – Human Resources,Employee and Manager Self-Service

Will Dynamics 365 be the single point of entry for all manager self-service related activities?

Business Process Strategy – Human Resources,Leave and Absence Management

Is leave and absence management in scope for the implementation?

Business Process Strategy – Human Resources,Leave and Absence Management

Has a full fit-gap analysis been performed for leave and absence?

Business Process Strategy – Human Resources,Leave and Absence Management

Are there requirements for FMLA leave?

Business Process Strategy – Human Resources,Leave and Absence Management

Are you planning to leverage Microsoft Teams to allow users to view and request time off?

Business Process Strategy – Human Resources,Leave and Absence Management

Are you planning to use the leave and absence company calendar as part of employee self-service?

Business Process Strategy – Human Resources,Leave and Absence Management

Are you planning to use the leave and absence accrual suspensions?

Business Process Strategy – Human Resources,Benefits Management

Is Benefits Management in scope for the implementation?

Business Process Strategy – Human Resources,Compensation Management and Payroll

Is compensation management in scope for the implementation?

Business Process Strategy – Human Resources,Compensation Management and Payroll

Are employees compensated in more than one currency?

Business Process Strategy – Human Resources,Compensation Management and Payroll

Is there a clearly defined process for managing and updating compensation information?

Business Process Strategy – Human Resources,Employee Development

Is employee development (skills, reviews, and/or goals) in scope for the implementation?

Business Process Strategy – Human Resources,Employee Development

Are you planning to use workflows with the review process?

Business Process Strategy – Human Resources,Learning

Are you planning to implement the learning features for your project?

Business Process Strategy – Human Resources,Organization Administration

Are you planning to maintain a position hierarchy in Dynamics 365?

Business Process Strategy – Human Resources,Organization Administration

Are there requirements for additional or alternative reporting hierarchies to be maintained?

Business Process Strategy – Human Resources,Organization Administration

Are you planning to maintain a departmental hierarchy in Dynamics 365?

Business Process Strategy – Human Resources,Organization Administration

Will financial dimensions be used in Dynamics 365 Human Resources?

Business Process Strategy – Human Resources,Task and Business Process Management

Are you planning to use onboarding, offboarding, or transitions check lists? If so, has a full gap analysis been performed.

Business Process Strategy – Human Resources,Task and Business Process Management

Is a clear process defined for maintaining the check lists?

Business Process Strategy – Human Resources,Task and Business Process Management

Are you planning to use business processes to maintain alternative internal check lists?

Business Process Strategy – Human Resources,Task and Business Process Management

Is a clear process defined for maintaining the business process check lists?

Business Process Strategy – Human Resources,Task and Business Process Management

Are you planning to use group assignments for any tasks in task or business processes?

Data Strategy,Data Migration Strategy

Has the data migration scope been clearly documented for the implementation project?

Data Strategy,Data Migration Strategy

Is there a plan to migrate historical transactions?

Data Strategy,Data Migration Strategy

Have the data migration responsibilities been clearly documented for the implementation project?

Data Strategy,Data Migration Strategy

Are the data migration quality standards defined?

Data Strategy,Data Migration Strategy

Are data transformation requirements defined?

Data Strategy,Data Migration Strategy

Has the time needed for data migration, during cutover, been estimated and planned?

Data Strategy,Data Migration Strategy

How are you planning to move migrated data into the production environment?

Data Strategy,Data Migration Strategy – Human Resources

What is the strategy for migrating worker data into Dynamics 365 Human Resources?

Data Strategy,Data Migration Strategy – Human Resources

Do you have clearly defined jobs in your current system that will be migrated, or will this data be defined as part of this project?

Data Strategy,Data Migration Strategy – Human Resources

Do you have clearly defined positions in your current system that will migrated, or will this data be defined as part of this project?

Data Strategy,Data Migration Strategy – Human Resources

Have you defined a clear master data management strategy for worker, position, and job data? Where will data be defined, sent to, received from, what is the system of record, and so on?

Data Strategy,Data Migration Strategy – Human Resources

Is a clear strategy defined for migrating leave and absence plans and balances into Dynamics 365?

Data Strategy,Data Migration Strategy – Human Resources

What is the strategy for migrating enrolled benefits into Dynamics 365?

Data Strategy,Data Migration Strategy – Human Resources

Is all historical and relational data required to manage ongoing life events planned for data migrations into Dynamics 365?

Data Strategy,Data Migration Strategy – Human Resources

What is the strategy for migrating current compensation information into Dynamics 365?

Data Strategy,Data Migration Strategy – Human Resources

Will data be migrated for any check lists into Dynamics 365?

Data Strategy,Data Migration Validation and Performance

How many dry-runs will be executed to validate the data migration strategy?

Data Strategy,Data Migration Validation and Performance

Who will be responsible for data validation checks?

Data Strategy,Data Migration Validation and Performance

What is the plan to validate performance of data migration and the time required for the cutover?

Data Strategy,Master Data Management

Has the team established master data governance process?

Data Strategy,Master Data Management

What is your data strategy (where is the data coming from, where is it stored and where is the master)?

Data Strategy,Configuration Data Management

Is there an environment for GOLD configurations?

Data Strategy,Configuration Data Management

How are GOLD configurations documented?

Data Strategy,Configuration Data Management

How are GOLD configurations approved?

Data Strategy,Configuration Data Management

Is the flow of data between environment clearly documented?

Data Strategy,Configuration Data Management

How will data be migrated into production after the initial go-live?

Data Strategy,Documents/Attachment Data Migration Strategy

What technique are you planning to use to store documents/attachments?

Data Strategy,Documents/Attachment Data Migration Strategy

Are you planning to migrate documents/attachments from a legacy system?

Data Strategy,Documents/Attachment Data Migration Strategy

Are you planning to migrate personnel record files/attachments?

Data Strategy,Documents/Attachment Data Migration Strategy

Do you have requirements to integrate documents from Dynamics 365 to another system?

Data Strategy,Legal Entities and Data Sharing

Are actual customer Legal Entities equivalent to F&O Legal entities?

Data Strategy,Legal Entities and Data Sharing

Are there requirements for single record sharing (including customers or vendors)?

Data Strategy,Legal Entities and Data Sharing

Is project team tracking the list of cross-company data entities?

Data Strategy,Legal Entities and Data Sharing

Is this customer upgrading from AX2012 and using virtual companies functionality?

Environment & Capacity Strategy,Environment strategy

Are there challenges with subscribing to additional environments?

Environment & Capacity Strategy,Environment strategy

Have you scheduled a regular environment plan review?

Environment & Capacity Strategy,Environment strategy

Have you defined the Tier-2 (or higher) environment to be used for User Acceptance Testing?

Environment & Capacity Strategy,Environment strategy

Have you assessed the environment Tier needed for performance testing and if necessary, planned its procurement activities?

Environment & Capacity Strategy,Environment strategy

Did you watch the TechTalk for environment planning?

Environment & Capacity Strategy,Environment strategy

Do you have Test/QA environments for testing your integrations?

Environment & Capacity Strategy,Production Instance Strategy

Are processes for regulatory compliance (Ex: GDPR) identified, service levels agreed, security review and internal approvals, Industry regulations, etc.?

Environment & Capacity Strategy,Production Instance Strategy

Is there a requirement to implement in multiple countries where one or more countries are disparate geopolitical regions that have data residency requirements?

Environment & Capacity Strategy,Production Instance Strategy

Has bandwidth availability been verified for all locations?

Environment & Capacity Strategy,Production Instance Strategy

Is there a requirement to be able to share master or configuration data between legal entities?

Environment & Capacity Strategy,Production Instance Strategy

Is there a requirement to keep information stored in non-company specific tables from being visible in all companies?

Environment & Capacity Strategy,Production Instance Strategy

Is there a requirement to use intercompany processes or to provide intercompany data lookups?

Environment & Capacity Strategy,Production Instance Strategy

Does the implementation include multiple locations around the globe?

Environment & Capacity Strategy,Production Instance Strategy

Are there factors that would indicate a multi-instance approach should be considered?

Environment & Capacity Strategy,Production Instance Strategy

Has a latency check been performed for all end-user locations?

Environment & Capacity Strategy,Continuous Update

Are you familiar with the Continuous Updates policy?

Environment & Capacity Strategy,Performance Planning

Has the typical workload that will occur in production in a day-in-the-life fashion (e.g. in the usage profile) been analyzed, estimated and documented?

Environment & Capacity Strategy,Cloud and Edge

Are there business processes that may need to run in an offline mode?

Integration Strategy,Integration Scope

Is the integration scope defined at an interface level?

Integration Strategy,Integration Scope

Are all of the characteristics of each interface fully defined?

Integration Strategy,Integration Scope

Who is responsible for delivering the integration scope?

Integration Strategy,Integration Scope

Are there any integrations in scope where near real-time incremental export is needed?

Integration Strategy,Integration Scope

Are there any integrations in scope that need to receive a signal about a specific event happening?

Integration Strategy,Integration Approach

Do you have a company-wide integration strategy that is being used for the project?

Integration Strategy,Integration Approach

Are there plans for integrations with high availability requirements that take a dependency on Dynamics 365?

Integration Strategy,Integration Approach

What is the approach for synchronous integrations?

Integration Strategy,Integration Approach

What is the approach for the high volume/frequency integrations?

Integration Strategy,Integration Approach

Is there a plan to use the recurring integration tool available on GitHub as an out of the box solution for integration?

Integration Strategy,Integration Approach

Will middleware be used for integrations?

Integration Strategy,Integration Operations Strategy

Is the integration administration scope and approach defined and documented?

Integration Strategy,Integration Operations Strategy

What is the error handling approach?

Integration Strategy,Integration Operations Strategy

Are you logging events to Azure App Insights?

Integration Strategy,Dual Write Strategy

Which Dynamics 365 apps will be integrated with Finance and Operations apps?

Integration Strategy,Dual Write Strategy

Is there a plan to use the prospect-to-cash Data Integrator templates and dual-write?

Integration Strategy,Dual Write Strategy

Which business processes require integration that are planned with Dual Write?

Integration Strategy,Dual Write Strategy

Is there a plan to use trial instances of Finance and Operations apps during the implementation for dual-write?

Integration Strategy,Dual Write Strategy

What is the go-live schedule for each of the Dynamics 365 apps?

Integration Strategy,Dual Write Strategy

Will Dataverse and all Dynamics 365 apps be installed in the same tenant?

Integration Strategy,Dual Write Strategy

Will the Dataverse, Dynamics 365 apps, and external Azure components be deployed in the same region?

Integration Strategy,Dual Write Strategy

Which Dataverse environment(s) will Finance and Operations apps connect to?

Integration Strategy,Dual Write Strategy

Will cross-company data sharing be enabled along with Dual Write?

Integration Strategy,Virtual Entities Strategy

Are there plans to use virtual entities?

Intelligence Strategy,Operational Reporting and Insights

What is the reporting and Business Intelligence strategy?

Intelligence Strategy,Operational Reporting and Insights

Are reporting/analytics requirements documented?

Intelligence Strategy,Operational Reporting and Insights

Have printing requirements been documented?

Intelligence Strategy,Operational Reporting and Insights

Are there requirements for “Follow me printing” or “Secure printing”?

Intelligence Strategy,Operational Reporting and Insights

How many new SSRS reports are expected to fill reporting gaps?

Intelligence Strategy,Strategic Organizational and Executive Reporting

Is there a plan to leverage Power BI for reporting requirements?

Intelligence Strategy,Strategic Organizational and Executive Reporting

Have the standard Power BI analytical workspaces been analyzed/compared to the reporting requirements?

Intelligence Strategy,Strategic Organizational and Executive Reporting

What is the financial reporting strategy?

Intelligence Strategy,Compliance Reporting Scope – Human Resources

Are there requirements for Affordable Care Act (ACA) reporting?

Intelligence Strategy,Compliance Reporting Scope – Human Resources

Are there requirements for VETS (Veterans Employment and Training Service) reporting?

Intelligence Strategy,Compliance Reporting Scope – Human Resources

Are there requirements for EEO (Equal Employment Opportunity) reporting?

Intelligence Strategy,Compliance Reporting Scope – Human Resources

Are there requirements for OSHA (Occupational Health and Safety Administration) reporting?

Intelligence Strategy,Compliance Reporting Scope – Human Resources

Are you planning to use injury illness incidents?

Intelligence Strategy,Data Warehousing Strategy

Are there plans to use the Bring Your Own Database (BYOD) capabilities of Dynamics 365?

Intelligence Strategy,Artificial Intelligence

Are there business requirements that require AI models as a component of the solution?

Intelligence Strategy,Artificial Intelligence

Are there business requirements that require conversational AI components as part of the solution?

Intelligence Strategy,Artificial Intelligence

What is the demand forecasting strategy?

Program Strategy,Goals and Objectives

Provide an overview of the business and why Dynamics 365 was selected.

Program Strategy,Goals and Objectives

What are the specific objectives of the project and how will they be measured?

Program Strategy,Goals and Objectives

What are the targeted benefits of the project and how will the benefits be measured?

Program Strategy,Governance and Methodology

What is the software development lifecycle methodology/framework that you’re using?

Program Strategy,Governance and Methodology

Is the entire implementation team trained and comfortable with the methodology?

Program Strategy,Governance and Methodology

Is there a program management function that is overseeing the larger program of activities?

Program Strategy,Governance and Methodology

How will changes to project scope be handled?

Program Strategy,Governance and Methodology

What is the status reporting procedure for the implementation?

Program Strategy,Governance and Methodology

How is the project managing risks and issues?

Program Strategy,Governance and Methodology

How are decisions regarding the solution architecture managed?

Program Strategy,Governance and Methodology

What is your training and adoption strategy?

Program Strategy,Governance and Methodology

Has the customer chosen a support plan that matches their business needs?

Program Strategy,Stakeholders

Does the customer have a project manager?

Program Strategy,Stakeholders

Does the partner have a project manager?

Program Strategy,Stakeholders

Is there an executive owner identified for the project?

Program Strategy,Stakeholders

Is there a steering committee for the project?

Program Strategy,Stakeholders

Who are the key business process stakeholders for each key business process area?

Program Strategy,Stakeholders

Are the customer/partner stakeholders identified with clear roles and ownership?

Program Strategy,Stakeholders

Is this an IT driven project?

Program Strategy,Project Schedule

Are the scope and project timelines realistic?

Program Strategy,Project Schedule

Is go-live preparation process included into the project plan/ cutover plan?

Program Strategy,Project Schedule

Is time allocated in the project plan to conduct a mock-cutover

Program Strategy,Project Schedule

What external activities are happening in the customer’s enterprise that the implementation is taking a dependency on and are they tracked in the project plan?

Program Strategy,Project Schedule

Are complex business process areas left to the late iterations in the project plan?

Program Strategy,Rollout Model

What is the rollout model selected for this project?

Program Strategy,Rollout Model

Does the project plan include resource and task dependencies?

Program Strategy,Rollout Model

Are there phased go-live dates very close together or critical activities overlapping?

Program Strategy,Rollout Model

Will the implementation utilize process templates that will be deployed across multiple groups of end users in diverse operating conditions?

Program Strategy,Solution Scope

Is the scope documented either in a project charter or in a statement of work?

Program Strategy,Solution Scope

What are the known product gaps?

Program Strategy,Solution Scope

Has the project taken dependencies on roadmap features?

Program Strategy,Solution Scope

Are external component licensing costs considered?

Program Strategy,Requirements Gathering Approach

What is your requirement gathering strategy?

Program Strategy,Requirements Gathering Approach

Are the requirements being sourced from the process owners / subject matter experts?

Program Strategy,Requirements Gathering Approach

Are requirements being reviewed and validated?

Program Strategy,Requirements Gathering Approach

Are requirements being captured relative to their respective business processes?

Program Strategy,Requirements Gathering Approach

Are negative requirements being captured?

Program Strategy,Requirements Gathering Approach

Are the intended personas for each process and its related requirements being captured and tracked along with the requirements?

Program Strategy,Requirements Gathering Approach

Where are requirements being managed?

Security Strategy,Identity and Access Management

Is Federation, Cross Tenant, Integration, AD Access, and other requirements fully identified?

Security Strategy,Identity and Access Management

Are all required Domains synced to AAD?

Security Strategy,Identity and Access Management

Are you using alternate authentication provider?

Security Strategy,Identity and Access Management

Are you considering multi-tenant & Cross Tenant Access?

Security Strategy,Identity and Access Management

Are there requirements for multi-factor authentication (MFA)?

Security Strategy,Identity and Access Management

How are you considering Integration Identity and Service Accounts?

Security Strategy,Access Control – Conditional Access (CA)

Are there requirements for limiting access to the F&O service?

Security Strategy,Compliance – Data Retention

Is there a business requirement to provide Production database backup past 30 days?

Security Strategy,Compliance – General

Are you aware of Microsoft Trust center?

Security Strategy,Compliance – General

Are there specific compliance certification requirements?

Security Strategy,LCS – Security

Is there user maintenance strategy in place for LCS?

Security Strategy,Roles – Approach

Is Customer managing all security implementation tasks?

Security Strategy,Roles – Approach

Are security roles part of Golden Config?

Security Strategy,Roles – Approach

Are security roles part of UAT?

Security Strategy,Roles – Approach

Are custom security roles/duties/privileges created using a ‘design time’ approach (i.e., customizing roles using VS and storing in source control)? Or, are they created using a ‘run time’ approach, using the user interface and storing as data?

Security Strategy,Roles – Scope

Are all security roles/duties/privileges identified?

Security Strategy,Roles – Scope

Is the security model scalable for future rollouts? Ex: Adding more business units and rolling out to new countries/regions

Security Strategy,XDS Policy – Approach

Is the approach for using XDS policies finalized?

Security Strategy,Security – Human Resources

What is the strategy for maintaining worker data in Dynamics 365 Human Resources?

Security Strategy,Security – Human Resources

Are you planning to restrict access to certain leave and absence plans?

Security Strategy,Security – Human Resources

Will an organization hierarchy be used to define security access within security roles for certain users?

Test Strategy,Test Plan

Who is responsible for testing the solution?

Test Strategy,Test Plan

Who will create the test scripts?

Test Strategy,Test Approach

How are requirement tests being structured and executed?

Test Strategy,Test Approach

How is process testing being structured and executed?

Test Strategy,Test Approach

How is end-to-end testing being structured and executed?

Test Strategy,Test Approach

How is user acceptance testing being structured and executed?

Test Strategy,Test Approach

Is there a plan to conduct a mock-cutover?

Test Strategy,Test Approach

What is the plan for testing in each required language?

Test Strategy,Test Management

How are test executions tracked?

Test Strategy,Test Management

How are bugs and issues related to failed test executions tracked?

Test Strategy,Performance Testing

Is there a plan to conduct a performance test prior to requesting the deployment of the Finance and Operations apps production environment?

Test Strategy,Performance Testing

Is there a plan to conduct a performance test prior to the go-live?

Test Strategy,Performance Testing

Have you documented the performance goals for your solution?

Test Strategy,Performance Testing

Have you documented the typical workload and expected transactions volumes in the Solution Blueprint Template.xlsx?

 

A small disclaimer; These questions will as always be dynamically changed and subject to change by the Microsoft FastTrack team.

 

 

D365 Hidden Sales order gem; copy from item list

A small but highly productive tip is the feature of “Item list”. It has been available for years but have not gotten the deserved attention. The feature does not even have a docs page.

With this feature it makes it much easier to create sales order, by copying the lines from an ‘item list’. The lists can be generic, or specific to a customer. If you have customers that is ordering the same over, and over again, then why not create an ‘item list’ or even better; have the system to automatically generate item lists for you. You can setup that when creating a sales order, the system automatically pop’s up a screen where you select the product and specify the quantities. You can also create lists that also behaves like a simplified “kitting” selection of products.

You will find the setup under ‘sales and marketing’.

And in the Accounts receivable you can set up that when creating a new sales order, then please prompt for the item list;

When I then create a salesorder:

The next thing that instantly pop’s up it the item list, where I select or even changes the quantity

I can even reach the item list from the sales order line

Give it a try; It is fast, easy and can save you hours when creating orders for your regular customers.

I hope Microsoft can create a D365 docs page on this feature. (or send me a link to it)

Dynamics 365 – top things to learn and tools to use in 2022

I first want to thank the 92.898 visitors to my blog in 2021. It has been my pleasure to share with the community, and 2021 have been the best so far.

This time, I would like to summarize my tips on what to learn and tools to use that can further bring value to our customers. I’m quite sure that there are many other things to learn and use also, and feel free to add them to the comments. So here we go:

Certifications

This is your best investment on your career! It will show that you take knowledge seriously and that you are actively investing in yourself. It also brings value to customers, as it is clearer to customers what they are paying for. I urge customers to acknowledge and have more focus on preferably using certified consultants as they bring much more value into your projects. What you should invest in is the Fundamentals, Associate and Expert certifications. If you don’t have the time or don’t see the value in objectively documenting your knowledge, then I think you maybe have chosen the wrong profession. Working with Dynamics 365 is all about learning and sharing, and the speed of innovation exponential. Playing “catch-up” on knowledge is not the rights attitude. And don’t cheat by memorizing questions and answers from sites that provide this, as this is not true knowledge.

Tools

When working with Dynamics 365 we use a lot of additional tools that can help us speed things up. Here is my list of tools I use as a consultant.

Tool What I use it for
Office365 Everybody uses this, and it must be on the top of my list
DevOps I really love DevOps and use it a lot for running entire D365 implementations. But I have made a few improvements with new work-item-types like Process, Deliverables, Questions, Data entity etc
Visual Studio 2019 and Visual Studio Code These are mandatory tools for development. For eCommerce I use the Visual Studio Code, and for X++/C# code I use Visual Studio 2019. I’m really looking forward to Visual Studio 2022 and the support of .NET 6, as this will bring massive gains in performance to the Dynamics 365 stack.
Diagrams.net/
Draw IO
Free tool to make architectural drawings. I just loving this tool to simplify the complex in written materials I deliver to my customers. Just as good (or even better) than Visio.
Macro Recorder Having a tool that takes care of repetitive tasks is important. I have created myself a library for recordings that simulate real transactions like a POS taking transactions, Sales orders, and creating items. I’m also using RSAT, but the Macro Recorder is sometimes faster to spin-up and execute for doing minor repetitive tasks.
JetBrains dotPeek As I work a lot in the Dynamics 365 Commerce area, there are a lot of code that is not available on the commerce stack. With this tool, I can decompile most components to better understand why I get the behavior and actually read the code. It also has excellent search capabilities.
Agent Ransack The amount of code that exists with Dynamics 365 (F&O) can be overwhelming. Agent Ransack allows me to search through all X++ code quite easily. If I encounter an issue or an error message I can within minutes find the exact source code and to understand how we can resolve the issue.
Postman This is my tool to develop and test out API’s. It allows me to simulate integrations and also to unit-test before shipping any code.
Recurring Integrations Scheduler For simplified file-based integrations I love this tool. Within minutes I can set up a quite advanced async integration that is reliable and cost effective.
D365fo.tools A set of tools that will assist you when working with Dynamics 365 Finance & Operations development / demo machines. Will save you hours by automating a lot of scripts.

Other paid tools and ISV’s that are in my backpack

Name What I use it for
FSB Smart reservation For many years I have really liked how FSB is approaching item allocation and reservation. Also keep in mind that the people behind these tools are also the same that created the first lines of X++ on Axapta. I always present this ISV to customers that have a lot of logistics, and this ISV solution enhances some important aspects and visibility to your on-hand situation and automates the item reservations.
Amicis When it comes to self-checkout solutions and in the food and hospitality business, then this is the go-to solution. The people behind Amicis have a life-long experience in this segment and just great guys to work with.
ExFlow Invoice processing and AP-automation is a very important aspect, and this ISV solves it just elegantly. Easy to setup and install and is close to a mandatory component in any implementation.
Docentric I hope that one day we don’t use reports or form-letters anymore. But having a visually appealing invoice and purchase order is important as this shows professionality on your brand and how the marked should see you.
BarTender The ability to print labels and program RFID into labels is important for the physical world. I have always liked how easy it is to print labels with this tool.
Paintshop Pro This is my preferred tool for editing pictures. I’m sure there are better options out there, but I have been using this tool for years and therefore it exists on my list.
Ardoq The architecture relationships can be challenging to describe using tools like Visio. Often, we see that great work is done, but not used to the potential. An alternative is to use cloud-based mapping tools as ardoq, that covers most aspects in documenting relationships between business processes, applications, roles, risks and transitions.

Sites I use and visit a lot

Name What I use it for
Docs Microsoft Docs is gold! Here you will find all the documentation you need. There are also separate section for learn to go through learning paths.
Experience Here you will find ideas, community, roadmaps and access to insiders’ programs. Tons of high value here.
Yammer The Yammer site is where you can have a direct communication with partners and Microsoft R&D personnel. There is an approval process to get access, but most consultants can get in.
CDE Community driven engineering (CDE) is a Microsoft effort to make external engineers more efficient at providing recommended bug fixes as minor features to Microsoft, as well as to make Microsoft more efficient in accepting fixes from the community. If you have the right skills and the willingness to share and give away your fixes (or features) you can sign up at https://aka.ms/CommunitydrivenengineeringOne nice thing with the CDE, is that you can see all code changes over all builds that Microsoft releases. This gives me knowledge on code improvements far beyond the fixes released to LCS.
D365 Commerce Do you want to check out the Dynamics 365 Commerce sites? Then this site is great for learning and trying it out.
D365 Commerce partner Dynamics 365 Commerce is deployed and released in another way than the traditional X++ releases. To keep track of new builds and new releases I use the following two sites : Azure DevOps Commerce-partner and github Commerce.online, and the Commerce sample site Dynamics365Commerce.Solutions.
Reddit Here I can waste hours….

Beyond this there is also all the extremely good blogs. Thank you all for building the best community in the world.

Happy new year!!!!

D365 Recurring Integrations Scheduler(RIS)

Today I would like to pay my respect to the free GitHub initiative Recurring Integrations Scheduler (RIS). RIS is a solution that transports files/messages between on-premises folders and D365FO. This is a way to perform good old file integrations, and even for automating import/export of data entities between environments. And without having to develop/program anything.

It calls methods exposed by D365FO to import or export files and data packages. It can also monitor status of D365FO internal processing of imported data. Based on this status it can move input files to “status” folders.

The solution is quite easy to setup, and is also quite good documented. You can download the installer here. It also means that with a few hours of reading and understanding this tool you can automate import and export of files.

I will not try to explain the solution here, but I would like to give you some screenshots on how it looks. The tool is a windows service, but have a front-end client where you can monitor that the exports and imports are running. Here I have 2 jobs. One that exports customer from D365F&O, and one that imports customers to D365F&O.

These jobs will create a set of folders where files are to downloaded or uploaded from.

So if I add a excel spreadsheet of customers to the “Upload” folder, it is automatically being sent to F&O, and the customers are imported in the Data Management Framework.

In D365 I have 2 data management projects for importing and exporting customers.

In the export(or import) project, I have the data entity, and I also need to setup the “Manage recurring data jobs“, as this automatically will export/import according to a reoccurring schedule.

In the manage scheduled data jobs, you may setup the frequency.

There is a field named “ID” in the picture above, that contains a GUID, and this the Activity Id that is used for downloading files from the D365 Blob storage.

In the RIS tool, I’m pointing the Dynamics data Job towards this activity ID. This is how RIS understands what to download or upload.

When opening the Manage Messages, we see the download/upload status of each file, until they appear in the download folder.

 

This is a great tool, that have been available for a long time. It have not received the attention it deserves. Take a look, and start making simplified integrations!

I also want to thank Tomek Melissa from Microsoft that have been driving this initiative.

How to learn and try out Dynamics 365 Commerce?

The Dynamics 365 Commerce team at Microsoft have created a great trial site where you can try out all their good stuff and get some guided walk through of their capabilities. Please check it out:

https://manage.commerce.dynamics.com/welcome/index.html

Here is your to-do list of what you should explore:

  1. B2C experience
  2. Product discovery and cloud powered search
  3. Curb-side pickup
  4. Intelligent recommendations
  5. Ratings and reviews
  6. Quick add to cart
  7. Customer Service
  8. Customer Voice
  9. 3D product visualization and augmented reality (The 3D surf board)
  10. Livestream shopping
  11. Try Adventure Works mobile app
    IOS

 

  1. B2B experience
  2. Sign up to be a business partner
  3. Quick order entry using templates
  4. View account credit information

This site is also great for preparation to the MB-340 Dynamics 365 Commerce Functional Consultant Certification, and if you click on the link you can get some more information.

Take care friends

D365 : Use your data

When I observe the use of Dynamics 365, I often see that most often there are well-established processes and routines for getting data into the Dynamics 365 system. But using this data is often limited to retrieving financial reports that show everything in dollars and cents. However, the information contained in the system is often of high value, but to effectively use of the data has not been implemented. The reason for this is often simple; One does not know how. And often it can end up in overcomplicated enterprise scale solution that costs much more than needed.

Here is a small list of what is standard, and quite quickly can expose the data to reporting, like Power BI and Excel

  1. Data export
    This is the easy way, where you select data entities to be exported as Excel sheets, CSV or XML. Manual, simple and requires very little demanding in setting up.
  2. ODATA
    Odata is also a very simple and easy way to get access to Dynamics 365 F&O data, and can be consumed directly in Power BI. But it is slow compared to the other ways, and I don’t recommend using this to transactional data. Use of OData for Power BI reports is discouraged. Using entity store for such scenarios is encouraged.

     

  3. BYOD – Bring your own database
    In Dynamics 365, you can set up an Azure SQL database, as a destination when exporting data. Power BI can then read directly from this database. This makes it easy to access the data. But an Azure SQL database can be expensive, and in the long run this way of exporting data will probably become less common. Data Lake will be taking over more for this form of exposing data.
  4. Entity stores are analytic cubes that are already in place in the standard solution. When you go into the different work areas, there are already many Power BI embedded analyzes that can be used directly. But the very few are aware is that these cubes can be made available in a Data Lake, so they can be used in reports that you create yourself. Dynamics 365 updates data lake continuously and there is a short delay until the data is available in Data Lake (trickle feed). I’m a but surprised that very few customers are using this option to create additional Power BI reports, and even to be able to open the data flows directly in excel. You literally can just select your dimensions and measurements directly from the entity store data lake. Why are almost nobody using this standard feature?

     

  5. Dataverse og dual write
    Dual Write is a built-in solution, where the data in Dynamics 365 is synchronously updated between the various apps. Typically, this is used to have shared registers between “customer engagement apps” and “Finance and Operations apps”. But in reality, you can use the entities you want.

     

  6. Virtual entities
    With virtual entities, the data is in Dynamics 365 Finance and Operations, but they are exposed as entities in Data Verse. (It could be that you need to use the legacy connector to access virtual entities in Power BI)
  7. This is the solution that will really give the data value in the future. In a future release, it will be easier to set up which tables and entities are to be written in Data Lake in almost real time. But it is not only the data that is written, but also metadata that can describe the information and relationships. So keep an eye on the roadmap on this.

These ways of exposing data can be set up as data flows that can be subscribed to. Not just Power BI but also Excel or other services that need this data. In Power BI you can subscribe to several data sources, so you can build the visualization and analysis that is desired.

Then comes the big question; Is it a lot of work to set up? What you may not be aware of is that a lot of this is already part of Dynamics 365. It requires very few hours to set up, and Power BI is also something that is relatively easy to use.

One exciting area that comes in the wake of this is to link this to MachineLearning / AI directly from Power BI. So that the system can build up prediction models, which see the connection between the data and which come with predictions. Dynamics 365 Finance comes full of solutions that give good indications of when customers will pay, suggestions for the next budget or how future cash holdings will be. Within trade / retail, there have been solutions for product recommendations based on customer profile and shopping cart.

The value of your data is determined by how you use it, and the first step is to make it available for use.

 

D365 – Building a business value review

Latest & greatest tech, faster, better and new possibilities, are from a consultancy perspective fun and rewarding. But it is very seldom that these aspects are the deciding factors when it come to implementing Dynamics 365. Any organization have a finite set of resources in terms of people, knowledge, money, and time. How to best utilize your resources can be difficult, but by building business case you have a process to evaluate your different options.

A business cases can be many things, but in this blog post I will focus on performing a business value review where Dynamics 365 benefits can be subjectively calculated on a high-level.

The end-result of a business value review would give some clear indications on:

1. Benefits – scaled and phased

2. Costs – scaled and phased

3. Key ROI measures; Payback, Net Present Value and Internal Rate Of Return

4. Cashflow through an implementation and onwards

I’m used to quantify costs and benefits on a granular way to better see the value of a business case, and even to compare different business cases towards each other. The high-level end-result of a business case can be presented like this, where ROI are visualized, and as here shown that the payback time is 16,5 months.

“Net Present Value” is the current value of the benefit improvement after 36 months. Internal Rate of Return is the calculated return rate of the investment, and is relevant to compare against other investments (like building a new warehouse etc)

The cost of open tender visualizes the cost of delaying the implementation, and how much savings is needed to justify a delay and keeping an open tender process.  Doing nothing also have a cost!

The cost picture of the business case can often be presented based on non-recurring costs and recurring costs per month.

The benefits can be built from predefined templates.

The benefits available for analysis can be divided into suites, and the following list is some of the benefits that may be relevant to calculate on.

General benefits

Benefit Input values Assumption
Revenue Gain -Annual revenue ($)

-Increase in revenue (%)

-Gross margin (%)

For example, a D365 may increase cross and up-sell opportunities.
Reduce Revenue Leakage -Annual revenue ($)

-Current revenue leakage (%)

-Revised revenue leakage (%)

Identifies areas where invoices (revenues) are raised for services that would otherwise have been missed. This is 100% margin as costs were incurred to provide the service in any case, e.g. chargeable telephone calls to customers
Margin Visibility Improvement -Annual revenue ($)

-Current gross margin (%)

-Revised gross margin (%)

D365 gives visibility of order profitability that was not previously available. The orders can be dealt with on the basis of their profitability rather than passively dealing with every request that arrives.
Margin – Identify Chargeable Items -Annual number of projects

-Average revenue per project ($)

-Increase in chargeable revenue by passing on costs to customers (%)

A D365 identifies areas where costs have been incurred and not passed to customers. These costs once passed to customers result in margin increase.
Cost Saving -Current annual spend impacted by D365 ($)

-Reduction in spend (%)

The departmental spend will be reduced by D365.
Improve Cash Collection -Annual revenue ($)

-Debtor days – today

-Debtor days – after

-Annual interest cost (%)

Improved business processes that generate electronic invoices will lead to faster, more accurate and more frequent delivery of invoices to clients – inevitably leading to faster invoice approval and payment.
Reduce Cash to Cash Cycle Time -Current C2C cash requirements ($)

-Number of days between payment of accounts payable to collection of accounts receivable (C2C cycle time)

-Revised C2C cycle time (days)

-Annual interest cost (%)

Improved business processes will result in a reduction in the C2C cycle thus reducing liquidity requirements and freeing up cash.
Minimize Regulatory Costs -Current annual regulatory costs ($)

-Revised annual regulatory costs ($)

The customer has obligations to report and that the cost of reporting can be significantly reduced by the proposed D365. Alternatively, non-compliance may lead to fines which could be reduced by better monitoring.
Labor Saving -Number of direct staff currently engaged

-Direct efficiency improvement (%)

-Annual loaded cost per direct staff member ($)

-Number of indirect staff currently engaged

-Indirect efficiency improvement (%)

-Annual loaded cost per indirect staff member ($)

By making staff more efficient, a percentage of the staff can be re-deployed thus resulting in savings.
Improve Efficiency -Annual total departmental/company spend ($)

-Efficiency improvement (%)

Avoid soft savings such as improving employee effectiveness. Look for hard savings that can improve efficiency in areas such as: Information availability – remote access to network data, real time access, single and structured storing of all customer/vendor/business data, wider access through portals, business analytics, strategic enterprise management and business planning, improved network intelligence and thus decisions. Integrated systems will allow better inter-departmental, inter-company and inter-organizational efficiencies.
Process Time Savings -Time spent on manual processes (total FTE hours per month)

-Annual loaded cost per person ($)

-Efficiency improvement (%)

D365 automates and removes redundancy in manual steps such as information search, data integration etc. resulting in savings based on labor time.
Activity Time Savings -Time spent on activity (total FTE hours per month)

-Annual loaded cost per person ($)

-Efficiency improvement (%)

-Annual non-labor costs ($)

-Reduction in non-labor costs (%)

D365 reduces the average time spent on a business activity leading to savings based on both labor time and other non-labor costs.
Waiting Time Avoided -Current ‘dead’ waiting time per day (minutes)

-Revised ‘dead’ waiting time per day (minutes)

-Working hours per day per person

-Annual loaded cost per person ($)

-Number of people affected

The proposed D365 frees up a proportion of the current amount of wasted time.
Avoid Stationery Costs -Current annual stationery spend ($)

-Reduction in stationery spend (%)

The current annual stationery spend is known and the new D365 leads to a reduction in that spend.
Cost Reduction – Rental Items -Monthly rental costs ($)

-Percentage cost reduction (%)

Improved business processes and data visibility can lead to reduced purchasing spend through consolidation of existing contracts and improved access to information required for price negotiation.
Reduce Project Overrun Costs -Annual costs of project overruns ($)

-Reduction in overrun costs (%)

D365 enables faster project delivery.
Improve Staff Effectiveness -Number of staff engaged

-Current annual value per person ($)

-Improvement in effectiveness (%)

Staff generate value much greater than their loaded cost may imply and by making them more effective at their assigned task can lead to more value for the business.
Reduce Capital Costs -Budgeted capital spend ($)

-Proportion of spend avoided (%)

-Life or write-down period of D365 (months)

-Interest/Minimum return rate (per year %) (%)

The customer rents the equipment instead of purchasing or receives a managed D365 which avoids capital spend.
Cost of Mistakes -Current annual cost of mistakes ($)

-Reduction (%)

Improved systems can lead to better monitoring and control of all transactions and hence, better customer service and fewer mistakes leading to fewer penalties.
Litigation Avoided -Average cost to employer per case ($)

-Number of cases avoided per year

To quantify the savings that could be made by avoiding incidents which lead to litigation. Better ADR (Alternative Dispute ReD365) procedures can shorten time and therefore cost in litigation.
Assumptions that improved safety will lead to fewer accidents.
Penalty Avoidance -Current annual penalty value ($)

-Reduction (%)

Lower penalties or fines imposed by regulatory bodies result from improved tracking of information.
Reduce Professional Services Costs -Annual spend on professional services ($)

-Reduction (%)

Improved business process, data visibility, recording, retrieval and management lead to reduced requirement for professional services.
Reduce Marketing Costs -Current annual marketing spend ($)

-Reduction in marketing spend (%)

The current annual marketing spend is known and more accurate marketing leads to a reduction in that spend.
Protect Brand Value / Reputation -Annual value vulnerable to loss ($)

-Proportion of this value now protected by D365 (%)

Although brand is probably not valued directly on the balance sheet, the customer can use a percentage of the revenue to give a value. The new D365 protects the brand and inherent value by ensuring that legal and Corporate Social Responsibility (CSR) requirements are met.

Retail and Consumer Goods benefits

Benefit Input values Assumption
Competitive Advantage – Extra Revenue -Annual revenue ($)

-Percentage increase in revenue (%)

-Gross margin (%)

Improved access to and use of customer information will lead to an overall increase in revenue.
Sale Value per Transaction – Increase -Number of sales transactions per year

-Current average value per transaction ($)

-Increase in value (%)

-Gross margin (%)

The D365 helps the user increase their value of sales transaction through pricing, recommendations, AI/ML and omnichannel.
Inventory – Weeks of Supply -Annual Revenue ($)

-Gross margin (%)

-Current value of inventory ($)

-Revised weeks of supply

-Annual interest cost (%)

The D365 gives rise to better monitoring and handling of inventory transactions thus reducing the weeks of supply required.
Shrinkage Reduction -Annual revenue ($)

-Gross margin (%)

-Current shrinkage (%)

-Revised shrinkage (%)

Improved business processes give rise to better monitoring and handling of inventory transactions thus reducing the amount of shrinkage.
Improved Campaign Success -Number of campaigns per year

-Average revenue generated by campaign ($)

-Improvement (increase in number or success rate) (%)

-Gross margin (%)

Improved customer data availability will lead to better targeted campaigns and potentially additional ones within the existing budget leading to improved revenue.
Mark Down Reduction -Annual revenue (sales) ($)

-Annual value of mark downs ($)

-Revised marked down sales as percentage of annual sales (%)

-Margin on marked down sales (%)

-Average gross margin (%)

To quantify the additional revenue/margin that could be generated by being able to reduce the number of goods that are marked down during a sales season.

The D365 enables the user to identify and minimize the amount of mark downs

Mark Up Improvement -Annual revenue (sales) ($)

-Annual value of mark ups ($)

-Revised marked up sales as percentage of annual sales (%)

-Margin on marked up sales (%)

-Average gross margin (%)

To quantify the additional revenue/margin that could be generated by being able to increase the number of goods that are marked up during a sales season.

The D365 enables the user to identify and maximize the amount of mark ups.

Sales per sq m – Increase -Annual revenue ($)

-Sales space (sq m)

-Increase post implementation (%)

-Gross margin (%)

To quantify the extra margin that can be made by increasing the value of sales per m2 i.e. unit area of sales space.

The D365 helps the user to maximize their value of sales per unit area of sales space.

Reduce Inventory Holding -Current value of inventory ($)

-Percentage reduction in inventory holding (%)

-Annual interest cost (%)

Improved business processes can lead to better monitoring and handling of inventory transactions. Reducing the inventory could be brought about by improved vendor relations, supplier reviews, supplier self-service and price/quantity negotiations with suppliers based on data visibility and history. A more efficient, integrated system that looks at the whole business will inevitably allow greater control over re-ordering. Improved data visibility will lead to optimal inventory holding.
Maverick Buying Reduction -Current annual procurement value ($)

-Percentage of procurement that is uncontrolled (%)

-Uncontrolled percentage in D365 (%)

-Percentage by which controlled buying is cheaper (%)

To quantify the savings in purchasing costs as a result of better control over buying activity leading to reduced maverick or ‘rogue’ purchasing.

Improved business processes and data visibility can lead to reduced purchasing spend through consolidation of existing contracts and improved access to information required for price negotiation.

Better Procurement Margins Current annual procurement value ($)

-Price improvement (%)

Improved business processes and data visibility can lead to reduced purchasing spend through consolidation of existing contracts and improved access to information required for price negotiation.
Reduce Haulage Costs -Annual spend on haulage ($)

-Reduction (%)

Better information about route planning, loading, and/or capacity planning allows savings from delivery efficiencies, or savings from consolidation of costs to external suppliers or different shipment methods.
Reduce Track and Trace Costs -Current annual spend on track and trace ($)

-Reduction in spend (%)

The customer has obligations to know, and supply on demand, the exact production details of a product or batch of products and that the cost of this process can be significantly reduced by the proposed D365. Alternatively, non-compliance may lead to fines which could be reduced by better monitoring
Avoid Penalties, Returns, Credit Memos -Current monthly value of returns or credit memos ($)

-Reduction (%)

To quantify the savings that can be made by avoiding late delivery penalties or by reducing avoidable errors that lead to returns and/or credit memos. Many of these are penalties brought about by inadequate customer service. Improved business processes can lead to better monitoring and control of all transactions and hence, better customer service and fewer penalties.
Improve Revenue per Customer -Current number of customers

-Average revenue per customer per month ($)

-Increase in revenue (%)

-Gross margin (%)

To quantify the additional monthly revenue per customer that would be generated by implementing D365. Extra revenue is generated because D365 allows additional services or products to be sold to the existing customer base. The increased revenue may be as a result of cross-selling or up-selling.
Reduce Inventory Lead Times -Current value of inventory ($)

-Average lead time (calendar days)

-Revised lead time (calendar days)

-Annual interest cost (%)

Improved business processes give rise to better monitoring and handling of inventory transactions thus reducing the lead times. Since inventory ties up working capital, a saving of a few days can result in significant savings. The new lead times could be brought about by improved vendor relations, supplier reviews, supplier self-service and price/quantity negotiations with suppliers based on data visibility and history. An integrated system that looks at the whole business will inevitably allow greater control over inventory re-ordering.
Increase Number of Customers -Annual revenue ($)

-Current number of customers

-Current number of customers acquired per year

-Annual percentage improvement (%)

-Gross margin (%)

To quantify the additional monthly revenue and associated margin that would be generated if the proposed D365 helps acquire more customers. Each new customer brings extra revenue and associated margin. The number of customers increases year on year.

Customer relationship management benefits

Benefit Input values Assumption
Competitive Advantage – Extra Revenue -Annual revenue ($)

-Percentage increase in revenue (%)

-Gross margin (%)

Improved access to and use of customer information will lead to an overall increase in revenue.
Increase Customer Satisfaction -Annual revenue ($)

-Percentage improvement from D365 (%)

-Gross margin (%)

D365 leads to an improvement in customer satisfaction that in turn leads to improved revenue
Increase Order Value -Average order value ($)

-Annual number of orders

-Increase in order value with D365 (%)

-Gross margin (%)

Extra revenue is generated because D365 allows resources to be concentrated on customer facing activities for a greater proportion of time available. The D365 also provides faster access to information which may be used to improve sales effectiveness (price changes, new products, product queries, inventory queries etc.) and cross-selling or up-selling initiatives. The result may be measured in an increased average order value.
Improve Customer Retention -Annual revenue ($)

-Current number of customers

-Current annual retention rate (%)

-Target annual retention rate (%)

-Gross margin (%)

Improved business processes can lead to better monitoring and control of all transactions and hence, better customer service and happier customers. Improving the customer retention impacts the annual turnover and therefore increases the revenue year on year.
Customer Acquisition Cost Saving -Number of new customers acquired each year

-Current cost of acquisition ($)

-New cost of acquisition with D365 ($)

The current acquisition cost is known and a reduction will result from improved data availability and more efficient business practices.
Re-engage Customers -Number of lapsed customers contacted

-Estimated conversion rate (%)

-Average annual revenue per customer ($)

-Gross margin (%)

Lapsed customers are easier to re-convert than to find new customers hence contacting them should result in a high conversion rate. Experience shows that lapsed customers can be your hottest prospects.
Improve Bid Win Rate -Number of bids per year

-Average bid size ($)

-Current bid success rate (%)

-Revised bid success rate (%)

-Gross margin (%)

Improved information provided by the D365 increases the quality of bid responses, leading to higher conversion rates
Increase Customer Self-Service -Annual number of transactions

-Percentage of total that could be self-served (%)

-Current average cost per transaction (not self-serve) ($)

-Average cost for self-service ($)

-Percentage of possible transactions that could be encouraged to self-serve (%)

There is a defined cost for serving customer transactions which is greater than the cost that would be incurred if the transactions could be self-served. The D365 will move a proportion of transactions to the self-serve option.

Business Intelligence benefits

Benefit Input values Assumption
Improved Campaign Success -Number of campaigns per year

-Average revenue generated by campaign ($)

-Improvement (increase in number or success rate) (%)

-Gross margin (%)

Improved customer data availability will lead to better targeted campaigns and potentially additional ones within the existing budget leading to improved revenue.
Analytics Savings -Time spent on analytics (total FTE hours per month)

-Annual loaded cost per person ($)

-Analytics efficiency improvement (%)

-Annual non-labor analytics costs ($)

-Reduction in non-labor costs (%)

D365 reduces the average time spent on data preparation for analytics resulting in savings based on both labor time and other non-labor costs.
Model Deployment Savings -Annual number of models

-Average time taken per deployment (working days)

-Annual loaded cost per person ($)

-Reduction in deployment time (%)

-Annual non-labor cost per model deployment ($)

-Reduction in non-labor costs (%)

D365 reduces the average time to create and deploy models resulting in savings based on labor time and other non-labor costs
Reporting Savings -Time spent reporting (total FTE hours per month)

-Annual loaded cost per person ($)

-Reporting efficiency improvement with D365 (%)

-Annual non-labor reporting costs ($)

-Reduction in non-labor costs (%)

D365 reduces the average time spent on data preparation for reporting resulting in savings based on both labor time and other non-labor costs
Data Quality Savings -Time spent on data quality (total FTE hours per month)

-Annual loaded cost per person ($)

-Data quality efficiency improvement (%)

-Annual non-labor data quality costs ($)

-Reduction in non-labor costs (%)

D365 reduces the average time spent on data quality assurance resulting in savings based on both labor time and other non-labor costs.
Consulting Cost Savings -Current annual spend on consultancy or other 3rd parties ($)

-Percentage reduction in spend (%)

D365 can help optimize consulting costs and may be able to eliminate them.
Improved Legacy System Access -IT time spent accessing legacy systems (total FTE hours per day)

-Annual loaded cost per person ($)

-Improvement in legacy system access (%)

-Annual non-labor cost of legacy systems access ($)

-Reduction in non-labor costs (%)

D365 enables significantly faster access procedures which frees up IT time. Depending on the use of the data accessed the speed improvement can lead to more timely / accurate business decision making.
Fraud Reduction -Current annual fraud – missed revenues or refunds ($)

-Current rate of fraud detection (%)

-Rate of detection with D365 (%)

The D365 fraud protection can detect and therefore eliminate the fraud up to a maximum of 100 percentage of the current level.
Earlier Fraud Detection -Total value of annual fraud recovery ($)

-Current average age of claims to be recovered (months)

-Revised average age of claims (months)

-Annual interest cost (%)

The D365 fraud protection will allow the detection of fraudulent claims and will allow the business to take action sooner thus speeding up the recovery process.
Workforce Optimization -Total number of staff-Annual staff turnover (churn) % (%)-Annual loaded cost per person ($)

-Revised annual loaded cost per person ($)

The assumption that the staff that are lost throughout the year can be replaced by lower cost staff. Some D365s use familiar menus and structures which mean lower cost staff can be employed.
Reduce Skills Duplication -Number of staff currently engaged

-Efficiency improvement (%)

-Annual loaded cost per person ($)

D365 reduces the number of duplicated activities, and a percentage of the staff can be re-deployed thus resulting in savings.
Better Forecasting – Control Inventory -Current value of inventory ($)

-Percentage reduction with improved forecasting (%)

-Annual interest cost (%)

Improved customer information leads to improved forecasting which will allow better planning for inventory requirements. Not only will more inventory outages be avoided, but the amount of working capital reduced through the need for lower buffer inventory.
Better Forecasting – Liquidity -Current capital requirements ($)

-Reduction in capital requirements with D365 (%)

-Annual interest cost (%)

Improved business processes will result in a reduction in the liquidity requirements thus freeing up cash.
Avoid Non-competitive Propositions -Annual Revenue ($)

-Current gross margin (%)

-Revised gross margin (%)

D365 gives visibility of order profitability that was not previously available. The orders can be dealt with on the basis of their profitability rather than passively dealing with every request that arrives.
Earlier / Faster Responses to Losses -Monthly losses that may be avoided ($)

-Current time before losses can be avoided (calendar days)

-Revised time (calendar days)

-Additional permanent avoidable monthly losses ($)

D365 enables faster identification of impending losses that may be avoided.
Appropriate Customer Servicing Cost -Total number of customers

-% paying for and receiving ‘Gold’ service (%)

-Percentage of remainder incorrectly receiving ‘Gold’ service (%)

-Annual cost to serve ‘Gold’ customer ($)

-Annual cost to serve standard customer ($)

There is a defined cost for serving those customers at the higher level services and it is higher than that for standard level service. D365 will ensure that those that have paid actually receive the appropriate level of service. The savings come from ensuring customers who have paid for the standard service do not incorrectly receive the higher, more costly service.
First Time ReD365 – Escalations Savings -Number of escalations managed per month

-Total FTE time to manage an escalation (hours)

-Annual loaded cost per person ($)

-Other non-labor costs per escalation ($)

-Reduction in escalations (%)

The quantity of escalations can be reduced by ensuring calls are resolved first time round. This can be achieved by ensuring all agents have access to a 360degree view of customer. Making sure you have the right skills, with right equipment and parts the first time, reduces escalations.
Staffing Demand Forecasting -Number of permanent staff required to cope with peaks of demand

-Percentage of permanent staff replaced by temps to cope with peaks (%)

-Annual loaded cost per person ($)

-% premium paid for temporary staff (%)

-Percentage of time when temporary staff required (%)

Assumption that a percentage of the staff that is affected by the proposed D365 can be re-deployed.

IS/IT related benefits

Benefit Input values Assumption
Technology Refresh Avoided -Cost of planned technology refresh that will be avoided ($)

-Cost of the technology evaluation & research needed in preparation for technology refresh ($)

-Cost of training staff to operate the new technology ($)

-Cost of implementation of the new technology ($)

-How long until refresh due (months)

Every 3 to 5 years (36 to 60 months), new technology arrives which replaces current systems. With D365, it is possible to avoid spend on new technology
IT Maintenance Cost Reduction -Current annual support spend ($)

-Revised annual support spend ($)

Improved business processes will result in a reduction in the costs incurred in supporting them. This is brought about by improved efficiency, resilience, reduced numbers of discrete functions etc.
HW & OS Support Savings -Current annual support spend ($)

-Proportion of support spend saved (%)

Managed services result in a reduction in the costs incurred in supporting equipment. This is brought about by improved efficiency, resilience, reduced numbers of discrete functions etc. A general rule of thumb is that maintenance costs represent 80 % of the overall costs of an application throughout its life. A single data repository, improved impact analysis capabilities and drag and drop design interface could reduce integration maintenance time and costs by a factor of 2 or 3
Asset Management Cost Reduction -Value of assets under management ($)

-Assets not re-purchased annually (%)

-People required to manage assets

-Annual loaded cost per person ($)

-Management effort reduction (%)

Improved business processes can lead to better monitoring and control of assets. As a consequence, assets are not duplicated and there is a reduction in management effort.
Avoid Software License Costs – Current annual license costs ($)-Reduction (%) Licensing costs for the existing D365s are known and a proportion of those licenses are made redundant by the new D365.
Contractor Costs Reduction -Number of contractors / temporary staff engaged

-Number of days worked per year per contractor

-Daily rate per completed working day ($)

-Reduction with D365 (%)

Contractors are required for many reasons including supporting legacy systems. Their activity may not be needed with the proposed D365.
Help Desk Savings -Number of help desk calls handled per month

-Average time spent per call (minutes)

-Annual loaded cost per person ($)

-Non-labor cost per call of help desk services ($)

-Percentage reduction in calls (%)

D365 may significantly reduce the calls coming in to help desks by avoiding calls to retrieve old revisions of documents.
Reduce Trouble Ticket Volume -Annual number of trouble tickets

-Cost per trouble ticket ($)

-Reduction in trouble tickets (%)

Assumptions that the number of trouble tickets can be reduced following the implementation of D365.
Time Savings – IT User -Total number of IT users

-Waiting time per user (minutes per day)

-Annual loaded cost per person ($)

-Percentage waiting time saved (%)

D365 frees up users’ wasted time
IT Staff Savings -Number of ICT staff currently engaged

-Efficiency improvement (%)

-Annual average loaded cost per person ($)

Assumptions that a percentage of the staff that are affected by the proposed D365 can be re-deployed to other tasks
Outage Reduction – SLA Improvement -Outage cost per hour

-Current uptime (or SLA) (%)

-Revised uptime (or SLA) (%)

The outage cost is known and the SLA offered is better than the existing one. It is assumed that the service is provided for 24 hours per day and 365 days per year i.e. 8,760 hours per year.
Reduce Downtime Costs -Current downtime per month (hours)

-Downtime cost per hour ($)

-Reduction in downtime (%)

Improved business processes will result in faster more secure recovery of data in the event of a loss of system or the absence of a key person thus reducing downtime.
Servers Saved -Number of servers used for business processes

-Proportion saved/avoided with D365 (%)

-Annual external charges per server (3rd party etc.) ($)

-Annual internal charges per server (allocation) ($)

The proposed D365 uses existing servers more efficiently making a proportion of new server purchases unnecessary or re-deployable to other areas of the business. The monthly 3rd party and / or annual internal cost of maintaining the infrastructure is thus saved.
Datacenter Power Efficiencies -Total installed equipment power rating (kW)

-Current datacenter power usage effectiveness (PUE)

-Alternative datacenter PUE

-Cost per kWh ($)

-Carbon cost per ton ($)

Cloud services can reduce energy consumption and CO2 production.
Energy and Cooling Savings -Cost per kWh ($)

-Present consumption (kWh per month)

-Percentage saving (%)

D365 requires less hardware and therefore leads to reduced energy consumption and running costs.
Update / Patch Deployment Savings -Number of update and/or patch deployments per year

-Current time taken for each deployment (hours)

-Annual loaded cost per person ($)

-Revised time taken for each deployment (hours)

Deployments are performed multiple times throughout the year
Faster Application Deployment -Number of application deployments per year

-Current time taken for each deployment (hours)

-Annual loaded cost per person ($)

-Revised time taken for each deployment (hours)

Deployments can be performed faster on a cloud D365.
Internal Development Costs Avoided -Annual cost of developing D365 internally ($)

-Reduction in development costs (%)

The customer is considering developing a D365 internally. Costs such as manpower, tools etc. can be avoided with the proposed D365
Reduce Application Integration Costs -Annual spend on application integration (internal) ($)

-Reduction in internal application integration spend (%)

-Annual spend on application integration (outsourced) ($)

-Reduction in outsourced application integration spend (%)

-Other annual costs avoided (e.g. testing) ($)

D365 has the capability to integrate with other systems. This can reduce the need for expensive IT resource to integrate applications. The task can be done instead by a business administrator.
Avoid Systems Integration Costs -Annual spend on Systems Integration ($)-Reduction (%) Current SI costs are known and a proportion of those are made avoided by the proposed D365.
Disaster Recovery Savings -Time spent on DR capability maintenance (total hours per month for all staff)

-Annual loaded cost per person ($)

-Time saving (%)

-Annual non-labor DR costs ($)

-Reduction in non-labor costs (%)

D365 reduces the average time spent on DR resulting in savings based on both labor time and other non-labor costs.

MB-340: Microsoft Dynamics 365 Commerce Functional Consultant (beta)

Microsoft have released a new exam for the Commerce functional consultant.  I did take this exam in the beginning of July, and it can take a few weeks before the results come.  But I’m pretty sure I will fail.  The exam was quite hard and there was just too little time. I got 62 questions, but only managed to answer approx. 45 of them within the timeframe of 90 minutes.  If you think MB-300 was difficult, then MB-340 is harder!

This blogpost is therefore my study notebook to retake the exam(if I fail😊).  You will not find any of the exam questions or answers here, but if you follow this steps, I think you will be closer to achieving your goal of passing the MB-340 exam, and also to understand the topic better.  The chapter and headlines are organized accoring to the skills measured list of MB-340.

Disclaimer:  Some texts and pictures are copied from the Microsoft learn, docs. demo environments and other sites.  In most cases you should find a hyperlink to the original source for a deeper study, and there are no guaranties that all here is right.  You should always refer to the official Microsoft documentation and training.

Enjoy and god luck studying.

Configure Dynamics 365 Commerce Headquarters (25-30%)

Configure prerequisites and commerce parameters

Create employee and customer address books

Employee and customer address books are used to limit the personal to specific stores/POS or what information the employee should be see in HQ.  How to create an address book is documented here. One nice feature here is that the address book is the basis for the extensible data security (XDS) policy, that limits what stores and transactions a HQ user can access.  To make the XDS to work, remember to assign the correct Retail* roles to the users.  This will ensure that the address book filtering is working as expected.

What I normally recommend is to have one address book per store, one for the region, one global address book and one address book for customers.  If there are multiple brands, I also have customer address book for this.  Keep in mind that you can select multiple address books towards stores, employees, and customers.  I also like to think of address books as a hierarchy, and this allows for ensuring that regional managers can see their information and transactions across stores, while a store clerk only see information relevant to his job.     

Configure and manage retail workers

Retail workers are setup using features from the HR features, but the workers table is accessible from the retail menu.  Commerce lets you perform the following employee management functions:

  • Create entities for jobs, positions, and workers
  • Assign workers to more than one store
  • Configure different language settings for each user and user-based POS screen layouts
  • Limit the list of allowed operations

Additionally, you can configure the POS permission groups to associate different employees with different roles. The task management feature offers productivity enhancements for employees at the stores, where task lists can be assigned by the system.

Setting up the structure of the workers and responsibilities is an important task, and by doing it the right way this can save you form a lot of work.  The use of positions and jobs can ensure that the users get the correct level of access.  Let’s say we have the following retail organization shown in the next figure.

Here we have 2 stores, and it is relevant to ensure that the employees in one store only access the store they are working in.   We could model this hierarchy by assigning multiple address books to workers, customers and stores.

The workers can be connected to a position like “Store manager Bergen”.  The position is then connected to a Job like “Store manager”.  The job store manager can then be connected to a POS permission group.  Then you don’t need to individual POS permissions, but it is the position that decides what is allowed. 

Please spend time on this HR part, because it gives a lot of benefits when done properly.  And please add pictures of the employee.  It gives a more personal touch to the user😊

The permission group assigned to as job (or overridden on the worker) is the feature that is controlling what the worker is allowed to do in the POS. The fields are mostly self-explaining, but unfortunately not very well documented.

Here are some additional blogs on the subject.

Assign address books to customers, channels, and workers

Assigning address books to these records is easy.  Find the address book field, click on the lookup button and select the address books that the record should be a part of.

A small tip.  You cannot just copy/paste the address book values if you are marking the record with multiple address books.  You need to actually click on the lookup, and then select each of them.

Create email templates and email notification profiles

The email templates is located at Organization administration –> Setup –> Organization email templates.  The email template is can be defined per language.

If you click on the “edit” button there is an upload capability in the screen.  You also see a list of placeholders, where the system will fill in the specific information.  The exact placeholders available can be found here.

Here is a small, but valuable tip from me, that makes it easy to manually transfer your templates between installations.  Add the column “email”

Then a field with all the HTML is available for copy/paste.  Press CTRL-A to mark all contents, and then you can paste it into any HTML editor.  This is great if you want to just copy email templates from the Contoso demo data, and make some minor adjustments.

In a typical retail installation you would create quite a few email templates, and in the Contoso demo environment you can see a set that is relevant, and linked towards a commerce email notification profile. As you see here, there are emails for new order, confirmation, shipping, etc. You can also create separate emails per modes of delivery.

For configure the email batch, then the following docs is relevant to read.

Configure organizational hierarchies and hierarchy purposes

Organizational hierarchies are a powerful way of grouping a set of stores and then view and report from various perspectives.  I often make hierarchies based on reporting purposes and often mimic the hierarchy of the address books.  But you may also have geographical elements into the hierarchy.   Keep in mind that the levels in the hierarchy corresponds internal organizations of the party entity, and that the retail channel most often is the lowest level.  Therefore think through this setup carefully to ensure a correct structure.  Also take a look at the following video by André Arnaud de Calavon for more a valuable walkthrough of the feature. Remember that when you publish a hierarchy you select a data, and it is not allowed to make changes prior to this date.  I therefore recommend, that you publish the hierarchy on an earlier date, so that you have the possibility to make any corrections. 

The organizational hierarchies can be used a few places.  Like on the assortments where you can select what organizational entities should have a specific assortment.  You also use it for financial and transactional statement processing.  One that are relevant is the on the sales reporting, where the reporting is grouped according to the organizational hierarchy.

With some minor extensions it is possible to add additional levels, like region, franchisee etc, can be added by creating additional types of internal organizations.  I have done dis at a few customers with success 😊

Configure Commerce shared parameters

The shared parameters are common to all legal entities. And the most important setup here, is the number sequences and Identity providers.

Configure company-specific Commerce parameters

The commerce parameters are per legal entity, and contains the more specific setup and number sequences.  One important element is the “initialize” that creates the default configuration data.

Microsoft often have a set of configuration parameters for enabling features, like the “ProductSearch.UseAzureSearch”, that is essential when setting up the eCommerce.

The parameters here is actually not very well documented, and if often take some time “googling” or asking the community to find answers to each of the parameters.  But most of them should be self-explaining if you have been working with Dynamics 365 for a while.

Describe and configure additional functionality

Create and configure channel and sales order attributes

Attributes are documented here.  Channel attributes are attributes that are captured on the transactions that originates from the channel/store. These attributes can then again be used for information and reporting purposes. Lets say we want to record if the customer was happy when performing a purchase.  The first we need to do, is to create an attribute type:  

Then we create an attribute based on this attribute type.

I would then place the attribute into an attribute group, as I will probably later add more attributes I would like to record per sales order.

On the store/channel, I will add the happy group, and state that I would like to record this on the order header.

This will allow me record if the customer was happy when we performed the transaction. (Remember to run distribution job 1070 first)

When we then have performed a transaction, and run the P-job for importing the transactions to HQ, we can see the recorded attribute on the transaction.

As seen here, the attributes opens for many possibilities for recording information happening at your sales channel. Keep also in mind that when using call center, then the attributes also comes into play, and you can record attributes when creating the sales order.

Currently only simple strings are supported, but more types will be available in later releases.

 I hope you can see that the attributes in D365 is very flexible, and allows for a lot of scenarios.  I also see that the feature is underused in implementations, and hope that by using attributes we can avoid a lot of extensions related to data recording. 

Using attributes in power BI is also great for more depth analytics.

Configure commissions and sales representatives

Sales commission can be a nice way to reward hardworking employees, that manages to close the right deals.  The documentation is available here, and also take a look at the following blog for how to setup commission groups.  The way this works, is that when performing a sale, the sales order will be stamped with a sales representative, and on the sales group each sales representative can have a commission share.

I can then setup a commission calculation where I in this case give a commission of 2% on the revenue.

This will be posted to ledger according to the commission posting.

The process of paying out commissions to the sales representatives is not very well documented.  So, I guess the process is a bit manual, and solved by looking at breakdown on a sales order, click the invoice tab on the specified sales order and then select Invoice Journals, which will open a new form. In that new form, select Commission and click Commission transactions.

If you wat a list of all commission transactions, you may add the following to your D365 URL : “&mi=CommissionTrans” and this will then list up commissions per sales representative.

If you cannot see the menu item, it is because you have enabled the project operations integration at “Global project management and accounting parameters”.  It seams that there is a “collision” between the commission feature and the new project operations integration feature. I have no clue of why Microsoft have done this.

Configure payment methods and card types

The menu item for these are located at Retail and commerce à Channel setup à Payment methods.

Your start with defining the card types:

The next step is to define the card numbers, that is used to identify the card type based on the card number.

Payment methods lists up the acceptable payment methods. If you are looking for the Norwegian SAF-T cash register code you can find them here.

Configure payment methods and card types

The menu item for these are located at Retail and commerce –> Channel setup –> Payment methods.

Configure and manage gift cards

The menu items for gift cards is the following. In addition you have to define a service product that will be used when adding amounts to a card.

Configure and manage gift cards

The menu items for gift cards is the following. In addition you have to define a service product that will be used when adding amounts to a card.

The gift card is a number, balance

For gift cards, the following documentation gives some insight, especially if you need to integrate to an external gift card.  If a retailer’s operations are run entirely in D365, internal gift cards are the best solution. For complex retailers that span multiple countries or regions, and multiple point of sale (POS) systems, it’s often best to use a third party to manage gift card balances and enable gift cards to be used across those systems. The out-of-box payment connector for Adyen supports external gift cards through SVS and Givex in POS, the call center, and the e-commerce storefront.

Describe Omni-channel capabilities including payments, orders, and returns

BOPIS a term for buy online, pickup in store. The following omni-channel payment scenarios are supported:

  • Buy online, pick up in store
  • Buy in call center, pick up in store
  • Buy in store A, pick up in store B
  • Buy in store A, ship to customer

There is a lot to write about this, but lets show an example where we buy some snacks online, and pick it up in the store.  Here is my Vitalia site, where I have a snack.

When I click on this, I see that this item is available for pickup in store.

I select to pickup the item in the Bergen flagstore. Then I checkout

Then I can pickup this order in my CPOS:

I can then choose payment method, and the transaction is complete.  I even got some nice confirmation messages on email

Also checkout the omni-channel payments overview and  Payments FAQ for additional information on payment options in a omni-channel scenario.  Pay specially attention to Tokens that represent payment card numbers, payment authorizations, and previous payment captures. Tokens are important because they help keep sensitive data out of the point of sale (POS) system.

Configure data distribution

The database that stores data for a channel is separate from the Commerce database. The channel database holds only the data that is required for transactions. For example, master data is set up in Headquarters and then distributed to channels; on the other side of the transaction, transactional data is created in the point of sale (POS) or the online store and then uploaded to Headquarters. Microsoft have created an updated Commerce Data Exchange best practices that is quite new (15/7/2021), and discusses some nice topics worth exploring.  The following figure shows the flow of the distributions.

There is a set of data that require real-time direct access:

  • Issuing and redeeming gift cards
  • Redeeming loyalty points
  • Issuing and redeeming credit memos
  • Creating and updating customer records
  • Creating, updating, and completing sales orders
  • Receiving inventory against a purchase order or transfer order
  • Performing inventory counts
  • Retrieving sales transactions across stores and completing return transactions

Create info codes, sub-codes, and info code groups

Info codes are used to capture additional information behind actions that occur in the POS and call center Commerce channel. Depending on the input type, users can assign various limitations and restrictions for certain info code types. Some info codes can require input, only trigger once for each transaction (regardless of products), link multiple info codes together, and more.

Describe Dynamics 365 Fraud Protection purchase protection, loss prevention, and account protection

The following image shows several examples of what type of fraud can occur at different phases in the customer journey.

Fraud Protection offers three capabilities that can be integrated together or used individually, which provides merchants with the option to use the capability that best suits their business needs.  Here is a picture of how the application looks like.

Purchase Protection – Helps merchants preserve genuine purchases and decrease fraud. It helps protect online revenue by improving the acceptance rates of commerce transactions with insights and tools that help balance revenue opportunity versus fraud loss and checkout friction.

Account Protection – Helps merchants combat account creation and account takeover fraud. It helps improve customer experience at critical steps of the account life cycle by enabling merchants to block fraudulent activities and protect their customers’ accounts.

Loss Prevention – Helps protect revenue by identifying anomalies and potential fraud that are affecting returns and discounts that arise from omnichannel purchases, enabling store managers and loss prevention officers to quickly take action to mitigate losses.

Manage statements

Describe advantages of using trickle feed-based posting

With trickle feed-based order creation, transactions are processed throughout the day, and only the financial reconciliation of tenders and other cash management transactions are processed at the end of the day. This functionality splits the load of creating sales orders, invoices, and payments throughout the day, providing better perceived performance and the ability to recognize revenue and payments in the books in near real-time.

See also the following blog-post.

Validate retail transactions by using the transaction consistency checker

When a statement is posted, posting can fail due to inconsistent data in the commerce transaction tables. The data issue may be caused by unforeseen issues in the point of sale (POS) application, or if transactions were incorrectly imported from third-party POS systems. Examples of how these inconsistencies may appear include:

  • The transaction total on the header table does not match the transaction total on the lines.
  • The line count on the header table does not match with the number of lines in the transaction table.
  • Taxes on the header table do not match the tax amount on the lines.

Transactions that fail the validation check and transactions that have not yet been validated will not be pulled into statements. During the “Calculate statement” process, users will be notified if there are transactions that could have been included in the statement but weren’t. If a validation error is found, there is a capability so that users can fix the records that failed through the user interface. Logging and auditing capabilities will also be made available to trace the history of the modifications.

Configure and manage retail statement calculations and posting

The statement posting process uses the distribution schedule to pull a set of POS transactions into the headquarters (HQ) client. The following illustration shows the statement posting process. In this process, transactions that are recorded in the POS are transmitted to the client by using the Commerce scheduler. After the client receives the transactions, you can create, calculate, and post the transaction statement for the store.

When I set up these I normally schedule them as batch jobs

Troubleshoot statement posting issues

When posting retail statements, there is a lot of checks to ensure that the transactions are correctly posted. In addition to the retail transaction consistency check, we often see issues that is common with invoice updating a sales order.  This involves that the inventory posting is setup correctly, currency rounding, financial dimensions etc.  I have also several times encountered issues related to the fact that the inventory is closed when the transactions are imported.  Most of them can be fixed from within the D365 application.  The posting error should in most cases look like this:

A quite common error is that the cash declaration is wrong.  In such cases it means that there either are too much or too little cash in the EOD statement.  Then you need to figure out why there are missing cash. This can be faulty cash handling or even fraud.  When the reason have been found, then correct the statement, and manually create a journal/voucher that settles the differences.  If it becomes too complicated then a Microsoft Support ticket may be required. 

Configure Distributed Order Management (DOM)

DOM is a quite new feature, and if I should boil it down to a single sentence I would say that the end result will select what warehouse the sales order lines should we delivered from, and also being able to pickup the order in POS to ship from POS.  The concept is to have DOM process the orders through a set of profiles and then create a fulfilment plan.

I have not myself performed any implementations on DOM yet, and I also see that parts of the functionality soon will be integrated with the Dynamics 365 Intelligent Order Management order orchestration capabilities. Here are some videos on the topic on youtube : https://www.youtube.com/watch?v=CTAYXXj5Cak and https://www.youtube.com/watch?v=-0PvV3-7wZs

Configure fulfillment profiles

The fulfillment profiles are the main area, where you can control what store or fulfillment center should deliver the order.  In the picture under, I have created a very simplified rule stating that I don’t want to have more than 100 open orders per store.

Then add the rule to a fulfillment profile to balance the order volume across my physical stores to pick up and deliver, and ensure that no stores will be assigned more than 100 open sales orders in their que per day.

As seen in the documentation 7 rules that you can apply in combinations.

Configure cost components including shipping, handling, and packaging costs

The cost configuration feature lets retailers define and configure additional cost components that will be calculated and factored in to determine the optimal location to fulfill order lines from.  Here is a cost factor of having 3$ per order line.

And I can add this to the fulfillment profile.

The idea here is to have multiple profiles, so the optimalization engine can select the best possible outcome based on the rules/restrictions and cost factors.  So you should create multiple fulfillment groups that the engine can select among.  Typical one for DC(Distribution Centers) and one/more for other fulfillment centers or stores.  I have been creating several order processing engines in the past (AX2009 and AX2012), and the DOM seams to be touching the basis of these requirements.  But I still feel that the solution have a potential of having a lot more rules covering ATP, Wait/hold, parallelization, smart reservation, optimal order mix etc. But I guess much of this can be created as extensions. 

Configure management rules and parameters

The parameters for DOM includes two calculation types; Production solver and Simplified Solver. The Production Solver requires the special license key that, by default, is licensed and deployed in production environments. For non-production environments, this license key must be manually deployed. The Production Solver improves performance (such as the number of orders and order lines that can be handled in a run) and convergence of results (since a batch of orders might not yield the best result in some scenarios). Some rules like the Partial orders rule and the Maximum number of locations rule require Production Solver.

Monitor fulfillment plans and order exceptions

The DOM have a workspace where the current fulfillment can be monitored.  What is relevant to keep an eye on is the exception lines, because they show lines that are failing the fulfillment processing.

The result of the fulfillment plan shows how the order is fulfilled and where the fulfillment should happen from.

It is important to understand that DOM looks only at orders that are created from commerce channels(Call-center, POS and eCommerce). Sales orders are identified as sales orders when the Commerce sale option is set to Yes, and also keep in mind that DOM hasn’t been thoroughly tested with advanced warehouse management features.

Configure order fulfillment

Dynamics 365 have the capability to fulfill and deliver sales orders from both stores and distribution centers(DC).  This is one of the elements to create a true omnichannel experience.  Buy-online-pickup-in-store are one of these scenarios.  But also the capability of transferring goods to other stores or back to the DC to ease with overstock scenarios. The result of the fulfillment can be seen in the POS in the menu items “Orders to pick up and Orders to ship”.  I also suggest reading the following article, than explains the fulfillment statuses you get on the sales order lines.

In POS the sales orders will show up like this, and you may start the process of clicking on the fulfill button.

Then the lines show up, and you can accept all or some of the lines. 

After you have accepted the lines, you may Pick, Pack and Ship the order.

As you more through the pick, pack and ship steps, you will see the sales order fulfillment status being updated in real-time in the sales order screen. Packingslip and invoice updated just like handling a HQ sales order.

Configure modes of delivery including shipments, pick up, and carry out

In the modes of delivery you may specify what modes of delivery is applicable to what retail channel, products and address. You may also add a transport delivery.

On each store/channel you may specify what modes of delivery is applicable to this store.

In the commerce parameters you may specify which modes of delivery is made for pickup modes, meaning that the customer comes into the store to pickup the goods ordered online or by calling in.

Configure curbside customer order pickup

You have to turn on the Support for multiple pickup delivery modes feature. Keep in mind that DOM ignores any sales lines that are marked for store pickup.  Also check out the order pickup Time Slot Management to ensure that customers can select the timeslot that is the most convenient for them, and to ensure that the store does not become overcrowded. There are elements in the roadmap that is worth taking a look at on this matter. Also checkout how you can setup customer check-in notifications in POS, where a check-in confirmation task is created in POS. 

If you create the sales order using the call center, you will see that you per line can select the pickup time range, and also see how may available slots there are.

In POS this order will show up under the order fulfillment with the curbside pickup date/time. 

Also take a look at the commerce teams integration that allows for POS tasks to be published to appear in teams.  This means that tasks like curbside pickups will appear in the users teams app, and the tasks will also be available for the Microsoft Planner.

Configure charge codes, charge groups, and automatic charges

Charges are often used for add freight charges and handling fees to customer order or sales transaction created in the POS, call center, or e-Commerce channels.  If you use the Use advanced auto-charges parameter, the behavior can be automated.  Take a look at the documentation for more examples and how to use best setup automatic calculation of charges.

One thing that I feel is missing, is the ability to define the changes based on product weight.  Most often the freight is calculated based on weight, volume, and distance.  I think there is room for improvements in this area. Let’s hope the Microsoft Commerce product team have this on their radar for future releases

Configure and assign order fulfillment groups

Fulfilment groups are used in DOM, but also in POS to define whether the warehouse or warehouse and store combinations that are defined in fulfillment groups can be used for shipping, for pickup, or for both shipping and pickup. This allows for added flexibility for the business to determine which warehouses can be selected when creating a customer order for items to ship vs. which stores can be selected when creating a customer order for items to pick up.

To use these configuration options, turn on the Ability to specify locations as “Shipping” or “Pickup” enabled within Fulfillment group from feature management. If a warehouse that’s linked to a fulfillment group isn’t a store, it can be configured only as a shipping location. It can’t be used when orders for pickup are configured in POS.

Configure products, prices, discounts, loyalty, and affiliations (25-30%)

Product information is the backbone of supply chain and commerce applications across all industries. It’s crucial that shared product definitions, documentation, attributes, and identifiers be used correctly.  Do not take this process too easy, and it is essential that quality is put into these processes.  I have seen many projects struggling, because they think just integrating a 3’rd part PIM solution solves all problems.  You need to understand and correctly setup the structure and architecture of products to get the best possible outcome.  It is my experience that D365 product management is more than sufficient to describe products and prices.

Configure products and merchandising

Before you can offer products for resale in your commerce channels, you must create and configure the products. Commerce creates organization-wide products in the product master. You can create the products, define the product properties and attributes, and assign the products to commerce category hierarchies. To make the products available to your channels and add them to an active assortment, you must release the products to the legal entities where they are available. The documentation from Microsoft describes the steps quite well

Configure product category hierarchies

For product hierarchy there are 3 essential types that should be setup:

Product hierarchyUse this hierarchy type to define the overall product hierarchy for your organization. You can use this hierarchy type for merchandising, pricing and promotions, reporting, and assortment planning. Only one product hierarchy can be assigned this hierarchy type.
Supplemental hierarchyUse this hierarchy type for any additional category hierarchies that you want to create. For example, in the spring, you have a promotion for swimwear. Therefore, you include your swimwear products in a separate category hierarchy and apply the promotional pricing to the various product categories.
Navigation hierarchyUse this hierarchy type to group and organize products into categories so that the products can be browsed online or in POS.

When I’m implementing Commerce, I use to create quite a few supplemental hierarchies.  I often also mix in elements like a brand hierarchy, product-vendor hierarchy, season and campaign hierarchy.  This makes it simpler and easier to navigate through products or to group them in Power BI. The great thing is that hierarchies allows you to create strong relations into commerce price and discounts. 

Configure product attributes and attribute groups

Product attributes describes the product, and is visible in HQ, POS and eCommerce.  Here is some examples on how it looks on the different channels:

POS:

eCommerce:

Dynamics 365 HQ (Several forms available, but here I show the channel categories and attributes screen to show that attributes actually can be defined per retail channel or organizational hierarchy)

Configure assortments and product catalogs

Assortments let’s you manage product availability across channels.  Keep in bind that organizational hierarchies and category hierarchy can be used to create more dynamic product assignments to stores.

Catalogs are currently more used in call center. Initially the catalog features were created to support third-party e-Commerce integrations.  I think in future releases catalogs will come back to ensure that you can create B2B based catalog, and use this for restricting products towards different customers.

The following capabilities are planned as part of future releases:

  • Associate a default catalog to the e-commerce website.
  • Associate one or multiple catalogs to the customer hierarchies associated with a business partner organization and set a default catalog.
  • Associate a default catalog to the customers in the customer hierarchy.
  • Render the e-commerce site with products as per the catalog associated with the customer that’s logged in.
  • Provide capability for a customer to change the default catalog to another valid catalog on the e-commerce site.

Manage product labels and shelf labels

Shelf and product labels are not a proud solution.  Its is a dinosaur that I think needs some additional investments.  If you start on this path, expect to do some extensions.  What I have been waiting for is a BarTender integration that allows for a much smoother design and printout of product and shelf labels.  

Describe uses cases for recommendation types including product, personalized, Shop

Product recommendations are available the following scenarios:

On any store page for browsing or landing page in e-CommerceIf customers or store associates visit a store page, the recommendation engine can suggest products in the New, Best Selling, and Trending lists.
On the Product details pageIf customers or store associates visit a Product details page, the recommendation engine suggests additional items that are also likely to be purchased. These items appear in the People also like list.
On the Transaction page or the checkout pageThe recommendation engine suggests items, based on the whole list of items in the basket. These items appear in the Frequently bought together list.
Personalized recommendationsMerchandisers can provide signed-in customers a personalized picks for you list, in addition to new functionality that allows for existing list scenarios to be personalized based on that customer. To learn more, see Enable personalized recommendations

What is important to understand is that certain parts of the recommendation solution are NOT included with the Commerce licenses, and have to be purchased as a separate SKU from Microsoft.  Only the algorithmic models are included.  Here is a list of the current available product recommendations.

NewAlgorithmicThis module shows a list of the newest products that have been recently assorted to channels and catalogs.
Best sellingAlgorithmicThis module shows a list of products that are ranked by the highest number of sales.
TrendingAlgorithmicThis module shows a list of the highest-performing products for a given period, ranked by highest number of sales.
Frequently bought togetherAI-MLThis module recommends a list of products that are commonly purchased together with the contents of the consumers current cart.
People also likeAI-MLThis module recommends products for a given seed product based on consumer purchase patterns.
Picks for youAI-MLThis module recommends a personalized list of products based on purchase patterns of the signed-in user. For a guest user, this list will be collapsed.

You can manually seed the product recommendations manually by creating curated lists

These curated lists can be added to eCommerce or POS :

Similar looks, and Shop similar descriptions recommendations

I have actually not managed to get this working with the AI based product recommentation.  It could be that a separate SKU is required for making this work.

Configure recommendations

Before any AI-ML recommendation starts being effective, you could manually configure the recommendations.  I have seen documentation that AI-ML do require a substantial amount of transactions before it becomes effective.

Configure warranty settings

The extended warranties are actually set up as a product that can be sold to customers. At the POS, sales associates are prompted to add an extended warranty when a related product is added to a customer’s cart. Therefore, an upsell or cross-sell opportunity is presented to sales associates as part of the sales flow. Here is an important note; A warranty is a service that is provided for a specific, unique product. In Dynamics 365, a product can be uniquely identified only by a serial number.

Configure inventory buffers and inventory levels

Inventory buffers and inventory levels that determine the messaging about inventory availability on Microsoft Dynamics 365 Commerce sites. Instead of showing actual inventory values in e-Commerce storefronts, many retailers prefer just to show messaging about inventory availability status (for example, “Available” or “Out of stock”) to inform customers whether an item is available for purchase or potentially out of stock. For this approach, inventory buffers and inventory levels that determine the inventory availability messaging must be made available and configured.

The inventory profile can be defined on the product as shown here:

The calculation of product availability can be executed on an hourly basis. The default cache is set to 60 seconds. After users post transactions in POS, they should wait 60 seconds before they verify that the on-hand inventory has been reduced. If your business scenario requires a smaller cache time you should create a support request.

There is a batch job named Populate product attributes with inventory level, where the inventory level is then being added to the products as a product attribute.

If I then take a look at the product attributes, I then get a new attribute containing the on-hand as an attribute.

This attribute can now also be shown directly on the POS or on the eCommerce

Configure products and variants including configuring barcodes

Barcodes can be created per released item and per variant/product dimension.

One thing I have always found annoying is that the barcodes are legal entity specific and towards released product.  I often see a requirement where barcodes are the same across legal entities. For the warehouse  management app Microsoft have in 10.0.21 made it possible to Scan using GS1 format standards.  It would be great if this feature also was made possible in commerce/CRT.

Manage pricing

Pricing is a huge topic, and is also very well documented.  I have blogged extensively on this topic before, and a lot have changed and improved in newer releases.

 You can set the price of a product in three places:

  • Directly on the product (base price)
  • In a sales price trade agreement (A trade agreement price is always used before the base price.)
  • In a price adjustment

Design and create price groups

Price groups are at the heart of price and discount management in Commerce. Price groups are used to assign prices and discounts to Commerce entities (that is, channels, catalogs, affiliations, and loyalty programs). Because price groups are used for all pricing and discounts, it’s very important that you plan how you will use them before you start. By itself, a price group is just a name, a description, and, optionally, a pricing priority.

The main point to remember about price groups is that they are used to manage the many-to-many relationships that discounts and prices have with Commerce entities.

There is a form named channel price groups that shows the relationship between the channels and discounts, that makes it easier to understand the relationships.

Configure pricing priorities

By itself, a pricing priority is just a number and a description. Pricing priorities can be applied to price groups, or they can be applied directly to discounts. When pricing priorities are used, they let a retailer override the principle of the best price by controlling the order in which prices and discounts are applied to products. A larger pricing priority number is evaluated before a lower pricing priority number. Additionally, if a price or discount is found at any priority number, all prices or discounts that have lower priority numbers are ignored.

The price and a discount can come from two different pricing priorities, because pricing priorities apply to prices and discounts independently.

Configure product pricing including smart rounding

Smart rounding can be used when generating prices to be posted to the trade agreements.  It ensures that we get consumer “interesting” prices typically ending with .99 or .95. When using the category price rules or working on trade agreements you can apply smart rounding.

In the Accounts receivable parameters you can also see that when using generic currency the smart rounding kicks in.  I have not tested how the generic currency works together with commerce.

Configure catalog pricing

Catalog pricing are using the same architecture for pricing as stores where you assign products and price groups to a catalog.

In the catalog you can click on the price groups to assign the pricegroups that is assigned to the catalog.

And if you click on the price list, you get the prices per product.

PS!  If you do this from the store channel (same feature) you can generate a nice excel based pricelist that is made available in the print archive.(at least in my 10.0.21 box)

Configure affiliation pricing

The definition of an affiliation is a link to or association with a group. In Commerce, affiliations are groups of customers. Affiliations are a much more flexible tool for customer pricing and discounts than the core concept of customer groups and discount groups. First, an affiliation can be used for both prices and discounts, whereas non-retail pricing has a different group for each type of discount and price. Next, a customer can belong to multiple affiliations but can belong to only one non-retail pricing group of each type. Finally, although affiliations can be set up so that they are linked to a customer, they don’t have to be. An ad-hoc affiliation can be used for anonymous customers at the POS. A typical example of an anonymous affiliation discount is a senior or student discount, where a customer can receive a discount just by showing a group membership card.

Although affiliations are most often associated with discounts, you can also use them to set differential pricing. For example, when a retailer sells to an employee, it might want to change the selling price instead of applying a discount on top of the regular price. As another example, a retailer that sells to both consumer customers and business customers might offer business customers better prices, based on their purchasing volume. Affiliations enable both these scenarios.

Affiliations is just a list, and can be connected to price groups

On the customer, you can add multiple affiliations to this customer.

If you want to apply customer-specific prices, we recommend that you not set price groups directly on the customer. Instead, you should use affiliations.

Configure category pricing rules

The category price rules feature in Commerce gives you an easy way to create new trade agreements for all the products in a category. This feature also lets you automatically find existing trade agreements for the products in the category and expire them.

It creates trade agreement journal lines that can be posted.

Manage discounts and promotions

There are many types of discounts:

  • Simple discount – A single percentage or amount.
  • Quantity discount – A discount that is applied when two or more products are purchased.
  • Mix and match discount – A discount that is applied when a specific combination of products is purchased.
  • Threshold discount – A discount that is applied when the transaction total is more than a specified amount.
  • Tender-based discount – A discount that is applied when the transaction total is more than a specified amount and a specific payment type (for example, cash, credit, or debit card) is used for payment.
  • Shipping discount – A discount that is applied when the transaction total is more than a specified amount and a specific mode of delivery (for example, two day shipping or overnight shipping) is used on the order.

When you set up a price adjustment or a discount, be sure to confirm that price groups are assigned to the correct channels, catalogs, affiliations, or loyalty programs that you want the discount to apply to.

Configure discount parameters

Calculating prices and discounts can be extremely heavy from a computational aspect.  Especially if you have many items in a sales basket and many promotions and discounts.  The following parameters allows for the right setting to you needs.

Microsoft have also hade the following flow schema available that explains some of the complexity involved to the sales basket pricing happening in CRT.

Configure channel or customer-specific discounts

Channel and customer specific prices are defined with price group.  At mentioned earlier I recommend using affiliation to create customer specific discounts, and then apply the affiliation to the respective price groups.

Configure quantity, shipping, tender-based, and threshold-based discounts

Quantity discounts

A quantity discount is a discount that is given to customers when they purchase a particular quantity of a product. For example, you can set up a 5 percent discount for the purchase of two products of a particular category or brand.

Buy 5 items get 20%, Buy 10 items get 40%

Shipping discounts

Free or discounted shipping is one of the highly influencing factors driving the customers’ online purchase decisions. Many retailers also leverage the free shipping benefit to motivate the customers to increase their basket size, thus increasing the revenue per transaction. With the 10.0 release of Retail, retailers can use “Retail shipping threshold discount” to define the thresholds, which once met, will qualify the customers for discounted or free shipping. For example, spend $50 or more to get free ‘Overnight shipping’ or sign up for the loyalty program and get free ‘Two-day shipping’.

This feature leverages the advanced auto charges capability that was available in the call center and e-Commerce modules but has now been made available in POS.

Unlike product discounts, the shipping discount does not create discount lines. Instead, the shipping discount edits the shipping charge directly and appends the name of the discount to the charge description.

Configure discount concurrency rules

When you have multiple discounts, pricing algorithm loops through the discounts across various priorities. The discount concurrency control model setting affects how all discounts compete and compound together.

On a discount you will find the discount concurrency mode.

When the value is Exclusive or Best price, only one discount can be applied to a transaction line. The only difference between Exclusive and Best price is the order that the discounts are considered and applied in. Exclusive discounts are always evaluated and applied before Best price and Compound discounts, if all other settings are the same. Therefore, Exclusive and Best price discount never compete for the best price. Two or more Exclusive discounts will compete for the best price, as will two or more Best price discounts.

When the value is Compound, the discount can be compounded with any other discount that is also set to Compound. Therefore, two or more Compound discounts will all be applied to a transaction line. When multiple Compound discounts are applied to a transaction line, they are applied in the following order:

  • Discount price discounts
  • Amount-off discounts
  • Percentage-off discounts

Compound discounts compete with Best price discounts when both types apply to a transaction line. Therefore, the Compound setting is used to determine which discounts are combined. Depending on the discount concurrency control mode used, two or more Compound discounts can be combined and compete with the Best price discounts that apply to the same products. The discount or discounts that have the largest total discount amount are applied.

Manage coupons

Coupons are codes and bar codes that are used to add discounts to transactions. Each coupon can have multiple codes, and each code can have its own effective dates. Each coupon is related to one discount. The price groups that are associated with the discount define the customers that can use a coupon or the channels where a coupon is valid.

In the following example I have a coupon number, that give 20% discount.  Each coupon may have multiple coupon code id’s to ensure that they are only used once.  I have also created a code-39 barcode that will trigger the coupon in the POS, and I may distribute coupon code to customers as a QR-code if needed.

Manage customers, loyalty, and affiliations

The documentation in the link above is quite updated and to the point, and covers how customers are handled from a commerce perspective.  Customers can be created in D365 HQ, POS and in the eCommerce solution.   What is important to also consider is that customers are one of the area where there are a good Dynamics 365 sales synchronization though the DataVerse, enabling a very good understanding of customers through Dynamics 365 Customer insights.

Configure client books

Building a long-term relationship with your customers can ensure long-lasting loyalty. If you know what the customers preferences, purchase history and other relevant information it is easier to target activities and promotions towards the right buying customers.  Client books is a customer card that where the preferences and activity log of the customer is shown.   Through the client book, each sales associate can have a list of “their” customers that they follow up.  This is most relevant for scenario’s where you have specialty retailing and close customer relationship. 

Clicking on the client card, opens the customer card, where timeline, recent purchases etc are available.

Configure customer attributes

The client book includes customer cards that show contact information for each customer, together with three more properties that are defined by the retailer and configured in Headquarters.

Configure customer affiliations

Customer affiliation have been discussed earlier in this document.  See Configure affiliation pricing.

Configure loyalty programs, loyalty schemes, and reward points

The documentation on this is quite detailed, but the main process of setting up loyalty can be presented like this flow. What is very nice, is that the loyalty features are a true omni-channel and is working on all channels. One aspect is that loyalty card, levels and points can be integrated with D365 Customer Service.

Manage loyalty tier calculations and processing

The calculation of loyalty tier can be processed in a set of batch-jobs.

Manage Point of Sale (POS) in Dynamics 365 Commerce (15-20%)

Configure retail stores

Create a retail store

A retail store requires a one-to-one (1:1) relationship with a warehouse and operating unit. The warehouse must be configured before the store is created. The operating unit is created automatically when the store record is created. If you have specific requirement on what the retail channel ID and operating unit number should be, then you have the option to set the number sequences to manual, and then manually create them.

Each store has some important store configurations to consider:

  • Legal entity – The legal entity where the store’s transactions will post.
  • Time zone – The time zone in which the store operates.
  • Language – The language that is used for the store data.
  • Currency – The default currency for the store.
  • Warehouse – The warehouse that is used for the store inventory. The POS can only sell out of a single warehouse location.
  • Functionality profile – Contains configurations for how the registers should operate.
  • Profile configurations – Configurations that are used to define technical architecture details, such as retail server and Cloud POS URLs, offline database schema, and more.
  • Sales tax configurations – A grouping of configurations that is used to determine sales tax configurations, such as the store’s tax group, and whether the store should use destination or customer-based taxes.
  • Default customer ID – Assigned for transactions where no customers are specified. All transactions will be aggregated in a sales order by using this default customer ID.
  • Screen layout ID – The default screen layout ID that is used for all registers and users, unless it is overridden.
  • Post as business day – Offsets the end-of-day time. For example, a store might close after midnight and wants transactions that happen until 2:00 AM to be posted as the previous day’s sales.

Configure POS registers and devices

Commerce supports two types of POS deployments:

  • Modern POS (MPOS) – Locally installed deployment on a Windows OS, iOS, or Android device and supports offline mode.
  • Cloud POS (CPOS) – A web application with nothing installed locally.

Microsoft is now also working on a third option called Store commerce that provides the benefits of both Modern Point of Sale (MPOS) and Cloud Point of Sale (CPOS).  Benefits of Store Commerce

  • Simplified Application lifecycle management (ALM) using Microsoft Store.
  • Extension or ISV code developed for MPOS or CPOS can be reused in Store Commerce.
  • Store Commerce provides the benefits of both MPOS and CPOS.
  • Better performance with the use of  Microsoft Edge WebView2
  • Easier POS and extension upgrades.
  • Support for dedicated hardware station (HWS).
  • Support for offline, in the future.

Registers contains the information of profiles etc.

The device contains information on the activation.

Configure retail profiles

Functionality profile differs from register and device configurations in that it specifies functionalities that aren’t tied to hardware or devices. In most cases, both devices can and should operate in the same way for a consistent experience for customers and employees across the entire store. The functionality profiles are defined at the store level, and you assign the profile to the store.

A visual profile will define the overall branding and theme for a register. For example, the sign-in background for a large monitor would require a different sign-in or lock screen than a phone or tablet would require. The theme might also be important. If it’s a customer-facing monitor, it might require more branding than one that is employee-facing only. The visual profile can help account for these requirements.

A receipt profile is a group of form layouts that can be assigned to point of sale (POS) printers via a hardware profile. A receipt profile provides a set of receipt templates for the printers at your registers. After you set up the receipt profiles, you must assign them to the hardware profile, so that the POS register can print the receipts.

The hardware profile is where you define the peripherals as printers, scanners etc.

Screen layout define different setup on how the POS screen should look like with buttons and different layouts based on screen sizes.  In the following example I have 2 layouts;  One for using POS as a mobile device, and one with larger screen.

Configure sales tax overrides

Sales tax groups can be used to override taxes for specific items that belong to the group. For example, food items are typically taxed differently from hard goods, and would likely have their own sales tax group. Sales tax groups are groups of taxes that are applicable to a particular channel. For example, if a channel sells both retail and business-to-business, different items sales tax groups may be used. All the applicable taxes would be mapped to the sales tax group.

Tax overrides will can be seen in POS as override buttons, and in this example I’m choosing if there is a high or medium tax on the line.

For tax in general related to D365 commerce, I recommend the following documentation.

Configure Task Management lists and parameters

In a retail environment, it’s always difficult to make sure that tasks are performed by the right person at the right time. Retailers must be able to notify workers about upcoming tasks and provide related business context, so that the tasks can be completed correctly and on time.

Task management is a productivity feature in Dynamics 365 Commerce that lets managers and workers create task lists, manage assignment criteria, track task status, and integrate these operations between Commerce back office and point of sale (POS) applications.

In D365 you will find the following menues:

The task management process allows you to see all active tasks, in this case a holiday season preparation wanted to be done in all stores.

And you can define additional tasks in the administration:

In the POS, the tasks will appear like this.

Define cash management processes

Cash management from a physical store perspective covers complete traceability and accountability of cash and its movement across the different registers and cashiers in a store. They must be able to reconcile any differences and determine accountability.  On the functionality profile you will find 2 settings that is managing this:

By enabling cash traceability, introduces the Safe entity and you will have safe transactions where you can reconcile and approve cash management transactions.  If there are exceptions you can tag the transaction with a reason code.

Cash reconciliation is always for a ‘Shift’. It is not for a Terminal / Register / Safe. With ‘shared shift’, a shift can be across multiple Registers. The Safe entity can be managed with a regular register or it can also be managed with a dedicated register.

‘Cash traceability’ feature by itself has not introduced any new GL postings and as such – like all safe transactions to post to the general ledger when money moves in or out of the safe – are not supported. Please do keep in mind that this parameter only supports GL postings for Safe drop transaction. Statement posting is the only way to get financial transactions for retail transactions created/posted in the store

The flow of cash can happen between the Safe  to Register and then back from Register to the Safe  With that:

1. At the end of any given day or shift, with Tender declaration we are closing the Register and before that the cashier performs the Safe drop operation which takes the cash from the Register and moves it to the Safe .This transaction does create a GL entry which increases the balance in the GL account linked to the Safe drop transaction. It may be common to have some money in Safe which they use every day to move to Register – e.g. from Safe to Register operation is happening every morning and not move money from Safe to Bank every day. This is like money circulating inside the store. And this move is not posted to GL. Posting entries to GL only happen with the use of Bank drop operation.

2. When the balance in the Safe (Shift) goes above a particular limit by which it is no longer a good practice to keep that much cash in the Safe, retailers typically transfers the cash from the safe to the bank and in the system they perform a Bank drop operation for the same. This also creates a GL posting where in the balance in the GL account linked to the Safe is reduced and the balance in the GL account linked to the Bank is increased. (essentially cash is deposited in the bank account).

The following steps are an example of how this works, and by having a exclusive shift for safe management:

To reconcile the cash transactions within a shift or across shifts, select the shift to reconcile, and then select Reconcile.

The view that is opened shows the list of reconciled and unreconciled transactions on separate tabs. From this view, users can either select unreconciled transactions and reconcile them, or select previously reconciled transactions and unreconcile them.

During reconciliation, if the selected transaction doesn’t balance, the user must enter a description of the reason for the unbalanced reconciliation. Users can select a single transaction and reconcile it with the relevant reason description as they require.

Users can continue to reconcile and unreconcile transactions until the shift is closed. After a shift is closed, the transactions can’t be unreconciled.

When a user chooses to close a shift, Commerce validates that there are no unreconciled cash management transactions in the shift. Users can’t close a shift if there are unreconciled transactions.

For safes that are defined in a store, users can manage operations such as declaring the start amount, doing a float entry, doing a tender removal, and making a bank drop.

Define shifts and shift management processes

The term shift describes the collection of POS transactional data and activities between two points in time. For each shift, the amount of money that is expected is compared against the amount that was counted and declared.

Typically, shifts are opened at the start of the business day. At that point, a user declares the starting amount that the cash drawer contains. Sales transactions are then performed throughout the day. Finally, at the end of the day, the drawer is counted, and the closing amounts are declared. The shift is closed, and a Z report is generated. The Z report indicates whether there is an overage or shortage.

In the posted statements form you have the record of the statement, declarations, transactions.

You can also print out the statement and use for booking if you have a manual external financial booking system (And I hope you don’t have this!)

Configure channel return policies

The channel return policy enables retailers to set enforcements on which payment tenders can be allowed for processing a return on a point of sale (POS) device. The scope of the policy is currently limited to setting the payment tenders that can be allowed for a channel. The “allowed” list is based on the payment methods used to make the purchase. For example:

  • If a purchase was made using a gift card, the store policy is to process refunds only to a new gift card or to give store credit.
  • If a sale is made using cash, the options allowed for refund are cash, gift card, and customer account, but not credit card.

Describe offline capabilities and limitations

There is a set of data that require real-time direct access:

  • Issuing and redeeming gift cards
  • Redeeming loyalty points
  • Issuing and redeeming credit memos
  • Creating and updating customer records
  • Creating, updating, and completing sales orders
  • Receiving inventory against a purchase order or transfer order
  • Performing inventory counts
  • Retrieving sales transactions across stores and completing return transactions

To be more precise, here are the operations that is NOT available in offline scenarios:

IDOperationDescription
707Activate deviceActivate the current device by allowing an authenticated user to provide connection information and assign a device and register ID.
134Add affiliationAdd a preselected affiliation to a transaction. Select the affiliation on the Button properties page.
135Add affiliation from listAdd an affiliation to a transaction by selecting it in a list.
137Add affiliation to customerAdd an affiliation to a customer on the Customer details page.
138Remove affiliation from customerRemove an affiliation on the Customer details page.
643Add coupon codeAdd a coupon by entering its code in the POS.
141Add header chargesAdd a misc charge to the order header.
141Add line chargesAdd a misc charge to a selected sales line.
117Add loyalty cardPrompt the user to enter a loyalty card number that will be added to the current transaction.
136Add serial numberThis operation lets the user specify a serial number for the currently selected product.
1214Add shipping addressThis operation isn’t supported.
519Add to gift cardAdd money to the specified gift card.
6000Allow skip fiscal registrationThis operation isn’t supported.
1212Bank dropRecord the amount of money that is sent to the bank and other information, such as the number of the bank bag.
923Bank totals verificationThis operation isn’t supported.
915Blank operationThis operation represents a customizable button that a software developer can programmatically change for any specialized operation that the business requires.
1053Blind close shiftSet the current shift to blind closed, and sign the user out. A blind-closed shift is closed to additional transactions but is still open to drawer operations, such as tender removal and tender declaration.
310Calculate totalWhen discount calculation is delayed, this operation initiates the calculation for the current transaction.
642Carry Out All ProductsSet the mode of delivery for all lines to Carryout.
641Carry Out Selected ProductsSet the mode of delivery for the selected lines to Carryout.
647Change mode of deliveryChange mode of delivery for preconfigured shipping sales lines.
1215Change passwordThis operation lets the POS user change their password.
123Change unit of measureChange the unit of measure for the selected line item.
639Clear default sales representative on transactionRemove the commission sales group (sales rep) from the transaction.
106Clear quantityReset the quantity on the currently selected line to 1.
640Clear sales representative on lineRemove the commission sales group (sale rep) from the currently selected line.
121Clear salespersonThis operation isn’t supported.
1055Close shiftClose the current shift, print a Z report, and sign the user out of the system.
139Conclude transactionPrompts user to select payment method
620Create customer orderConvert the POS transaction to a customer order.
925Copy the bank checkThis operation isn’t supported.
620Create customer orderConvert the POS transaction to a customer order.
621Create quotationConvert the POS transaction to a sales quotation.
636Create retail transactionThis operation lets the user create a standard sales transaction when the default POS behavior is to create customer orders.
600CustomerAdd the specified customer to the transaction.
1100Customer account depositMake a payment to a customer’s account.
612Customer addThis operation lets the user create a new customer record.
603Customer clearRemove the customer from the current transaction.
602Customer searchThis operation lets the user search for a customer record by navigating to the customer search page in the POS.
609Customer transactionsThis operation isn’t supported.
917Database connection statusThis operation lets the user view the current connection settings, and switch between online and offline modes.
1200Declare start amountDeclare the amount that is in the cash drawer when the day or shift starts.
132Deposit overrideOverride the default deposit for customer orders.
913Design mode disableThis operation isn’t supported.
912Design mode enableThis operation isn’t supported.
1217Disassemble kitsDisassemble a kit into its component products.
624Display refund amountsThis operation isn’t supported.
513Display totalShow the balance of the transaction on the customer display.
623Edit customerEdit the current customer’s details.
614Edit customer orderRecall the selected order so that it can be modified in the POS.
615Edit quotationRecall the selected quotation so that it can be modified in the POS.
518Expense accountsRecord money that is removed from the cash drawer for occasional expenses.
919Extended log onAssign or remove permission to sign in by scanning a bar code or swiping a card.
1201Float entryThis operation lets the user add additional money to the current drawer or shift.
1218Force unlock peripheralThe system uses this operation internally to unlock POS peripherals.
520Gift card balanceShow the balance of a gift card.
708Inactivate deviceInactivate the current device, so that it can’t be used as a POS register.
804Inbound operationAccess the features of inbound store inventory management.
517Income accountsRecord money that is put into the cash drawer for a reason other than a sale.
801Inventory lookupLook up available, on order, and available-to-promise (ATP) quantities for the current store and other available locations.
122Invoice commentThis operation lets the user enter a comment about the current transaction.
511Issue credit memoIssue a credit memo to provide a voucher instead of a refund.
512Issue gift cardIssue a new gift card for the specified amount.
625Issue loyalty cardIssue a loyalty card to a customer, so that the customer can participate in the store’s loyalty program.
300Line discount amountEnter a discount amount for a line item in the transaction. This operation is used only for discountable items and only within specified discount limits.
301Line discount percentEnter a discount percentage for a line item in the transaction. This operation is used only for discountable items and only within specified discount limits.
703Lock registerLock the current register, so that it can’t be used, but don’t sign the current user out.
701Log offSign the current user out of the register.
521Loyalty card points balanceShow the balance of points for the specified loyalty card.
142Manage chargesView and manage misc charges applied to transaction.
918Manage shiftsShow a list of active, suspended, and blind closed shifts.
914Minimize POS windowThis operation isn’t supported.
1000Open drawerPerform a “no sale” operation, and open the currently selected cash drawer.
928Order fulfillmentThis operation allows users to pick, pack, ship, or recall orders for store picked up.
805Outbound operationAccess features for managing shipments of outbound transfer orders.
129Override line product taxOverride the tax on the selected line item, and use a different specified tax.
130Override line product tax from listOverride the tax on the selected line item, and use the tax that the user selects in a list.
127Override transaction taxOverride the tax on the transaction, and use a different specified tax.
128Override transaction tax from listOverride the tax on the transaction, and use the tax that the user selects in a list.
131Packing slipCreate a packing slip for the selected order.
710Pair hardware stationThis operation isn’t supported.
201Pay cardAccept a card such as a credit card or a debit card as payment.
200Pay cashAccept cash as payment.
206Pay cash quickComplete the transaction in one touch, and accept the amount that is due in cash (exact change).
204Pay checkAccept a check as payment.
213Pay credit memoAccept a credit memo (voucher) that the store issued.
203Pay currencyAccept payment in various currencies.
202Pay customer accountCharge the transaction to the customer’s account. This payment method isn’t valid for customer order deposits.
214Pay gift cardAccept a gift card that the store issued.
207Pay loyaltyAccept a loyalty card for payment, and redeem points toward qualified products.
634Payments historyShow the customer’s payment history for the current customer order.
803Picking and receivingOpen the Picking and receiving page, where you can select orders to pick or receive in the store.
632Pickup all productsSet the fulfillment method to Store pickup for all lines.
631Pickup selected productsSet the fulfillment method to Store pickup for selected lines.
400Popup menuThis operation isn’t supported.
101Price checkThis operation lets the user look up the price for a specified product.
104Price overrideOverride the price of a product, if the product has been set up to allow for price overrides.
1058Print fiscal XThis operation isn’t supported.
1059Print fiscal ZThis operation isn’t supported.
927Print item labelThis operation isn’t supported.
926Print shelf labelThis operation isn’t supported.
1056Print XPrint and X report for the current shift.
103Product commentAdd a comment to the selected line item in the transaction.
100Product saleAdd a specified product to the transaction.
108Product searchThis operation lets the user search for a product by navigating to the product search page in the POS.
633Quote expiration dateThis operation lets the user view or modify the expiration date on a sales quotation.
627RecalculateRecalculate all customer order lines and taxes, based on the current configuration.
143Recalculate chargesRecalculate the auto-charges applied to the order.
515Recall orderThis operation lets the user search for and recall customer orders and sales quotations.
504Recall transactionThis operation lets the user recall a previously suspended transaction from the current store.
305Redeem loyalty pointsThis operation isn’t supported.
635Refund shipping chargesThis operation lets the user refund shipping charges on a canceled order.
644Remove coupon codePrompt the user to remove coupons by selecting them in a list of coupons that are currently associated with the transaction.
1057Reprint ZReprint the Z report for the previous shift or a selected shift.
1216Reset passwordThis operation lets a user who has the password-reset permission reset another employee’s password by using a temporary password.
1219Open URL in POSThis operation lets a user to open an admin configured URL in POS.
109Return productPerform a return of individual products. The next scanned product is shown as a returned product that has a negative quantity and price.
114Return transactionRecall a previous transaction by its receipt number to return some or all of the products.
1211Safe dropPerform a safe drop to move money from the register to a safe.
516Sales invoiceThis operation lets the customer make payments toward the selected sales invoice.
502SalespersonThis operation lets the user set the Sales taker value on a sales order for customer orders in the POS.
2000Schedule managementThis operation is not yet supported.
2001Schedule requestsThis operation is not yet supported.
622SearchThis operation lets users preconfigure POS buttons to perform searches by item, customer, or category.
1213Search shipping addressThis operation isn’t supported.
709Select hardware stationThis operation lets the user select a hardware station in a list of available hardware stations.
637Set default sales representative on transactionThis operation lets the user select one of the eligible commission sales groups (sale reps) as the default sales rep for lines that are added later.
105Set quantityChange the quantity of a line item in the transaction.
638Set sales representative on lineThis operation lets the user select one of the eligible commission sales groups (sale reps) for the currently selected line.
630Ship all productsSet the fulfillment mode to Shipping for all line items.
629Ship selected productsSet the fulfillment mode to Shipping for the selected lines.
115Show journalShow the store’s journal. You can view transactions, reprint receipts and gift receipts, and recall for return.
802Stock countThis operation lets the user create or modify stock counting journals for physical inventory or cycle counts.
401Sub menuThis operation takes the user to another linked button grid.
1054Suspend shiftSuspend the current shift, so that a new or different shift can be activated on the current register.
503Suspend transactionSuspend the current sales transaction, so that it can be recalled later in the store.
1004Task recorderOpen Task recorder to record procedural steps in the POS.
1052Tender declarationThis operation lets the user specify the amount of money in the drawer for each counted payment method.
1210Tender removalThis operation lets the user remove money from the current drawer or shift.
920Time clockThis operation lets users punch in and punch out of work shifts and breaks.
302Total discount amountEnter a discount amount for the transaction. This operation applies only to discountable items and only within specified discount limits.
303Total discount percentEnter a discount percentage for the transaction. This operation applies only to discountable items and only within specified discount limits.
501Transaction commentAdd a comment to the current transaction.
922View product detailsOpen the product details page for the currently selected line item.
1003View reportsShow the reports that have been configured for the current user.
921View time clock entriesShow the time clock entries for all workers at the store.
211Void paymentVoid the currently selected payment line from the transaction.
102Void productVoid the currently selected line item from the transaction.
500Void transactionVoid the current transaction.
916Windows workflow foundationThis operation isn’t supported.
924X report for bank cardsThis operation isn’t supported.
311Remove system discounts from transactionsRemove all the system applied discounts, including coupon based discounts, from the transaction. This does not remove manual discounts.
312Reapply system discountsReapply system discounts on the transaction if they were removed using the Remove system discounts from transaction operation.

Manage store inventory

The POS provides functionality to manage store inventory, including store inventory replenishment capabilities, inbound and outbound store inventory operations, store stock counts, and store inventory lookup capabilities. The following Microsoft learn course gives a good overview, and touches on cross docking, buyer’s purch, Receive store inventory from POS and other inbound operations.

I really like the simplicity process of requesting goods from central warehouse or from other store.  It’s fast and easy to use.  The following screen shows how it looks when requesting goods from another store.  Scan barcode and specify quantity.

Configure availability calculations for products

It is important to understand that in a commerce architecture you have both the HQ database and the channel database.  This is done for performance and latency reasons, and data is often synchronized back and forth in an asynchrony way.  This can affect how the on-hand and availability calculations are being handled. Channel-side inventory calculation is a mechanism that takes the last-known channel inventory data in Commerce headquarters as a baseline, and then factors in additional inventory changes that occurred on the channel side that aren’t included in that baseline to calculate a near-real-time estimated on-hand inventory. The following post is important to understand and how to use the presented on-hand calculations.  If you are using product variations, like color and size , the onhand can be presented as a grid in POS.

When clicking on a variant or For pure SKU based products without variants,  you will see the inventory on other sites in the fulfillment group, and also on the central warehouse.

Manage inbound and outbound inventory operations

Store employees might want to transfer some of their store inventory out of their store and then send it to another warehouse (either a distribution center or another store). This transfer might be necessary in scenarios where the store contains overstock that another location can use. Store employees can initiate this process by first creating the transfer order through the Outbound inventory operation in POS.

Process customer pick-up and shipment orders

Customer orders can be used to capture sales where shoppers want to pick up products on a later date, pick up products from a different location, or have items shipped to them.  I recommend to read the following docs.  An important element if you want to demonstrate the process of a customer going into the store, buying some products(with cash) and then want them sent home is to follow the following process.  Pay especially attention to the red line, as this is the process when you want to demo with the order capture and the fulfillment/shipment of the order from the same POS.

  1. On the POS transaction screen, add a customer to the transaction.
  2. Add products to the cart.
  3. Select Ship selected or Ship all to ship the products to an address on the customer account.
  4. Select the option to create a customer order.
  5. Confirm or change the “ship from” location, confirm or change the shipping address, and select a shipping method.
  6. Enter the customer’s desired order shipment date.
  7. Use the payment functions to pay for any calculated amounts that are due, or use the Deposit override operation to change the amounts that are due, and then apply payment.
  8. If the full order total wasn’t paid, enter a credit card that will be captured for the balance that is due on the order when it’s invoiced.

This allows you to get through the process of picking, packing and shipping directly from the POS.

What I can think of here, is that it would be great to have extensions for printing delivery labels and even ensure that ASN is being sent to the freight forwarder.  Let’s hope some ISV picks this up.

Manage inventory processes including stock counts

Count journals are used to update and adjust physical inventory counts for a specific item within a specific warehouse. While the Commerce inventory logic is constantly tracking inventory that comes into and out of the warehouse, situations will occur where the physical inventory count that is being tracked by the application no longer matches the physical count of inventory on the shelf. This scenario can occur for a variety of situations, such as receipt of inventory was accidentally not processed, theft or breakage or other loss was not previously adjusted, and so on.

One quite new feature is the ability to perform stock adjustments, as this allows for adjusting up/down an exact quantity.  Let’s say when something was hungry and had to eat 😊.  I can then adjust out one tyrkisk peber.

Then this becomes available as an inventory adjustment journal.

Even the notes becomes available as notes to the transaction.

Look up product inventory

I think this have been covered earlier in this blogpost.

Process serialized items

Many retailers sell products that need to be serialized. These products are called serialized items. For inventory tracking purposes, some retailers may want to keep serial numbers in store or warehouse inventory. For service and warranty purposes, other retailers may want to capture serial numbers during the sales process.

Perform POS operations

Perform sales and order processes

Cash and carry transactions are the most common POS transactions where items are scanned. A customer might, or might not, be identified on the order, and all products are paid in full. When tendering out of the transaction, a customer leaves with the products. There are also more advanced processes of creating orders from POS, and then pick it up or ship the products to the customer. The order is then created and sent to Commerce Headquarters (HQ) for processing. The creation of the customer order to HQ typically occurs through an async process between the Commerce engine and HQ. You can also configure it to be created in real time, if preferred.

Perform end of day processes

Much of the end-of-day processes are related to closing the shift (If you are using shifts).  The process often starts with performing safe and bank drops of cash.  Then you would perform a tender declaration to specify the total amount of money that is currently in the cash drawer. Users most often perform this operation before they close a shift. The specified amount is compared against the expected shift amount to calculate the overage/shortage amount.  The last ting is to close the shift. This operation calculates shift totals and overage/shortage amounts, and then finalizes an active or blind-closed shift. Depending on the user’s permissions, a Z report is also printed for the shift. Closed shifts can’t be resumed or modified.

Blind-close can be used to free up a register for a new user or shift without first having to fully count, reconcile, and close the shift, and then later reopen the shift to perform closure. 

The way that shifts and cash drawer reconciliation are used in the POS differs from the way that transaction data is summarized during statement calculation. It’s important to understand this difference. Depending on your configuration and your business processes, the shift data in the POS (the Z report) and a calculated statement in the back office can give you different results. This difference doesn’t necessarily mean that either the shift data or the calculated statement is incorrect, or that there is a problem with the data. It just means that the parameters that are provided might be including additional transaction or fewer transactions, or that the transactions have been summarized differently.

Although every retailer has different business requirements, it is recommend that you set up your system in the following way to avoid situations where differences of this type occur.  The best way to have your statements is by shifts.  Period! This setup helps guarantee that back-office statements include the same transactions as shifts in the POS, and that the data is summarized by that shift.

Reconcile store cash

This have been covered earlier

Monitor store productivity by using task management and reporting features

Task management have been discussed before in this blog, but related to the reporting capabilities in POS there are some standard reporting ask shown here:

But my general recommendation is to invest in a power bi solution.  Combined with the P-job and recurring tickle-feed feature channel transactions are being imported quite frequently.  Then use the Azure data Lake integration to feed you power BI report with updated and refreshed data. Take a small look at the following presentation I did in 2018 about how to manually structure a cube for power BI based on existing data entities.

Configure and Manage Dynamics 365 Commerce call centers (10-15%)

The first time I took the exam, I felt that the call center functionality was over represented in the questions.  SO I guess to this exam, it requires that we need to take this topic more to the depth.  Orders that are created in a call center channel can take advantage of specific Commerce capabilities such as payment processing and retail pricing and promotions. Defining a call center channel also allows the organization to define specific order processing settings and data defaults to the sales orders that were created by call center users.  Som of the features include.

  • Full payment processing capabilities (Also with credit cards)
  • Use of catalog source code IDs to track marketing efforts
  • Ability for upsell/cross-sell prompts as sales lines are created
  • Ability to create and manage subscription orders by using continuity program features
  • Use of Commerce pricing and promotion configurations

A user can be linked to only one call center channel at a time and if you don’t associate the user to a call center, it will not trigger the Commerce-related features.

Sales orders that are created in the call center are also part of all Commerce omnichannel capabilities and can be used by the point of sale (POS) application to support cross-channel order fulfillment scenarios. This feature allows a call center user to create an order that can be picked up by the customer at a store location. Additionally, a customer order that is created in the POS or e-Commerce application can be further reviewed, edited, or managed by a call center user in Commerce HQ.

Configure call centers

During the configuration of a call center, three processing options have a great impact on the features that are available for call center orders based on whether these processing options are enabled on the call center channel or not:

  • Enable order completion – enforces a set of validation rules that the order must go through before it can be successfully submitted to processing.
  • Enable direct selling – upsell and cross-sell functionality
  • Enable order price control – enables call center users to change the price of an item on a sales order if that item has been configured to allow price adjustment. A specific commerce sales line workflow must also be created in Commerce Workflows to enable the price override approval process.

Create a call center

Configuration of a call center follows much of the same steps as creating a store channel.  You have to setup delivery modes, payment methods.  One thing that differs from the traditional sales orders is the introduction of order completion that can be enabled. When the Enable order completion setting is turned on for the call center channel, if line items are entered on a sales order and the channel user tries to close or navigate away from the sales order form without first selecting Complete, the system enforces the order completion process by opening the sales order recap page and requiring that the user correctly submit the order. If the order can’t be correctly submitted together with payment, the user can use the order holds functionality to put the order on hold. If the user is trying to cancel the order, he or she must correctly cancel it by using either the Cancel function or the Delete function, depending on the function that the user’s security allows. After a call center channel has been created, users must be linked to that call center to take advantage of additional order processing features that are exclusively available for call center order processing. Here is a screenshot of the “complete” feature mixed with a script asking if the customer did now there where a discount on teddy bears now 😊

Another important aspect is the customer service form where the call center sales process often starts.  Here it is easy to have a quick overview off all customers and orders.

Configure and publish product catalogs

Product catalog have been discussed earlier in the blog post.  Personally I think that catalogs are out, and there are very few that actually still use this.  It all has changed towards online.

Create product catalog scripts

Not much to say, rather than you can assign script towards the catalog or towards the products are in the catalog.

Configure fraud conditions, rules, and variables to trigger order holds

To use the call center order hold features, you must first define hold codes. To create a set of user-defined hold codes, based on your business requirements, go to Sales and marketing > Setup > Sales orders > Order hold codes

This hold codes can then be assigned to the order.

There are settings and rules that allow for validating and checking.  Here I have created a condition to put the order on-hold, if the quantity on the sales line is above 10.

I can then add the condition to a rule:

In the call center parameters page I can then setup the score of when the order should be flagged as fraud.

When the rules starts to kick in I get the “Order is on hold” message:

I can also see all order holds and them check out if it turns out that everything is OK:

In the sales order overview I also get some visual indicators/color coding of the salesorders that is marked as suspicious or fraud:

The last thing here, is that you can also build up a static fraud data containing variables that is known to be used in call-center fraud.

Configure fraud alerts

I covered this in the previous chapter

Configure continuity orders and installment billing

In a continuity program, also known as a recurring order program, customers receive regular product shipments according to a predefined schedule. Continuity programs provide the ability to create continuity schedules that will have a scheduled shipment and payment.

Set up continuity programs and parameters

To create a continuity program you specify details such as the payment schedule, the timing of the shipments, and whether billing is up front. You must also add a list of products that are included in the continuity program. Each product receives an event ID number that is assigned sequentially, beginning with 1. The event IDs determine the order that products are sent in. If customers receive a different product in each shipment, the products are sent in sequential order, based on their event IDs and beginning with the current event. If customers receive the same product in each shipment, the list contains only one product that has one event ID. The same event occurs repeatedly. You can specify how many times each event is repeated. Create a parent product that represents the continuity program that you created. If you add this product to a sales order, the Continuity page opens. You can then use that page to create the actual continuity order. The parent product doesn’t specify the individual products that the customer receives in each shipment.

Here I have a continuity order containing two lines.

On the release product you specify the Continuity schedule ID:

When creating the sales order, the continuity form pops up, where I can make adjustments to quantity, price, dates etc

Configure continuity order batch jobs

After setting up a continuity program as described above, you can create a continuity order for a customer. You might also have to perform the following additional maintenance tasks.

  • Update the current continuity event period – Set up a batch job that tells the system what the current event period is.
  • Create continuity child orders – Create child orders from the parent continuity order.
  • Process continuity payments – Process billing and notifications for payments that are associated with continuity sales orders.
  • Extend continuity lines (if required) – Extend the number of times that a continuity event can be repeated. The repetition of shipments can then extend beyond the limit that was set in the Continuity repeat threshold field in the call center parameters.
  • Perform a continuity update (if required) – Synchronize changes between the continuity program and the continuity parent sales orders.
  • Close continuity parent lines and orders – Close continuity orders.

The end result is that child sales orders are created and will then be processed in the normal fashion.  

Manage continuity child orders

To manage continuity orders there is a form under Retail and Commerce à Inquiries and reports à Continuity orders that lists up all sales order lines that is a parent continuity line.

In the Summary tab, you will see all child continuity lines, as they are being generated.

Manage call centers

Create, modify, and process sales orders

I think this area have been covered well earlier in the blogpost.

Process call center payments

In D365 Commerce, the configuration of the call center channel includes a setting that is named Enable order completion. This setting helps guarantee that all orders that users of the channel create are released to order processing only if they have a prepaid or pre-authorized payment that is within approved tolerances. If the Enable order completion setting is turned on, call center users can enter payments against sales orders for customers by using the payment processing features of Call center. If the setting is turned off, call center users can’t use the Call center payment processing features, but they can still apply prepayments to sales orders by using standard Accounts receivable functionality.

On the call center you can specify the payment methods that can be used.  Here you can also specify that cards are allowed:

Remember also to evaluate if the electronic payment setup is to specify that expiration date and pin is required.

When I then go through the complete and payment process and add the payment method card, the following happens:

An iframe from Adyen pops up in this case(missing setup on Adyen), and you can perform a “card not present” payment flow.  Even VIPPS is available here. 

Manage order holds

During order entry, but before order submission and confirmation, call center users might want to manually put an order on hold to prevent it from being released to the warehouse for further processing. For example, the customer who is placing the order might not be ready to commit to it, or critical data that is required in order to process the order might be missing.  The older hold form and color coding have been  have discussed earlier in the post.

Create return merchandise authorizations (RMAs)

Process returns, exchanges, and replacements

When a return order is issued, the Replacement order function can be used to generate a new sales order for the customer. This approach can be used in exchange scenarios. The Replacement order function creates another sales order for the new items that must be sent, but a cross-reference link on the RMA/Return tab of the Call center parameters page links the replacement order, the RMA, and the returned sales order.

The process can be described with the following flow:

The actual return order screen looks like this.  Also check out the following docs’s page for more information:

Manage e-commerce (15-20%)

Finally we have come to the “latest and greatest” part of this very long post.  E-commerce is actually an additional SKU you have to purchase, and is not included with the traditional D365 commerce SKU.  So you have to pay extra.  There are even additional SKU that you can select, as AI/ML recommendations, Rate&Review and solutions for fraud. The following learn site also gives a good overview.  A lot of very good tech-talk video’s have been also released, and here are some links to them.  I have also made available a list of known eCommerce sites running, so you may actually try it out, and even purchase 😊

Configure an e-commerce channel

To create an online store in Commerce, you must first create an online channel. Before you create a new online channel, ensure that you have completed the Channel set up prerequisites. Apart from what already have been discussed on other channels, you need to setup the online functionality profile.

Create an online store

To configure a functioning online store, you need to set up multiple components so that transactions can be successfully processed for that online store. When you have configured the online store and its components, you can link the channel to one or multiple Commerce sites or any other solution for a storefront that is compatible with Commerce. To finalize the online channel configuration and ensure that the products are discoverable in the e-Commerce store, you should also create a channel navigation hierarchy and sync the data to the online store database. Each channel can have a unique channel hierarchy.

If you wonder where you can define the category hierarchy for stores, then here it is : Retail and Commerce –> Channel setup –> Channel categories and product attributes:

Configure an e-commerce site

Much of the configuration of the e-commerce site is performed in the site builder.  This is a tool deployed and available from LCS, if you have purchased the e-commerce SKU.

The site builder have a set of site settings:

Configure channel assignments for an e-commerce site

To establish a new site and associate an online store with it, in LCS, select the link for the site authoring environment. Then, on the page for the site authoring environment, select New site. In the New site dialog box, you must provide some basic information about your site. Here are some additional details of the information you need to fill in.

Configure ratings and reviews

Also check out the topic on Microsoft learn. The ratings and reviews solution in Dynamics 365 Commerce uses Azure Cognitive Services to offer automatic moderation of profane words in 40 languages. Because human approval isn’t required, moderation costs are reduced. The system also offers moderator tools that can be used to respond to customer concerns, feedback, and take-down requests, and to address data requests from users.  But keep in mind that rating and review is an additional SKU from Microsoft.

Here is the moderation screen where moderators can respond and take input.  There is also a export to power BI for deeper analysis.

The rating and reviews can also be synced into the HQ and to the POS.  See the following article.

Manage e-commerce content

Building and maintaining content will be an ongoing process.  You therefore should invest in having dedicated content builders to create the best possible presentation and experience for the online users.

Configure URLs and aliases

When creating new pages, you won’t be required to specify a page URL. If you leave the URL field blank, the page is created in an unlinked state. In this case, customers won’t be able to access the page, even if it’s published. To make the page accessible, you must manually create the URL and link it to the page.

Configure product detail pages and category pages

The product details if a very central page, and can be customized for specific products.

The category page is the page that most often is used for browsing through the products.

Manage site themes, page fragments, templates, layouts, and pages

There is a lot of setup required when setting up the content.  We are using a DevOps template where we have all the elements defined and in place, and here is a view of some elements of setting this up.

And each of the setup of each element is documented in devops

Upload and manage digital assets including videos and images

The media library is where you store your pictures and video’s. The naming convention of your files  is very important to make sure you are linking the pictures with the right products.

Set focal points and attribute values for media assets

When an image is uploaded to the Commerce site builder Media Library, the system attempts to determine the focal point of the image. For example, if the image has a person on it, the system will set the focal point to the face of the person by default. In most cases the automatically set focal point works well for all viewports, but sometimes you may want to adjust the focal point to ensure that a specific part of the image is always visible. In the picture below, you see that I have a focal point on the head.

I can also change the view by module to only show parts of the image in certain settings.

Configure publish groups

E-Commerce websites are constantly updated with new content throughout the year. Updates are often published in batches around busy e-Commerce events such as holidays, seasonal marketing campaigns, or promotional launches. These updates often require that groups of website content (for examples, pages, images, fragments, and templates) be staged, validated, and published concurrently in a single action.

So you can setup publishing groups that changes the ecommerce site on a specific date.

Operate an e-commerce channel

Create e-commerce orders

The Microsoft documentation here is excellent and superb. The shopping experience is fast and intuitive.  Just what is expected from an eCommerce site. 

Synchronize e-commerce orders

To view the transaction in Commerce Headquarters (HQ), run the P-0001 job and Synchronize Orders to pull in the orders from the Commerce scale units.

Moderate ratings and reviews

This is covered earlier.  But check out the following learn session.

Configure business-to-business (B2B) e-commerce

Business-to-business (B2B) e-commerce sites provide some key capabilities that optimize the workflow for a B2B user.

Describe differences between B2B and business-to-consumer (B2C) solutions

It is possible to implement both a B2C and a B2B scenario’s.  The main capabilities that is relevant for B2B scenarios is the ability to purchase on account, and that you have tools to improve B2B account relations and partner management tools.  The capabilities available for B2B scenarios are:

  • Business partner onboarding
  • Order templates
  • Quantity thresholds (minimum, maximum, multiple)
  • On account payment method
  • Salesperson for business partner
  • Handling of customer deposits
  • Account statement and invoice printing
  • Payment of sales invoice
  • Quick order entry
  • Dynamics 365 Sales integration
  • Return order and return merchandise authorization (RMA)
  • Order cancellation
  • Matrix control for order entry

Allowing B2B customers to pay on the account is crucial for the B2B e-commerce solution. D365 Commerce will enable customers to buy within their pre-set credit limits. Invoices generate after the order is placed, and the customer can pay those directly from the eCommerce site with a credit card. Order templates allow users who may buy many of the same items during each order to have preconfigured lists of items they want to add to their cart. They can also access a quick order entry screen to make adjustments to quantities and SKUs they’re purchasing.

Describe use cases for organizational modeling hierarchies

Two new customer records are created in the system: a Type Organization customer record for the business partner organization and a Type Person customer record for the requestor (that is, the business partner user who submitted the request).

Manage business partners and business partner users

B2B e-commerce websites require that organizations register to become business partners. After an organization submits registration details to a B2B e-commerce website, it goes through a qualification process. If the organization is successfully qualified, it’s onboarded as a business partner.  New business partners signing up will show up as prospects.  On the next two screen, you see the signup form in ecommerce, and a screen of the all prospects where they end up:

Configure product quantity limits

Most products have a unit of measure that defines their grouping. The grouping affects how the products can be sold. Some products might have an additional grouping for quantities. This grouping determines whether the products can be sold as individual units or multiples, and whether there is a minimum or maximum order quantity limit that must be followed.

The quantity limiting feature ensures that the minimum, maximum, multiple, and standard quantities that are configured in Microsoft Dynamics 365 Commerce (in the default order settings or the Commerce site builder site settings) are applied to customer orders that are placed on an e-commerce site. Product quantity limits aren’t currently supported for the point of sale (POS) and call centers. On each product you may specify

  • Multiple – The quantity that the product can be bought in multiples of.
  • Minimum Order Quantity – The minimum number of products that must be purchased.
  • Maximum Order Quantity – The maximum number of products that can be purchased.
  • Standard Order Quantity – The default quantity that is automatically entered when the product is selected.

In the site builder à extensions, you can define for which type of customers this setting should affect.

Buy Commerce Scale Unit’s, and get Device licenses included

There is a small, but interesting element that retailers should be aware of. If you buy Dynamics 365 Commerce Scale Unit’s you get device licenses included.

It is available in the licensing guide.

What does this mean? As you scale up your installation, and deploy to multiple azure geo zone to achieve the best possible latency, then remember to reduce your number of device licenses according to the number of Commerce Scale Units you deploy.

No need to buy both Commerce Scale units AND devices.

Take care

*PS! Always read the licensing guide thoroughly, as there are conditions that needs to be followed.

D365 eCommerce sites live and running

Through search and connections, I have compiled a list of public sites that have implemented the Dynamics 365 eCommerce parts. This is by no means a complete list, and only represents a small subset. I have not been sponsored by any, and I only want to share with the D365 community sites that are live and running. Hopefully more can see the benefits of having a truly integrated omnichannel solution, and start investing knowledge in the capabilities. I hope also this can convince more to start enabling the eCommerce capabilities in the stack that they already have.

So here is the list, without any more comments:

Gardening

https://www.dobbies.com/

Clothing and sports

https://www.mandsyourschooluniform.com/

https://www.obrien.com/ 

https://www.hosports.com/

http://arcticshieldoutdoor.com

Automobile

https://shop.aiwaysitalia.it/

https://shop.mitsubishi-motors.it/

Home and Kids

https://www.cittadesign.com/

https://www.toysrus.com.sa/

https://bookstore.sgi-usa.org/

B2B (Hardware, building materials, Pharma)

https://www.lobas.no/ (Norwegian site)

https://www.tebubio.com/ (France)

Jewelry

https://www.livadi.com/ 

Cosmetics

https://www.signaturecosmetics.co.za/

Food and Wine

https://www.servicenord.no/

https://www.hshh.no/

https://www.sjule.no/

https://www.encon.no/

https://us.venchi.com/

https://www.ste-michelle.com/

https://www.14hands.com/

https://www.colsolare.com/

https://www.columbiacrest.com/

https://www.michellesparkling.com/

https://www.drumhellerwines.com/

https://www.erath.com/

https://www.elicit.wine/eli/brands/intrinsic/5637183579.c

https://www.northstarwinery.com/

https://www.sevenfallscellars.com/

https://www.snoqualmie.com/

https://www.springvalleyvineyard.com/

https://www.conncreek.com/

https://www.patzhall.com/

https://www.stagsleapwinecellars.com/

https://www.anticanapavalley.com/

https://www.antinori.it/it/

https://www.eroicawine.com/

https://www.eskvalleywines.com/

https://haraswines.com/

https://www.mammamiawines.com/

http://world.nicolas-feuillatte.com/en

https://www.prunotto.it/en/

https://www.santacristina.wine/

https://tormaresca.it/

https://www.villamaria.co.nz/

https://www.belazu.com/

https://www.intrinsicwineco.com/

https://wholesale.peets.com/

Demo sites :

https://www.adventure-works.com/

https://cdx-contoso-coffee.commerce.dynamics.com/

Take care, and if you know of other sites, let me know, and I’ll add them

D365 – CustTable – fast – faster – fastest – WOW!

I wanted to look deeper into an area that have troubled me for some time. Why are some forms very fast in D365, and some forms do not have the expected start-up time. At the end of this article you can see my finding, and I hope this will have an positive effect on user experienced performance.

The form I wanted to take a deeper look into is the custTable form, as this is one of the most used forms at customers. Over time we have seen that this form has increased in size, by additional features and code being added. New features are great, but it comes at a cost.

I wanted a simple test, where we are looking at a warm system, and time how long time it would take to open the CustTable form. I would like to test the opening of custTable a Cloud Hosted Tier-1 (DS12 V2), Tier-2 and PROD. This is benchmarked with a top-watch, and timing is from I click on menu item, until form is drawn and responsive. I will be using google chrome with F12, and measure until all network, and the main measurement will be TTFB (Time To First byte), as seen in the picture below. The actual waiting time tend to be beyond this, but it is the most concrete KPI I have found. The timing is therefore not the actual or experienced performance, but a KPI that can be used for comparing scenario’s.

The KPI represents the time the AOS/IIS is using to render and return the form object to the browser. Each “warm test” will be conducted 3 times, and the data is an extremely small dataset (just a few customers), as the purpose of this test is NOT to test the database, indexes or queries. It is about testing how the execution of code and caching on a form is performing.

Below is a screenshot showing where to find my performance KPI in the F12 Google chrome developer menu.

Test of architecture

In this test I’m testing how fast the custTable form is opened on Tier1, Tier-2 and on a PROD environment. The PROD/Tier-2 environments are on service fabrics(self-service), and the databases seams to be elastic pool based.

As seen on the table below the fastest execution happens on Tier-1, that is a one-box SQL, and the Tier-2 and PROD

Customer form

Warm execution

Cold execution

Tier-1 (DS12 V2)

1.50, 1.49, 1.49

22.99

Tier-2

2.20, 2.32, 2.20

16.96

Prod (6 AOS’s)

3.22, 3.25, 3.10 (20:00 CET)

2.37, 2.46, 2.40 (22:00 CET)

Not measured

What we here see is that a cold execution of the CustTable form is extreme, with a dramatic increase execution time. What we also see is that PROD differs on execution time. This can be because of different connection to another AOS, or affection of “noisy neighbor” caused by switch to Azure SQL elastic pool architecture.

On a simpler form like the “customer reason code” form, without much code, we see a very nice execution time on all tier-levels, and even cold executions are within acceptable range.

Customer reason code form

Warm execution

Cold execution

Tier-1 (DS12 V2)

0.11, 0.11, 0.12

1.01

Tier-2

0.26, 0.27, 0.26

0.98

Prod (6 AOS’s)

0.27, 0.28, 0.23

Not measured

The conclusion seams that complex forms, as the custTable are much more affected when opening a form in a cold state.

The complexity of the CustTable

As seen below, the CustTable contains 12 datasources, and quite many of them are joins. There are also 4 extension to the form.

We also see in the code in the CustTable is heavily regulated by code that controls features, country specific/regulatory elements, and display items. If we open the Customer form on a Tier-2 environment with 5 customers takes between 2-3s. In total there are 16.413 method calls, and of them 1.330 are unique method calls.

I did not get any meaningful information out of the recorded summarized tracefile analysis, so I must continue to more manually look into the actual execution of code.

Test of effect when reducing complexity CustTable

My next step in the analysis is to see what is affecting the execution time. In the following section I’m testing in a Tier-1 D12V2 environment. I have made 5 copies of the CustTable form, in each form, I’m removing more and more code and data sources. I name them:

  1. Standard, but no calls to feature enablement
  2. Fast : All code and data datasources removed, except custTable and DirParty
  3. Faster : All code and data datasources removed, except custTable. Display method on customer name
  4. Fastest; All code is removed except CustTable data source

To simulate a “cold execution” we can flush the cache by adding the following to the URL: &mi=ACTION%3ASysFlushAOD

CustTable form type

Warm execution (s)

Cold execution (s)

Standard 10.0.18

1.50, 1.49, 1.49

22.99

1.Standard, but no calls to feature enablement code

1.34, 1.43, 1,39

17.94

2.Fast : All code and data datasources removed, except custTable and DirParty

0.72, 0.72, 0.73

1.22

3.Faster : All code and data datasources removed, except custTable. Display method on customer name

0.56, 0.62, 0.57

0.96

4.Fastest; All is removed except CustTable data source

0.34, 0.34, 0.38

0.49

5.Customer reasoncode form

0.11, 0.11, 0.12

0.32

What we see in the table above, is that the main thing that is taking time, is the execution of code. The datasources do not affect the user experienced performance in this scenario. The results show that simpler forms with less code have a huge effect of the execution and the cold-start scenario.

WOW! – Other findings.

I have found one area that is affecting heavily the cold startup of forms. That is the office button, that is typically initiated when the form is loading. I tried disabling the office button code, a cold startup of CustTable went from 23s to 5s. And this button is used everywhere.

This “fix” does not seam to have a large effect on warmed up system. But keep in mind that with the one-version strategy and adding extensions we are clearing any cache quite often, that the end-users needs to rebuild on each AOS. As there are thousands of forms, you can multiply the warmup with the number of AOS’s, and you realize why manual warmup take days.

I have informed Microsoft, and hope for a positive response. Let’s continue to dig for code changes that can make the best ERP system even better, and share what you find.

I realized, that when debugging line-by-line, a small gray text pop’s up showing the actual elapsed execution time per statement. This allowed me to find the lines that actually are using a lot of time, by jumping from line to line. The timing here, is from when I did a debug of a cold system. On a warm system it will not show, as then it all is cached.

I’m really proud of finding this, as it have been on my bucket list to find some real good improvements. For more details on the chase for more performance, take a look at the Microsoft Yammer group (If you have access?) https://www.yammer.com/dynamicsaxfeedbackprograms/threads/1105410564505600

D365 B2B eCommerce, Things have changed (again)

Me and my colleagues have had the privilege the last few weeks to go really deep into the D365 offering, in terms of capabilities, pricing and roadmap. A few weeks ago, I wrote about the pricing of eCommerce. As this have changed per 1. April, I have removed this post. I recommend that partners find the session that Microsoft had last night, called “Dynamics 365 Commerce e-Commerce Licensing Changes (DYN963PAL)“. It gives some new insight where Microsoft brings a better pricing differentiation, and the pricing can better meet price points in the low-end pricing marked.

But the key headlines are that Microsoft are now capable of offering license cost per sales in the range of 0,36$-0,85$ for the low-end market (sales order value <50$). And that is a significant price reduction! I suggest you check out the pricing when it becomes available on 1. April. (Without any jokes )

In some meetings I attended I also learned that a significant number of B2B customers are in implementation already(including us). I do believe that the D365 eCommerce B2B brings some very nice offerings, and it is in this domain that I think we will see a lot of customer onboarding to D365 eCommerce.

Take care my friends, and I’ll keep you posted on more to learn.

D365 Commerce – tech-talk videos on YouTube

Do you have YouTube available on your TV, and have finished all series on Netflix and HBO? If you want to fill up with additional knowledge and still enjoy your cozy favorite couch, then know that many of the Dynamics 365 Tech-Talks are available on YouTube. You can also find them available here: https://community.dynamics.com/365/b/techtalks?c=Commerce

Here is a compiled list of D365 commerce video’s I recommend if you want to learn more of the eCommerce domain. All of them originates from the following YouTube channel: https://www.youtube.com/channel/UCBoCtfQN1aRB31xnEexj5yQ

Enjoy your couch

Title

Video

Dynamics 365 Commerce Overview Tech Talk

https://www.youtube.com/watch?v=2E71HjrnwhE

Dynamics 365 Commerce Architecture Overview Tech Talk

https://www.youtube.com/watch?v=waqux_MKj_M

Unlock the Power of Dynamics 365 Commerce: B2B e-commerce

https://www.youtube.com/watch?v=YZ3JUznsPF0

Unlock the Power of Dynamics 365 Commerce: Omni-Channel Order Management Flows

https://www.youtube.com/watch?v=7kQJIV-42Dw

Unlock the Power of Dynamics 365 Commerce: Supporting Buy Online Pickup in Store/Curbside with POS

https://www.youtube.com/watch?v=Bx0ZSYdYdKo

Unlock the Power of Dynamics 365 Commerce: Branding Your E-Commerce Site

https://www.youtube.com/watch?v=jExMv8M54V8

Unlock the Power of Dynamics 365 Commerce: E-Commerce Module Library Overview

https://www.youtube.com/watch?v=Sapepoi6ve8

Unlock the Power of Dynamics 365 Commerce: Support Multiple Languages & Markets on E-Commerce Site

https://www.youtube.com/watch?v=_nW1-EMbz94

Unlock the Power of Dynamics 365 Commerce: Managing Omni-Channel Ratings & Reviews

https://www.youtube.com/watch?v=y_LqJaG56DQ

Unlock the Power of Dynamics 365 Commerce: Best Practices for E-Commerce Customization Development

https://www.youtube.com/watch?v=aaGUFWZAOSc

Unlock the Power of Dynamics 365 Commerce: E-Commerce Module Library Overview

https://www.youtube.com/watch?v=Sapepoi6ve8

Unlock the Power of Dynamics 365 Commerce: Managing E-Commerce Site Settings

https://www.youtube.com/watch?v=_czlphadKWM

Unlock the Power of Dynamics 365 Commerce: Commerce Deployments, Updates and Servicing

https://www.youtube.com/watch?v=yCBZ7kastzw

Unlock the Power of Dynamics 365 Commerce: Setup a B2C Tenant for e-Commerce Site Authentication

https://www.youtube.com/watch?v=sDnQmFnICJM

Dynamics 365 Commerce E-Commerce Architecture Deep-dive Tech Talk

https://www.youtube.com/watch?v=zkBKRzXer3E

 

 

 

 

 

 

Decompiling D365 retail components

Today I got a very nice tip from a colleague on how to better understand and see the source code for the retail components.

I was experiencing that I was not able to post a CPOS sales, and in the eventlog I got the following “Cryptical” error:

Customer with RECID 5637158076 is non-chargeable account.

at Microsoft.Dynamics.Commerce.Runtime.Services.CustomerPaymentService.ValidateCustomerForOnAccountPayment(Customer customerToPayWith, RequestContext context, Boolean isPositiveAmount)

 

The thing with the retail server, is that we don’t have the source code on all the components. But luckily there are a way around it:

JetBrains dotPeek (just google it, and download)

This tool let you decompile all components, and have an advanced search capability. Just all the K:\RetailServer\WebRoot\bin\Microsoft.Dynamics * files, and then search for the term ValidateCustomerForOnAccountPayment:


 

Solution to my problem, was that the InvoiceAccount on the customer record was blank.

So now you know how to see all sourcecode in Dynamics 365 Commerce/RetailServer components

Happy!

 

 

 

 

D365 smarter search algorithm

Dear fellow community members.

First a small announcement as of first of December I am in a new job where new ideas and visions for our community will come to life. I am overexcited to share more on this later at LinkedIn, but as a true enthusiast I choose to celebrate this milestone with a fun knowledge sharing blogpost to the community. The community have always been there for me when I need knowledge and paying forward is how the community choose to reward each other.

Today I would like to show you a way to create smarter search in Dynamics 365 with some minor extensions. As you know, relevance search API is on the horizon, but I expect quite a few release iterations before this will materialize into the D365 F&S codebase.

First some context; I hope you have familiarized yourself with the fulltext search capabilities that exists under the “sales and marketing”.

This feature materializes itself on the sales order screen, where you can search for products across different and multiple fields. Some of the drawbacks of the standard solution is the Microsoft have limited the number of fields you can search on to only cover fields you have on the inventTable and a few other tables. Some requirements I often get is the ability to search for barcodes/GTIN, external item numbers, vendors, attributes, classifications etc. I also get the requirement that the user do not want to be restricted in the sequence of how the search terms are specified. They want “google search” capabilities, meaning that [A] + [B] results in the same results as [B] + [A].

With some minor adjustments we can make the search for products much more meaningful. First, I need to explain how standard is performing the item search to explain how you can adjust this. There is a table named MCRInventTableIndex, that consists of 2 fields. One as a reference to the product, and one field that is a concatenation of several fields. As shown under, the Searchtext field contains item number and item description, just concatenated together. Then there have been created a fulltext index on this field to speed up the search on this long string.

When typing in your search criteria there is added a wildcard “*Criteria*” making sure that the system can find the right criteria according to the search term. The drawback here is that the search terms must be specified in the right sequence. There is also the issue that the concatenated search team is missing lot of exiting terms to search for.

So, there are 2 problems that needs to be solved:

  1. Adding additional search terms
  2. Fixing that the search sequence is irrelevant.

Lets look into that:

Adding additional search terms

The way I choose to add additional search terms, is to create my own SearchIndex table, where I can concatenate all the search terms, and include the fields like barcodes/GTIN, external item numbers, vendors, attributes, classifications. The code here is just concatenating the SearchText into a very large string, and referencing this to the product/NOBBnr. It is also OK to add multiple barcodes or vendors.

This results in having a table that have much more information, and just visualized here to show that the string contains many kinds of information.

The next stem, is to include this string into the std D365 search algorithm, so that all my search strings are included in the search.

At this time, I can search on itembarcode vendor external item etc. just as I wanted. But our goal has not been met yet. Let us go the next challenge.

Fixing that the search sequence is irrelevant.

If I should visualize how I want the search to be conducted, let us take a concrete example. Here I am searching for a door (“dør”), that is white (“hvit”) and have the size (“10X20”). As seen below, this results in to possible results.

But what we want to achieve is that the search criteria sequence should be irrelevant. What we want is to have an inner join of the search criteria’s to only get those items relevant. We therefore have to split up the search criteria, and then perform an exists join for each search criteria based on each of the separate search elements.

To make this magic happen, I have the following code, that is an extension to the MCRInventSearch class that is building up a query for the search.

This allow me to get a much better search result:

This beneficial search algorithm also kicks into the MCRSalesQuickQuote form, and here I also also added a “iframe” directly toward an external product database NOBB, that shows all relevant data.

If you enjoyed this topic, please share it. And if you want to discuss it, please contact me

Take care and see you all in my next chapter.

D365 X++: I’m using InventABC as my template

Hi fellow developers.

Back in the early days I was at a good old Damgaard conference, and attended at a technical session. In this session one of the founding fathers of Axapta came up with the phrase “Copy with pride“. What he meant was to look at existing code and patterns in the X++ code, and to feel free to used and copy these patterns from the Microsoft code and use them in customer customizations and extensions. I have lived by this principle and “copied with pride” and encourage other to feel free to take my work and copy what they need.

One of the more common customization/extension requests is where we have a class that does some magic and have a dialog, query and can run in a recurring batch etc. I guess all developers have their own approach, and as the blog name suggest I’m using the InventABC* classes as a “copy with pride” for my code. I know this code is more than 20 years old, and I guess there are better and advanced patterns to use. I don’t say this pattern is the best, but for me it is a fast and easy way to create simple periodic recurring classes. Please any feedback is welcome, and feel free to share your approaches.

The InventABCUpdate do contain the code to creating a dialog, executing in batch, parameters and most of the code I need to create the code needed. After done, my final code does not resemble the original InventABCUpdate code, but for me it is a journey where I have fixed starting point and then make constant adjustments until I have reached the desired solution.


For any of you that is starting the journey of learning development in X++, and quite quickly being able to create solutions our customers it is well worth investment to study of the InventABC to classes and then speed up your coding experience.

Happy coding friends.

 

EDIT: The community responds quickly A better class to use could be Tutorial_RunBaseBatch

D365 commerce; The need for speed (replenishment)

A nightmare for retailers is situations like this, where customers are experiencing empty shelfs.

The normal process for handling these situations is to have store employees to constantly monitor shelfs, back office stocks and to order replenishment when needed. We also see a lot of number crunching demand forecasting systems being offered to the marked, and with a questionable success rate.

Up until now, we have seen systems that have a quite slow react time. Goods are replenished and received. When selling the products there where delays in getting an updated on-hand, and very often a nightly master planning created planned orders that is manually firmed and then sent to the vendors or the central warehouse. In essence the process to getting replenishment signals through the supply chain can take day’s.

With the Dynamics 365 Commerce I now see a maturity to speed up the replenishment process, making it possible to dramatically shorten the lead times in each step. Let me explain:

  1. Retail statement trickle feed
    I have covered this topic a few times before, but in essence this means that the sales transactions generated from a POS sale, is updated at a much faster rate. Having an updated on-hand is essential, and where the outbound sales transactions reflects the actual situation on the shelfs.
  2. Inbound inventory operations in POS/Handheld
    The ability to quickly post the arrival and receive directly on the POS ensures that inbound transactions are updated in real time. Also the ability to quickly manually request replenishment for processing can now be done directly in the POS.
  3. Outbound inventory operation in POS/Handheld
    Faster request goods from other places can reduce the lead time and prevent stock-out situations. If some products are available at a another near store/warehouse that having processes to make them available across other near sales channels can speed up the replenishment.
  4. Planning Optimalization
    Nightly master planning (MRP) is too slow for retailers, and are better suited for businesses with longer lead-times. Retailers are looking for speed. With the Planning Optimalizations features we have a close to real-time generation of planned purchase and transfer orders. As soon as needed the system can initiate the supply chain process based on the on-hand and future expected transactions. In standard D365 there are also automatic firming processes that will generate purchase and transfer orders. These orders can be further processed and automatically be sent to vendors or from other storage locations. But it can also be used to automate transfers from a back-office storage and into the store shelfs.
  5. Solution is still in public preview but are very promising some exiting capabilities that can visually monitor your store and enable triggers that start executing supply chain processes. The first abilities are “Display effectiveness“, “Queue management” and “Shopper analytics“, and where the data collection are based on camera technology.

 

By optimizing the flow, it should be possible within Dynamics 365 to speed up and automate the replenishment process to be executed within 10 minutes after the sale have been conducted. Also, with signals from the connected store solution, this can be used to automatically adjust the minimum on-hand/Shelfs based on actual observed data. The gains and possibilities towards what Dynamics now can offer can again bring profit back to modern Brick&Morter retailers.

I hope this can inspire people to look deeper into the capabilities we now can deliver.

 

 

D365 Outsourcing your master data (DaaS)

In Dynamics 365 implementation projects I often say that all we do can mainly be categorized into 3 headline topics.

As we know for Dynamics 365, Microsoft is providing the software and the platform needed. It is easy to buy as a service where only a monthly commitment is essentially required. This is the nature of the Software-as-a-Service cloud-based concept.

The implementation partners are the best in structuring an implementation project and guiding step-by-step through the jungle. There is a lot of knowledge needed to understand complex processes needed in an organization. The partners are typically working tightly with people and ensuing that the organizational machinery is oiled and running smoothly. Defining processes that follows the entire end-to-end processes like procure-to-pay or order-to-cash.

The third element of equal importance is master data. I have written some previous blogpost about the subject, that is relevant to check up. Traditionally building the master data have often been the responsibility of the organization implementing Dynamics 365 and have been regarded as the heart and soul of the organization. The data is often manually built/generated and maintained, and low quality in master data can have catastrophic effects in any organization. If you cannot trust your data, then you do not have the information needed to make good business decisions.

Traditionally this have been identified as an integration requirement, but the main “ownership” of the data have still been handled internally in the company. Here is where I see a change. Instead of maintaining your own master data, the master data is maintained through cloud based public services operated based on a monthly fee. Just like SaaS (Software as a Service), we see mature implementations of DaaS (Data as a Service), where Dynamics 365 customers is closely integrating and outsourcing much of the maintenance to vertical specific online services.

But one aspect I see, is that the data providers are not global actors, but tends to be more local and verticalized services to specific domains. To be specific towards some providers here in Norway, I would like to name-drop some providers that I have encountered that provide such services.

BREG – Brønnøysund Register Center

The Brønnøysund Register Center develops and operates digital services that streamline, coordinate and simplify dialogue with the public for individuals and businesses. They operate many of the Norway’s most important registers, that contains information about companies, roles, tax etc Many of the services is free, and you can read more about them. If you need validated and confirmed information about any organization on Norway, then this is the registers you need to integrate towards. My friend Fredrik S, from Microsoft have create many demo’s showing how easy it actually is to set this up.

BISNode – Integrated credit check and risk management

Knowing the commercial risk is essential for all businesses. By having updated information, the decisions become less risky and less labor intensive.

1881 – search and return person address information

1881 is Norway’s leading provider of personal and business information and is providing information on telephone numbers, names and addresses. By having lookup into databases like 1881 you instantly get address information that enrich your data and simplifies transaction handling.

GS1 – The Global Language of Business

GS1 is the main provider of a lot of supply-chain oriented master data. Here you maintain product GTIN/barcodes, and they also provide a GLN (Global Location Number) register. When working with delivery addresses, then this is a must-have, because it ensures that goods are shipped and received to the right places. For a small fee, you get access to updated addresses directly into D365, where the addresses are also enriched with GPS coordinates. One more relevant aspect of GS1, is the GPC (Global Product Classification), that makes it easier to search for products globally and is also a very good reporting/analytics structure.

TradeSolution – The Norwegian Grocery PIM

If you are going to sell or purchase products through the Norwegian grocery chain’s, you need to have a close connection with Trade solution. I have written about them previously, but they make sure you have a reliable source of product master data and properties of the products. If you are using their services, there is no need for a third part PIM solution. They also provide a media store for product pictures.

NOBB – The Norwegian Construction PIM

NOBB contains almost 1,000,000 articles from 700 suppliers. You will find a wide range of product information, e.g. lumber, building materials, hardware, tools, fasteners, paints, houses and gardens, water / plumbing, electrical etc. The database contains basic data, price, logistics data, images, documentation streamline the industry’s need for structured and quality-assured basic data. The quality of the product database is ensured through the industry bodies Quality Forum and the Standardization Committee. The item owner updates and maintains the information based on industry standards (ref quality forum and standardization committee). This is a unique quality assurance and proximity to the industry that no other players can offer.

Elfo – The Norwegian electronics PIM

Electronics Industry Association – EIF – is an industry association for Norwegian-based companies that runs electronics-related activities that are mainly aimed at the professional market, either as importer, manufacturer or developer.

Farmalogg – The Norwegian pharmacy industry PIM.

The product register, with few exceptions, covers all goods that are sold in pharmacies, and it contains information that is necessary for the safe and efficient handling of the goods throughout the value chain from manufacturer / supplier, through wholesaler and retailer, to end-user.

Prisguiden – Compare your prices

Price databases that allows you to compare your prices to competitors. You can also measure the popularity and trends that happens in the market. What does customers search for? By tightly integrating towards the market, makes decision making easier and can be made more automated.

Consignor – Easy shipping

Delivery Management is all about connecting your warehouse to your customers in the most efficient way. By making one standard integration to services like Consignor, they make sure that no matter what combination of carrier services you choose, customer will get the same high-quality feeling when receiving a delivery from you.

Currency exchange rate

This service is already present in standard Dynamics 365 – Start using it!

There are surly many other master data providers, and here I have list listed a few actors in the Norwegian marked. By outsourcing your master data maintenance, you will get much higher quality on the data and more return on investment.

Are you ready to outsource your master data ?

DaaS Leben ist kein Ponyhof

 

 

D365 – My Covid-19 10 day’s response story

Hi Friends.

I hope you all are hanging in there and can still work and deliver excellent experiences with Dynamics 365.

I wanted to share my Covid-19 10-day response story on how fast a reduced scope Dynamics 365 implementations has been made available. Some weeks ago, we and Microsoft were contacted by an important player in the health industry, that urgently wanted to establish purchasing- and supply-chain processes for medications and equipment’s. The key element here was the urgency because it was unclear in what directions the pandemic would take here. What the customer needed was tools that could process information about supply providers and what kind of supplies is needed for readiness stockpiling. Our first step was to setup Dynamics 365 (CRM) to store relations and this was done in a few days. Then the next step was to setup and go live with a “minimum viable product” of Dynamics 365 finance and supply-chain apps. We had a goal of doing this in 10 working days. This is the story I would like to share.

Day 1: Onboarding, tools, and deployment

In the initiation of a project, I always have a document named “Welcome to the [Customer]-project”. This is a great document, because it contains all the essential information about the onboarding to a project and can be shared to all participants. It is typically a 6-7 pages document explaining the onboarding process and the main objectives. It also contains references to LCS, SharePoint/Teams sites, DevOps and URL’s to environments. The most valuable element is a full overview of all the people that will somehow be involved in the project. In this project we decided on a small efficient 4 person team(POD), and fast-track support from Microsoft.

Microsoft quickly processed licenses, and we quickly deployed the LCS project. The first we started was to deploy the Tier-2 sandbox, and we named this the ‘UAT’ environment, and this was to be used as the master data/golden environment in the start. We also deployed the Tier-1 sandbox and named this “Test”, and would be used to have access to Visual Studio etc. The initial version we deployed was 10.0.10.

We have a ready implementation templates that is imported into DevOps, that contains the main structure of requirements and tasks. We scope this down to the actual processes we need.


We also have a ready folder structure for the team’s site where we can store and complete all documentation. By the end of the first day we had established the tools needed for starting the project.

Day 2: Working with the generic tasks in the backlog

We established a 30-minutes daily sprint meeting with main implementation major actors, where the plan is presented, and where the today’s tasks are prioritized. We did not have the time to create large word documents, to we decided to document the solution in DevOps, and organizing all the system setup around the entity templates as they can be extracted from D365. I exported the templates to Excel, and then import them to DevOps using the Azure DevOps Office® Integration, and this gives be 419 tasks to setup as much as possible in standard.

This makes it possible for we to have a step-by-step task list of all the elements I need to build the “Golden environment”. Also, each task is being assigned, and the actual setup is documented with a direct URL to the D365 form, and a screen dump of the actual setup.

On the first day we where able to process close to 200 tasks and setting up the most generic parts of the system.

Day 3: Working with the finance task backlog

When working on the finance setup we have a standard chart-of-accounts we imported, and we had to setup financial dimensions. We are also setting up the accounting structure, creating a few inventory posting profile and setting up tax parameters. Normally this is quite strait forward and we can use much from previous projects.

Day 4-5: Working with products

Now the Excel skills is put to the test. We have a excel sheet that contain most of the product master data. In total over 33.000 products, and each product have classifications, attributes, properties, and vendor/producer information. We quickly decided to use the same item numbering as was present in the excel sheet. Each column in the sheet was classified if:

  • This is a field we have in D365?
  • Should field become a category in a hierarchy?
  • Should the field because an attribute?

To get the products inn it was a very advanced copy/paste/merge of data into excel sheets that we then imported into Dynamics 365. At the end, we realized that all information we had could be imported, and without any information loss. It was hard work, but the end result was promising containing a list of all medical supplies available and classified into the medical ATC structure.



We also imported barcodes, vendors, producers, employees, address information, external items names/descriptions, attributes.

Day 6: Frist demo, UAT and deploy production environment

On day 6 we were ready to show the actual master data, and the initial view of the system. The customer was impressed by how fast we where able to build a system and processes that was familiar to their operation.

We decided to update the system to 10.0.11, and in parallel with the setup of the system we had been working closely with the Microsoft fast track solution architect to make the environments ready for production deployment. After a few iterations we got the production environment up and running and performed a DB-refresh of the production environment with the master data we had in the tier-2 sandbox. This meant that now we had an environment available to start performing transactional process testing and trimming the systems. I know that this is not the normal way of doing this, but thanks to Microsoft’s understanding of the urgency we where allowed to go this “fast-track” route. In DevOps we established the processes we wanted to test and optimize.

Day 7: Test dual write, business events and power platform

As earlier described, we also implemented some of the “CRM” elements first. Now we could enable the dual write, and synchronize vendors, employees, and other information into the CDS. Our first step was just to validate that it was working as expected in the UAT, and it worked as a charm We can share these master data across the D365 platform.

The next thing was to test how we could use the business event framework to integrate towards a 3’rd party WMS provider. Dynamics 365 have a business event that is kicking in when performing a purchase order confirmation. We decided to enable purchase order change management to have a strict workflow and ensure that we would rely on the purchase confirmation process.

This allows us to create a solution where the business event is catched by a power automate flow, that fetched all the lines of the purchase confirmation. And then transforms this into the format that the WMS provider needs. We can also enrich the data sent to the WMS provider, so that it is sufficient with all needed master data in their system. The next step is to import receive lines from the 3’rd party WMS provider. This will happen by power automate creating an arrival journal, and then a batch job in D365 is posting it, and then posting a product receipt. It all ends with a new business event being triggered (Purchase order received) that will send a message to the WMS provider that the goods now have been received. What we then archive is that the on-hand in each system is synchronized, and without any major delay caused by processing.

In total we have setup quite a lot of batch jobs, that handles all from cleaning, posting, and planning. We used the takings from the following blogpost as a template for batch jobs.

Day 7: Master planning and Planning Optimization

We do expect that quite a lot of requisitions and requirements will be processed through the system. So, using the new planning optimization engine from Microsoft suited the project well. Calculating the requirement on all products is extremely fast and done within minutes. This will allow for faster reaction time to new requirements and potentially reduce stockout situations caused by vendor lead time.

On day 7 we also imported all employees and created some approval position hierarches. This way we can extend the workflow processing for approvals.

Day 8-9: Testing, Testing, Testing in UAT

We started day 8 by refresh the UAT environment and executing testing according to key central the business requirements defined in DevOps. We found 3-4 issues, that was reported to Microsoft (Index performance etc), that was quickly fixed within hours by the excellent support architects. We also wanted to provide a bit visually nicer purchase order form-letter, that was more presentable, and decided to import the modern reports package from Microsoft. This makes it a bit easier to adjust.

We did try out the configurable business documents, but in this case it would take a bit more time to learn properly (that we did not have..) to set up correctly. Any issues we found, was also fixed in the PROD environment.

The main processes we focused on was the procurement processes, with approval steps, and manual coordination with vendors.

Day 10: Project closure and training

On day 10, we summarized on how far we had come, and created a project closure/summary report that also contains next steps and more backlog suggestions. We have suggested additional focus on Azure Data Lake, Power BI and implementation of a vendor portal. We also planned to perform training and making final changes to enable end-user onboarding. What we see is that making a system ready is not just setting up the system but implementing the use of the system in the daily operation. This is expected to take more time, and we are ready to respond

Final words and tips

I really hope this system will show it value and will be regarded as small but valued contribution to the covid-19 response. Microsoft have published the following page where there are resources that can help. Microsoft have also launched a program where you can get a 200 seat Dynamics 365 Customer Service system for free for 6 months to Covid-19 response related activities. Se https://dynamics.microsoft.com/en-us/covid-19-offer/

If you have any similar stories, please share them. The Dynamics 365 community cares and stands united in this Corona-19 fight!