添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Performance in Dynamics 365 is a critical aspect for both users and system owners. For end users, poor performance can lead to frustration, while system owners face challenges in identifying and resolving performance issues. To help streamline this process, I’ve created a practical checklist that outlines steps to quickly diagnose and discuss sudden performance issues.

Below is a step-by-step guide to find the root cause of performance issues and take appropriate action.

Step 1: Check Azure Status

Even if you don’t fully understand what’s causing the slowdown, there are some quick first checks you can do:

  • Follow the User’s Steps : Once logged in, replicate the exact actions the user took when the issue occurred. This include:
    • Navigating through specific forms.
    • Running reports or transactions.
    • Performing specific searches or filtering data.
    • Consider Different Scenarios : Sometimes, performance issues only occur under certain conditions. Test a variety of scenarios to see if the problem persists:
    • Load Variation : Does the issue only occur when multiple users are logged in and performing heavy tasks at the same time?
    • Data-Specific Issues : Does the issue happen when working with certain records or larger datasets?
    • Time-Sensitive Issues : Are there specific times of day when the issue occurs (e.g., during peak hours)?
    • Simulate a Clean Environment : If you’re can’t reproduce the issue directly, try testing the same functionality in a non-production (e.g., test or sandbox) environment to see if it still occurs. Differences in performance between production and non-production environments can often point to configuration or data issues.
    • Analyze the Trace File : Once tracing is complete, you’ll receive a detailed log of system events, including:
    • SQL Execution Times : Pinpoint how long individual SQL calls are taking.
    • Compute Times : Understand how much CPU time is being consumed during specific processes.
    • Call Stack : See the entire process flow, showing which methods and queries are running.
    • Evaluate Parameters and Configurations :
      Performance can often be tied to configurations. Check the system’s parameters, as enabling too many features or processes can bog down performance. Disable unnecessary options to streamline the system’s operation.
    • Optimize Data Management :
      Check if transactional or outdated data (such as completed sales orders or old inventor/WMS transactions) is accumulating in the system. Regularly archiving old data and keeping the system clean can significantly improve performance. Also take a look at the F&O capacity is some data is “exloding”.
    • Community Support :
      Don’t hesitate to reach out to the broader Dynamics 365 community . Platforms such as Yammer , community forums, and even tools like CoPilot or ChatGPT often provide valuable insights and workarounds shared by other users who have encountered similar issues.
    • Hire a 10X developer to fix it?  Sorry, but they are myths.  Just like unicorns and Bigfoot.
    • Hopefully you have now a deep insight into root cause if the performance issue, and now there is a feeling someone must “pay” because of the pain inflicted on the end-users.  A customer may start with their implementation partner, ISV’s and Microsoft.  But I’m not sure how advisable this would be, as the fundamental issue is not the bug/code/data that caused the performance problems. No developer, partner or Microsoft can deliver flawless code that handles every combination of complexity.  I’m arguing that in the project there should be more investments of quality procedures and customer testing of their used combinations of system, people and data. The implementation guide chapter 14 gives a very good overview of how to run the testing strategy. My recommendation is to allocate +50% of the implementation effort to testing and training

      As I hope this blogpost reflects, is that the path of performance issues is complex, and does involve a lot of knowledge from many parties.  But the good thing is that we do have access to a lot of tools, processes and telemetry to pinpoint root case.  It may take time, but the more exact and detailed we are, the faster an issue can be resolved.

      Also keep in mind that ERP systems are complex. As Michael P posted in Linked in it is estimated that Dynamics 365 X++ codebase (Application Suite consists of 27,7 M code lines and 430K methods).  But if you take the entire codebase of all customers, we have crossed more than 1 billion lines of code.   That is a lot of complexity, and the result is that performance issues will be popping up now and then.

      Last comments:

      It deletes records in EventEntitySyncTables that is more than 3 days old in chunks of 1.000.000 records. (See class BIIncrementalChangesHistoryPurgeJob)

      About BIIncrementalTableModifications, I actually don’t see any clear code that cleans up this table. But there are some code in the class EventActionEntitySyncRefresh that cleans up. Maybe it is on the Microsoft backlog? But there are indications that a full refresh may clean things up, when you go to the entity store menu-item. (You have to do it for all)

      For quite some time we have heard that AI and Copilot will revolutionize everything.  But I still feel I work in the same way as I have always done.  There are some clear benefits of correcting my spelling and language.  I also love the Copilot in Visual Studio when working.  But what it comes to Dynamics 365 and processes, I only see incremental improvements. But I was reading through the release planner , and I found a few topics that catches my interest.

      Navigate and search using Copilot in finance and operations – Preview in July 2024, GA October 2024
      Users often encounter difficulties locating specific pages and data. Copilot addresses this challenge by offering a streamlined solution. This feature allows users to effortlessly query data and navigate to pages and records within the application. Copilot in F&O apps leverage natural language processing to facilitate navigation. Users can now use the intuitive Copilot chat interface to navigate to specific pages within the application and deep link to particular entity records. This enhancement significantly improves user efficiency and experience, making data retrieval and page navigation more straightforward and user-friendly.

      This is interesting, as the search bar in F&O, is basically just searching for menu items.  Could this mean that the copilot also can find filter and sort when searching?  I really look forward to seeing this, as it would make things a lot easier for new users.

      AI actions for finance and operations business logic – Preview in July 2024, GA September 2024

      We can soon make Copilot plugins. Based on the business logic of finance and operations apps for both in-app prompts or actions that can be used in any Copilot experience. These are copilot capabilities that use the business logic of the application without requiring any specific application context or user interface. This enables users to ask questions in Copilot that can be answered by directly invoking X++ business logic, dramatically expanding the capabilities and customization options, making it an invaluable tool for enhancing user experience and operational efficiency.

      If you would like to learn more join the Copilot F&O Yammer forum to see and learn more.

      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!

      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.

      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)

      Scenario Image size Time
      Fetching the “raw” image without cache ( png ) 360 kb 921 ms
      Fetching the “raw” image with cache ( png ) 360 kb 141 ms
      Testing with PNG uncached
      &w=0&h=772&q=80&m=6&f=png
      526 kb 970 ms
      Testing with PNG cached
      &w=0&h=772&q=80&m=6&f=png
      526 kb 135 ms
      Testing with jpg uncached
      &w=0&h=772&q=80&m=6&f=jpg
      66 kb 527 ms
      Testing with jpg cached
      &w=0&h=772&q=80&m=6&f=jpg
      66 kb 88 ms
      Testing with webp uncached
      &w=0&h=772&q=80&m=6&f=webp
      18 kb 782 ms
      Testing with webp cached
      &w=0&h=772&q=80&m=6&f=webp
      18 kb 45 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 🙂

      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.

      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

      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:

    • 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.
    • 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.
    • 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.
    • 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

      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.

      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:

      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

      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:

    • 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.
    • 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.
    • Reusable Media Assets : No longer are unique filenames required for each product. Media assets can be reused across different products. Several layers of fallback.
    • Dimension-Specific Assignment : Media can be allocated to particular product dimensions, allowing for the omission of irrelevant dimensions.
    • 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!

      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.

      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.

      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

    • Dynamics 365 Commerce HQ users (usually attach licenses to other F&O users).
    • Select a Tier level, which determines the scalability and boundaries regarding the number of orders per month you can have.
    • 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:

      Project Manager (1 FTE)
      Responsible for overall project management, communication, and coordination.
      Business Analyst/Functional architect (1 FTE)
      Responsible for gathering requirements, analyzing business processes, and developing functional specifications.
      Commerce/eCommerce Technical Architect (1 FTE)
      Responsible for designing and configuring the Dynamics 365 eCommerce solution, Site builder and setup in Azure B2C.
    • 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
    • Quality Assurance Specialist (1 FTE)
      Responsible for testing and ensuring the quality of the solution.
    • Training Specialist (0.5 FTE)
      Responsible for staff training and creating user guides and documentation.
    • 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:

    • 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.
    • Azure B2C and Azure frontend
      Authentication and access control are essential elements and expect to have 20+ work items related to this topic.
    • 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.
    • 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.
    • Templates
      Create work items on templates that will be reused. In a normal project there will be 12+ fragments.
    • 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!
      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.
      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.
      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!

      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.

      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 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 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…

      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

      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.
    • 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.
    • 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.
    • 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.
    • 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

      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

      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.

      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.

      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

      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 { get ; set ; }

      [DataMember]

      public bool B2 { get ; set ; }

      [DataMember]

      public string ? S3 { get ; set ; }

      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

      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:

    • Seeing information in front of you, such as reading a blogpost or seeing a video, doesn’t mean you know it.
    • Hearing someone come to a conclusion doesn’t mean you know how to get to that conclusion or to explain their argument.
    • Searching for something on Google gives you the illusion that the information is in your brain.
    • 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

      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:

    • Data management (DIXF) overview . For more detailed guidance see Work with data management (Microsoft Learn)
    • Database movement operations
    • Golden configuration promotion
    • Refresh database
    • Export a database
    • Import a database
    • Point-in-time restore (PITR)
    • Cross-company data sharing framework
    • Copy configuration data between legal entities
    • Data task automation

      Continuous updates

    • Understand the software lifecycle policy .
    • Be aware of the targeted release schedule of the upcoming monthly releases and analyze the impact on your project plan.
    • Understand the serviceability and supportability period for each release.
    • Review the update settings in your Lifecyle Services (LCS) project and adjust them as needed (initial default values are set by Microsoft). To learn more, see One Version service updates .
    • Get familiar with the feature management workspace . Watch TechTalk.
    • Build automated regression tests as a part of test case preparation for UAT.
    • Use the Impact analysis report to understand solution areas impacted by a monthly release.
    • 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.

      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

    • Assess and document security requirements early, including data privacy and local data residency needs.
    • Understand GDPR information for Finance and Operations apps .
    • Understand security architecture and security configuration options.
    • Set up segregation of duties where necessary.
    • Be aware of the out-of-box security reports .
    • Complete UAT with final security roles assigned to users.
    • All changes to security should be done in a Sandbox environment and imported to Production.
    • Security changes cannot be rolled back.
    • Don’t plan to enable full rights to all users in Production, as this can put data and processes at risk.
    • Understand extendable data security (XDS) policies capabilities.
    • 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.

    • Role-based security overview
    • Create new users or import users in bulk
    • Assign users to security roles
    • Security diagnostics for tasks recordings
    • 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:

    • Performance Key Patterns and Anti-patterns (TechTalk)
    • Performance Benchmark (TechTalk)
    • Performance timer
    • Optimizing Data Migration for Dynamics 365 Finance and Supply Chain Management
    • 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:

    • Data integration using common data service
    • Dual-write overview
    • Open Data Protocol (OData)
    • Recurring integrations
    • Data management package REST API
    • Custom service development
    • Office integration overview
    • Business events
    • Consume external web services
    • Logic apps
    • For more information see “ Connect to Finance and Operations Apps” (Microsoft Learn)

      BI and Analytics

    • Define reporting requirements considering data (size, source), user (capability, security) and process, (access, format).
    • Understand the out-of-the-box reporting and analytics capabilities of Finance and Operations apps.
    • Finance and operations apps have various business intelligence and reporting tools available:

    • Operational views
    • Financial reporting , Financial insights
    • Electronic reporting
    • Business documents ( watch TechTalk)
    • Analytical workspaces
    • Power BI integration with entity story
    • Bring your own database (BYOD)
    • Azure Data lake
    • 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 ?

    • Read the following docs carefully, and setup D365 Commerce to support offline devices.
    • Install SQL server . (I’m using the Developer edition) Remember to also install options like SQL full-text Search
    • Download the store commerce app from LCS asset library
    • 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.

      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 .
      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 ,
      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.

      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.

      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 r esiliency 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

      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.

      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.

      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)

      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.
      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. 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. 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. 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/Communitydrivenengineering One 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!!!!

      Most of us in the field have traditionally used Microsoft Visio to show architecture, processes and systems. But there is an alternative that I would recommend to the community:

      https://www.diagrams.net/

      This is a free, online and easy to use tool to quickly represent graphics related to what you want to show. Give it a try, and simplify the complex

      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.

      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:

    • B2C experience
    • Product discovery and cloud powered search
    • Curb-side pickup
    • Intelligent recommendations
    • Ratings and reviews
    • Quick add to cart
    • Customer Service
    • Customer Voice
    • 3D product visualization and augmented reality (The 3D surf board)
    • Livestream shopping
    • Try Adventure Works mobile app

      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

      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

    • 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.
      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.
    • 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.
      Entity Store in Azure Data Lake

      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?

      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.
    • 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)
      Export til Data Lake

      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.

      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

      -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. 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. 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. 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. 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.

      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.

      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.

      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.

      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:

      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.

      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.

      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.

      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.

      • 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.

      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.

      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 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.

      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.

      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.

      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.

      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.

      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 hierarchy Use 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 hierarchy Use 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 hierarchy Use 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:

      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.

      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-Commerce If 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 page If 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 page The recommendation engine suggests items, based on the whole list of items in the basket. These items appear in the Frequently bought together list.
      Personalized recommendations Merchandisers 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 .

      New Algorithmic This module shows a list of the newest products that have been recently assorted to channels and catalogs.
      Best selling Algorithmic This module shows a list of products that are ranked by the highest number of sales.
      Trending Algorithmic This module shows a list of the highest-performing products for a given period, ranked by highest number of sales.
      Frequently bought together AI-ML This module recommends a list of products that are commonly purchased together with the contents of the consumers current cart.
      People also like AI-ML This module recommends products for a given seed product based on consumer purchase patterns.
      Picks for you AI-ML This 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

      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 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.

      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.

      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.

      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

      • 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.

      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.

      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.

      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.

      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.

      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.

      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.

      • 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.

      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.

      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.

      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:

      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:

      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.

      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.
      • 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:

      ID Operation Description
      707 Activate device Activate the current device by allowing an authenticated user to provide connection information and assign a device and register ID.
      134 Add affiliation Add a preselected affiliation to a transaction. Select the affiliation on the Button properties page.
      135 Add affiliation from list Add an affiliation to a transaction by selecting it in a list.
      137 Add affiliation to customer Add an affiliation to a customer on the Customer details page.
      138 Remove affiliation from customer Remove an affiliation on the Customer details page.
      643 Add coupon code Add a coupon by entering its code in the POS.
      141 Add header charges Add a misc charge to the order header.
      141 Add line charges Add a misc charge to a selected sales line.
      117 Add loyalty card Prompt the user to enter a loyalty card number that will be added to the current transaction.
      136 Add serial number This operation lets the user specify a serial number for the currently selected product.
      1214 Add shipping address This operation isn’t supported.
      519 Add to gift card Add money to the specified gift card.
      6000 Allow skip fiscal registration This operation isn’t supported.
      1212 Bank drop Record the amount of money that is sent to the bank and other information, such as the number of the bank bag.
      923 Bank totals verification This operation isn’t supported.
      915 Blank operation This operation represents a customizable button that a software developer can programmatically change for any specialized operation that the business requires.
      1053 Blind close shift Set 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.
      310 Calculate total When discount calculation is delayed, this operation initiates the calculation for the current transaction.
      642 Carry Out All Products Set the mode of delivery for all lines to Carryout .
      641 Carry Out Selected Products Set the mode of delivery for the selected lines to Carryout .
      647 Change mode of delivery Change mode of delivery for preconfigured shipping sales lines.
      1215 Change password This operation lets the POS user change their password.
      123 Change unit of measure Change the unit of measure for the selected line item.
      639 Clear default sales representative on transaction Remove the commission sales group (sales rep) from the transaction.
      106 Clear quantity Reset the quantity on the currently selected line to 1 .
      640 Clear sales representative on line Remove the commission sales group (sale rep) from the currently selected line.
      121 Clear salesperson This operation isn’t supported.
      1055 Close shift Close the current shift, print a Z report, and sign the user out of the system.
      139 Conclude transaction Prompts user to select payment method
      620 Create customer order Convert the POS transaction to a customer order.
      925 Copy the bank check This operation isn’t supported.
      620 Create customer order Convert the POS transaction to a customer order.
      621 Create quotation Convert the POS transaction to a sales quotation.
      636 Create retail transaction This operation lets the user create a standard sales transaction when the default POS behavior is to create customer orders.
      600 Customer Add the specified customer to the transaction.
      1100 Customer account deposit Make a payment to a customer’s account.
      612 Customer add This operation lets the user create a new customer record.
      603 Customer clear Remove the customer from the current transaction.
      602 Customer search This operation lets the user search for a customer record by navigating to the customer search page in the POS.
      609 Customer transactions This operation isn’t supported.
      917 Database connection status This operation lets the user view the current connection settings, and switch between online and offline modes.
      1200 Declare start amount Declare the amount that is in the cash drawer when the day or shift starts.
      132 Deposit override Override the default deposit for customer orders.
      913 Design mode disable This operation isn’t supported.
      912 Design mode enable This operation isn’t supported.
      1217 Disassemble kits Disassemble a kit into its component products.
      624 Display refund amounts This operation isn’t supported.
      513 Display total Show the balance of the transaction on the customer display.
      623 Edit customer Edit the current customer’s details.
      614 Edit customer order Recall the selected order so that it can be modified in the POS.
      615 Edit quotation Recall the selected quotation so that it can be modified in the POS.
      518 Expense accounts Record money that is removed from the cash drawer for occasional expenses.
      919 Extended log on Assign or remove permission to sign in by scanning a bar code or swiping a card.
      1201 Float entry This operation lets the user add additional money to the current drawer or shift.
      1218 Force unlock peripheral The system uses this operation internally to unlock POS peripherals.
      520 Gift card balance Show the balance of a gift card.
      708 Inactivate device Inactivate the current device, so that it can’t be used as a POS register.
      804 Inbound operation Access the features of inbound store inventory management.
      517 Income accounts Record money that is put into the cash drawer for a reason other than a sale.
      801 Inventory lookup Look up available, on order, and available-to-promise (ATP) quantities for the current store and other available locations.
      122 Invoice comment This operation lets the user enter a comment about the current transaction.
      511 Issue credit memo Issue a credit memo to provide a voucher instead of a refund.
      512 Issue gift card Issue a new gift card for the specified amount.
      625 Issue loyalty card Issue a loyalty card to a customer, so that the customer can participate in the store’s loyalty program.
      300 Line discount amount Enter a discount amount for a line item in the transaction. This operation is used only for discountable items and only within specified discount limits.
      301 Line discount percent Enter a discount percentage for a line item in the transaction. This operation is used only for discountable items and only within specified discount limits.
      703 Lock register Lock the current register, so that it can’t be used, but don’t sign the current user out.
      701 Log off Sign the current user out of the register.
      521 Loyalty card points balance Show the balance of points for the specified loyalty card.
      142 Manage charges View and manage misc charges applied to transaction.
      918 Manage shifts Show a list of active, suspended, and blind closed shifts.
      914 Minimize POS window This operation isn’t supported.
      1000 Open drawer Perform a “no sale” operation, and open the currently selected cash drawer.
      928 Order fulfillment This operation allows users to pick, pack, ship, or recall orders for store picked up.
      805 Outbound operation Access features for managing shipments of outbound transfer orders.
      129 Override line product tax Override the tax on the selected line item, and use a different specified tax.
      130 Override line product tax from list Override the tax on the selected line item, and use the tax that the user selects in a list.
      127 Override transaction tax Override the tax on the transaction, and use a different specified tax.
      128 Override transaction tax from list Override the tax on the transaction, and use the tax that the user selects in a list.
      131 Packing slip Create a packing slip for the selected order.
      710 Pair hardware station This operation isn’t supported.
      201 Pay card Accept a card such as a credit card or a debit card as payment.
      200 Pay cash Accept cash as payment.
      206 Pay cash quick Complete the transaction in one touch, and accept the amount that is due in cash (exact change).
      204 Pay check Accept a check as payment.
      213 Pay credit memo Accept a credit memo (voucher) that the store issued.
      203 Pay currency Accept payment in various currencies.
      202 Pay customer account Charge the transaction to the customer’s account. This payment method isn’t valid for customer order deposits.
      214 Pay gift card Accept a gift card that the store issued.
      207 Pay loyalty Accept a loyalty card for payment, and redeem points toward qualified products.
      634 Payments history Show the customer’s payment history for the current customer order.
      803 Picking and receiving Open the Picking and receiving page, where you can select orders to pick or receive in the store.
      632 Pickup all products Set the fulfillment method to Store pickup for all lines.
      631 Pickup selected products Set the fulfillment method to Store pickup for selected lines.
      400 Popup menu This operation isn’t supported.
      101 Price check This operation lets the user look up the price for a specified product.
      104 Price override Override the price of a product, if the product has been set up to allow for price overrides.
      1058 Print fiscal X This operation isn’t supported.
      1059 Print fiscal Z This operation isn’t supported.
      927 Print item label This operation isn’t supported.
      926 Print shelf label This operation isn’t supported.
      1056 Print X Print and X report for the current shift.
      103 Product comment Add a comment to the selected line item in the transaction.
      100 Product sale Add a specified product to the transaction.
      108 Product search This operation lets the user search for a product by navigating to the product search page in the POS.
      633 Quote expiration date This operation lets the user view or modify the expiration date on a sales quotation.
      627 Recalculate Recalculate all customer order lines and taxes, based on the current configuration.
      143 Recalculate charges Recalculate the auto-charges applied to the order.
      515 Recall order This operation lets the user search for and recall customer orders and sales quotations.
      504 Recall transaction This operation lets the user recall a previously suspended transaction from the current store.
      305 Redeem loyalty points This operation isn’t supported.
      635 Refund shipping charges This operation lets the user refund shipping charges on a canceled order.
      644 Remove coupon code Prompt the user to remove coupons by selecting them in a list of coupons that are currently associated with the transaction.
      1057 Reprint Z Reprint the Z report for the previous shift or a selected shift.
      1216 Reset password This operation lets a user who has the password-reset permission reset another employee’s password by using a temporary password.
      1219 Open URL in POS This operation lets a user to open an admin configured URL in POS.
      109 Return product Perform a return of individual products. The next scanned product is shown as a returned product that has a negative quantity and price.
      114 Return transaction Recall a previous transaction by its receipt number to return some or all of the products.
      1211 Safe drop Perform a safe drop to move money from the register to a safe.
      516 Sales invoice This operation lets the customer make payments toward the selected sales invoice.
      502 Salesperson This operation lets the user set the Sales taker value on a sales order for customer orders in the POS.
      2000 Schedule management This operation is not yet supported.
      2001 Schedule requests This operation is not yet supported.
      622 Search This operation lets users preconfigure POS buttons to perform searches by item, customer, or category.
      1213 Search shipping address This operation isn’t supported.
      709 Select hardware station This operation lets the user select a hardware station in a list of available hardware stations.
      637 Set default sales representative on transaction This 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.
      105 Set quantity Change the quantity of a line item in the transaction.
      638 Set sales representative on line This operation lets the user select one of the eligible commission sales groups (sale reps) for the currently selected line.
      630 Ship all products Set the fulfillment mode to Shipping for all line items.
      629 Ship selected products Set the fulfillment mode to Shipping for the selected lines.
      115 Show journal Show the store’s journal. You can view transactions, reprint receipts and gift receipts, and recall for return.
      802 Stock count This operation lets the user create or modify stock counting journals for physical inventory or cycle counts.
      401 Sub menu This operation takes the user to another linked button grid.
      1054 Suspend shift Suspend the current shift, so that a new or different shift can be activated on the current register.
      503 Suspend transaction Suspend the current sales transaction, so that it can be recalled later in the store.
      1004 Task recorder Open Task recorder to record procedural steps in the POS.
      1052 Tender declaration This operation lets the user specify the amount of money in the drawer for each counted payment method.
      1210 Tender removal This operation lets the user remove money from the current drawer or shift.
      920 Time clock This operation lets users punch in and punch out of work shifts and breaks.
      302 Total discount amount Enter a discount amount for the transaction. This operation applies only to discountable items and only within specified discount limits.
      303 Total discount percent Enter a discount percentage for the transaction. This operation applies only to discountable items and only within specified discount limits.
      501 Transaction comment Add a comment to the current transaction.
      922 View product details Open the product details page for the currently selected line item.
      1003 View reports Show the reports that have been configured for the current user.
      921 View time clock entries Show the time clock entries for all workers at the store.
      211 Void payment Void the currently selected payment line from the transaction.
      102 Void product Void the currently selected line item from the transaction.
      500 Void transaction Void the current transaction.
      916 Windows workflow foundation This operation isn’t supported.
      924 X report for bank cards This operation isn’t supported.
      311 Remove system discounts from transactions Remove all the system applied discounts, including coupon based discounts, from the transaction. This does not remove manual discounts.
      312 Reapply system discounts Reapply 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.

      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.

      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.

      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.

      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 😊

      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.

      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.

      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:

      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:

      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.

      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.

      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.

      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.

      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.

      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.

      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.

      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).

      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:

      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.

      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.

      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

      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

      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 .

      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:

    • Standard, but no calls to feature enablement
    • Fast : All code and data datasources removed, except custTable and DirParty
    • Faster : All code and data datasources removed, except custTable. Display method on customer name
    • Fastest; All code is removed except CustTable data source

      3.Faster : All code and data datasources removed, except custTable. Display method on customer name

      0.56, 0.62, 0.57

      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

      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.

      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

      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: Support Multiple Languages & Markets on E-Commerce Site

      https://www.youtube.com/watch?v=_nW1-EMbz94

      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: Setup a B2C Tenant for e-Commerce Site Authentication

      https://www.youtube.com/watch?v=sDnQmFnICJM

      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!

      Enter your email address to subscribe to this blog and receive notifications of new posts by email.

      Email Address: D365 Performance Checklist: Troubleshooting and Resolving Performance Issues D365 : Purge Incremental Changes History Power Platform Admin Center Known Issues: Simplifying Support and Workarounds D365 – Will 10.0.41 be the release where Copilot shows it value? D365 Commerce versioning Don’t be the Window Dressing Consultant Dynamics 365 – Power BI reporting – Do NOT D365 eCommerce : Let’s talk about WEBP D365 new year.  Let’s take the trash out. CoPilot in Dynamics 365 implementation portal D365 eCommerce and Relevance search – When life gives you lemons, make lemonade Dynamics 365 eCommerce, search and no hype D365 – Overriding code with a hack(100% meaningless) Dynamics 365 : Performance benefits of Omnichannel media management Setting the correct time zone for service accounts in Microsoft Dynamics 365 Dynamics 365 CSU – Cache is king 4 Commerce hypes from Gartner It’s Time to Increment Dynamics 365 to Version 11: A Focus on Dataverse and CoPilot Innovations A Million Moments of Gratitude: Celebrating Our Milestone Together D365 eCommerce implementation and costs D365 eCommerce – My personal copy-paste blog D365 Understanding limitations D365 eCommerce : Image it ! D365 – This blogpost is not written by ChatGPT D365: BarTender and label integration using REST API Dynamics 365 – 90% of everything is crap D365 eCommerce : Invalidate the cache D365 Commerce : Omitting serialization of null and default values in JSON payloads Dynamics 365 and the illusions of competence FastTrack recommendations for success D365 Store Commerce performance test D365: My take on the new Microsoft focus D365 : A messy tips blogpost D365: 2022Wave1 – Unified pricing service D365; 4 Lines to scroll at a time D365 – 252 Solution Blueprint review questions D365 Hidden Sales order gem; copy from item list Dynamics 365 – top things to learn and tools to use in 2022 Diagrams.net D365 Recurring Integrations Scheduler(RIS) How to learn and try out Dynamics 365 Commerce? D365 : Use your data D365 – Building a business value review MB-340: Microsoft Dynamics 365 Commerce Functional Consultant (beta) Buy Commerce Scale Unit’s, and get Device licenses included D365 eCommerce sites live and running D365 – CustTable – fast – faster – fastest – WOW! D365 B2B eCommerce, Things have changed (again) D365 Commerce – tech-talk videos on YouTube Decompiling D365 retail components

  •