D365 Store Commerce performance test

Hi friends.

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

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

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

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

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

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

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

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

D365: My take on the new Microsoft focus

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

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

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

My thoughts.

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

My observations

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

My wishes

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

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

Thanks for reading my thoughts and have a great Eastern.

D365 : A messy tips blogpost

Hi friends.

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

Azure Zone Pinning

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

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

Cloud Scale Unit and .NET Core

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

.NET Framework – Total time ~450 ms

.NET Core – Total time ~430 ms

Multiselect product attributes

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

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

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

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

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

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

Store commerce app with offline

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

 

That’s it for today

D365: 2022Wave1 – Unified pricing service

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

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

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

So, what is attribute based pricing?

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

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

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

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

D365 – 252 Solution Blueprint review questions

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

The Solution Blueprint Review workshop covers the following topics:

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

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

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

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

Area

Question

Application Lifecycle Management Strategy,Release Process

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

Application Lifecycle Management Strategy,Build and Deploy Process

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

Application Strategy,Application Architecture

Has the selection of applications and technologies been finalized?

Application Strategy,Application Architecture

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

Application Strategy,Application Architecture

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

Application Strategy,Application Gaps & Risks

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

Application Strategy,Application Gaps & Risks

Have gaps been identified?

Application Strategy,ISV Solutions and Add-ons

Which ISV solutions are you going to implement?

Application Strategy,ISV Solutions and Add-ons

What is the ISV implementation strategy?

Application Strategy,ISV Solutions and Add-ons

What is the ISV support model?

Application Strategy,ISV Solutions and Add-ons

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

Application Strategy,ISV Solutions and Add-ons

Is each ISV solution available on AppSource?

Application Strategy,ISV Solutions and Add-ons

Will customizations be required on top of ISV solutions?

Application Strategy,ISV Solutions and Add-ons

How does the ISV solution integrate with Dynamics 365?

Application Strategy,Application Licensing Considerations

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

Application Strategy,Application Licensing Considerations

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

Business Process Strategy – Finance,General Ledger Strategy

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

Business Process Strategy – Finance,General Ledger Strategy

What is the consolidation and elimination strategy?

Business Process Strategy – Finance,General Ledger Strategy

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

Business Process Strategy – Finance,General Ledger Strategy

What is the strategy for the main account categories?

Business Process Strategy – Finance,General Ledger Strategy

Has your accounting currency strategy been defined?

Business Process Strategy – Finance,General Ledger Strategy

Has your reporting currency strategy been defined?

Business Process Strategy – Finance,General Ledger Strategy

Do you process foreign currency revaluation?

Business Process Strategy – Finance,General Ledger Strategy

How are you planning to meet taxation requirements?

Business Process Strategy – Finance,General Ledger Strategy

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

Business Process Strategy – Finance,General Ledger Strategy

Is there a plan to use the Cost accounting module?

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

Is the fixed assets module in scope for the project?

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

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

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

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

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

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

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

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

Business Process Strategy – Finance,Budgeting Strategy

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

Business Process Strategy – Finance,Budgeting Strategy

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

Business Process Strategy – Finance,Budgeting Strategy

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

Business Process Strategy – Finance,Accounts Payable Strategy

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

Business Process Strategy – Finance,Accounts Payable Strategy

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

Business Process Strategy – Finance,Accounts Payable Strategy

Is there a requirement to process prepayments to vendors?

Business Process Strategy – Finance,Accounts Receivable Strategy

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

Business Process Strategy – Finance,Accounts Receivable Strategy

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

Business Process Strategy – Finance,Accounts Receivable Strategy

What techniques are used to pay customers?

Business Process Strategy – Finance,Accounts Receivable Strategy

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

Business Process Strategy – Finance,Accounts Receivable Strategy

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

Business Process Strategy – Finance,Accounts Receivable Strategy

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

Business Process Strategy – Finance,Public Sector Strategy

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

Business Process Strategy – Finance,Public Sector Strategy

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

Business Process Strategy – General Features,Mobile Access Strategy

Are there mobile device requirements?

Business Process Strategy – General Features,Mobile Access Strategy

What is the warehouse mobile device strategy?

Business Process Strategy – General Features,Mobile Access Strategy

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

Business Process Strategy – General Features,Localization Strategy

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

Business Process Strategy – General Features,Localization Strategy

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

Business Process Strategy – General Features,Electronic Reporting Strategy

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

Business Process Strategy – General Features,Printing Strategy

Is there a detailed printing strategy defined?

Business Process Strategy – General Features,Printing Strategy

Have printing requirements been documented?

Business Process Strategy – General Features,Printing Strategy

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

Business Process Strategy – General Features,Alert Rules Strategy

Is there a plan to use Alert rules?

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

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

Business Process Strategy – Human Resources,Personnel Management

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

Business Process Strategy – Human Resources,Personnel Management

Are you planning to use workflow with your worker actions?

Business Process Strategy – Human Resources,Personnel Management

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

Business Process Strategy – Human Resources,Personnel Management

Are you planning to use workflow with your position actions?

Business Process Strategy – Human Resources,Personnel Management

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

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

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

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

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

Business Process Strategy – Human Resources,Leave and Absence Management

Is leave and absence management in scope for the implementation?

Business Process Strategy – Human Resources,Leave and Absence Management

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

Business Process Strategy – Human Resources,Leave and Absence Management

Are there requirements for FMLA leave?

Business Process Strategy – Human Resources,Leave and Absence Management

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

Business Process Strategy – Human Resources,Leave and Absence Management

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

Business Process Strategy – Human Resources,Leave and Absence Management

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

Business Process Strategy – Human Resources,Benefits Management

Is Benefits Management in scope for the implementation?

Business Process Strategy – Human Resources,Compensation Management and Payroll

Is compensation management in scope for the implementation?

Business Process Strategy – Human Resources,Compensation Management and Payroll

Are employees compensated in more than one currency?

Business Process Strategy – Human Resources,Compensation Management and Payroll

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

Business Process Strategy – Human Resources,Employee Development

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

Business Process Strategy – Human Resources,Employee Development

Are you planning to use workflows with the review process?

Business Process Strategy – Human Resources,Learning

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

Business Process Strategy – Human Resources,Organization Administration

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

Business Process Strategy – Human Resources,Organization Administration

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

Business Process Strategy – Human Resources,Organization Administration

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

Business Process Strategy – Human Resources,Organization Administration

Will financial dimensions be used in Dynamics 365 Human Resources?

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

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

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

Is a clear process defined for maintaining the check lists?

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

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

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

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

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

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

Data Strategy,Data Migration Strategy

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

Data Strategy,Data Migration Strategy

Is there a plan to migrate historical transactions?

Data Strategy,Data Migration Strategy

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

Data Strategy,Data Migration Strategy

Are the data migration quality standards defined?

Data Strategy,Data Migration Strategy

Are data transformation requirements defined?

Data Strategy,Data Migration Strategy

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

Data Strategy,Data Migration Strategy

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

Data Strategy,Data Migration Strategy – Human Resources

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

Data Strategy,Data Migration Strategy – Human Resources

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

Data Strategy,Data Migration Strategy – Human Resources

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

Data Strategy,Data Migration Strategy – Human Resources

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

Data Strategy,Data Migration Strategy – Human Resources

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

Data Strategy,Data Migration Strategy – Human Resources

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

Data Strategy,Data Migration Strategy – Human Resources

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

Data Strategy,Data Migration Strategy – Human Resources

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

Data Strategy,Data Migration Strategy – Human Resources

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

Data Strategy,Data Migration Validation and Performance

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

Data Strategy,Data Migration Validation and Performance

Who will be responsible for data validation checks?

Data Strategy,Data Migration Validation and Performance

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

Data Strategy,Master Data Management

Has the team established master data governance process?

Data Strategy,Master Data Management

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

Data Strategy,Configuration Data Management

Is there an environment for GOLD configurations?

Data Strategy,Configuration Data Management

How are GOLD configurations documented?

Data Strategy,Configuration Data Management

How are GOLD configurations approved?

Data Strategy,Configuration Data Management

Is the flow of data between environment clearly documented?

Data Strategy,Configuration Data Management

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

Data Strategy,Documents/Attachment Data Migration Strategy

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

Data Strategy,Documents/Attachment Data Migration Strategy

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

Data Strategy,Documents/Attachment Data Migration Strategy

Are you planning to migrate personnel record files/attachments?

Data Strategy,Documents/Attachment Data Migration Strategy

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

Data Strategy,Legal Entities and Data Sharing

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

Data Strategy,Legal Entities and Data Sharing

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

Data Strategy,Legal Entities and Data Sharing

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

Data Strategy,Legal Entities and Data Sharing

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

Environment & Capacity Strategy,Environment strategy

Are there challenges with subscribing to additional environments?

Environment & Capacity Strategy,Environment strategy

Have you scheduled a regular environment plan review?

Environment & Capacity Strategy,Environment strategy

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

Environment & Capacity Strategy,Environment strategy

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

Environment & Capacity Strategy,Environment strategy

Did you watch the TechTalk for environment planning?

Environment & Capacity Strategy,Environment strategy

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

Environment & Capacity Strategy,Production Instance Strategy

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

Environment & Capacity Strategy,Production Instance Strategy

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

Environment & Capacity Strategy,Production Instance Strategy

Has bandwidth availability been verified for all locations?

Environment & Capacity Strategy,Production Instance Strategy

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

Environment & Capacity Strategy,Production Instance Strategy

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

Environment & Capacity Strategy,Production Instance Strategy

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

Environment & Capacity Strategy,Production Instance Strategy

Does the implementation include multiple locations around the globe?

Environment & Capacity Strategy,Production Instance Strategy

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

Environment & Capacity Strategy,Production Instance Strategy

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

Environment & Capacity Strategy,Continuous Update

Are you familiar with the Continuous Updates policy?

Environment & Capacity Strategy,Performance Planning

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

Environment & Capacity Strategy,Cloud and Edge

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

Integration Strategy,Integration Scope

Is the integration scope defined at an interface level?

Integration Strategy,Integration Scope

Are all of the characteristics of each interface fully defined?

Integration Strategy,Integration Scope

Who is responsible for delivering the integration scope?

Integration Strategy,Integration Scope

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

Integration Strategy,Integration Scope

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

Integration Strategy,Integration Approach

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

Integration Strategy,Integration Approach

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

Integration Strategy,Integration Approach

What is the approach for synchronous integrations?

Integration Strategy,Integration Approach

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

Integration Strategy,Integration Approach

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

Integration Strategy,Integration Approach

Will middleware be used for integrations?

Integration Strategy,Integration Operations Strategy

Is the integration administration scope and approach defined and documented?

Integration Strategy,Integration Operations Strategy

What is the error handling approach?

Integration Strategy,Integration Operations Strategy

Are you logging events to Azure App Insights?

Integration Strategy,Dual Write Strategy

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

Integration Strategy,Dual Write Strategy

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

Integration Strategy,Dual Write Strategy

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

Integration Strategy,Dual Write Strategy

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

Integration Strategy,Dual Write Strategy

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

Integration Strategy,Dual Write Strategy

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

Integration Strategy,Dual Write Strategy

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

Integration Strategy,Dual Write Strategy

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

Integration Strategy,Dual Write Strategy

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

Integration Strategy,Virtual Entities Strategy

Are there plans to use virtual entities?

Intelligence Strategy,Operational Reporting and Insights

What is the reporting and Business Intelligence strategy?

Intelligence Strategy,Operational Reporting and Insights

Are reporting/analytics requirements documented?

Intelligence Strategy,Operational Reporting and Insights

Have printing requirements been documented?

Intelligence Strategy,Operational Reporting and Insights

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

Intelligence Strategy,Operational Reporting and Insights

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

Intelligence Strategy,Strategic Organizational and Executive Reporting

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

Intelligence Strategy,Strategic Organizational and Executive Reporting

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

Intelligence Strategy,Strategic Organizational and Executive Reporting

What is the financial reporting strategy?

Intelligence Strategy,Compliance Reporting Scope – Human Resources

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

Intelligence Strategy,Compliance Reporting Scope – Human Resources

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

Intelligence Strategy,Compliance Reporting Scope – Human Resources

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

Intelligence Strategy,Compliance Reporting Scope – Human Resources

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

Intelligence Strategy,Compliance Reporting Scope – Human Resources

Are you planning to use injury illness incidents?

Intelligence Strategy,Data Warehousing Strategy

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

Intelligence Strategy,Artificial Intelligence

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

Intelligence Strategy,Artificial Intelligence

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

Intelligence Strategy,Artificial Intelligence

What is the demand forecasting strategy?

Program Strategy,Goals and Objectives

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

Program Strategy,Goals and Objectives

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

Program Strategy,Goals and Objectives

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

Program Strategy,Governance and Methodology

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

Program Strategy,Governance and Methodology

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

Program Strategy,Governance and Methodology

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

Program Strategy,Governance and Methodology

How will changes to project scope be handled?

Program Strategy,Governance and Methodology

What is the status reporting procedure for the implementation?

Program Strategy,Governance and Methodology

How is the project managing risks and issues?

Program Strategy,Governance and Methodology

How are decisions regarding the solution architecture managed?

Program Strategy,Governance and Methodology

What is your training and adoption strategy?

Program Strategy,Governance and Methodology

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

Program Strategy,Stakeholders

Does the customer have a project manager?

Program Strategy,Stakeholders

Does the partner have a project manager?

Program Strategy,Stakeholders

Is there an executive owner identified for the project?

Program Strategy,Stakeholders

Is there a steering committee for the project?

Program Strategy,Stakeholders

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

Program Strategy,Stakeholders

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

Program Strategy,Stakeholders

Is this an IT driven project?

Program Strategy,Project Schedule

Are the scope and project timelines realistic?

Program Strategy,Project Schedule

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

Program Strategy,Project Schedule

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

Program Strategy,Project Schedule

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

Program Strategy,Project Schedule

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

Program Strategy,Rollout Model

What is the rollout model selected for this project?

Program Strategy,Rollout Model

Does the project plan include resource and task dependencies?

Program Strategy,Rollout Model

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

Program Strategy,Rollout Model

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

Program Strategy,Solution Scope

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

Program Strategy,Solution Scope

What are the known product gaps?

Program Strategy,Solution Scope

Has the project taken dependencies on roadmap features?

Program Strategy,Solution Scope

Are external component licensing costs considered?

Program Strategy,Requirements Gathering Approach

What is your requirement gathering strategy?

Program Strategy,Requirements Gathering Approach

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

Program Strategy,Requirements Gathering Approach

Are requirements being reviewed and validated?

Program Strategy,Requirements Gathering Approach

Are requirements being captured relative to their respective business processes?

Program Strategy,Requirements Gathering Approach

Are negative requirements being captured?

Program Strategy,Requirements Gathering Approach

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

Program Strategy,Requirements Gathering Approach

Where are requirements being managed?

Security Strategy,Identity and Access Management

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

Security Strategy,Identity and Access Management

Are all required Domains synced to AAD?

Security Strategy,Identity and Access Management

Are you using alternate authentication provider?

Security Strategy,Identity and Access Management

Are you considering multi-tenant & Cross Tenant Access?

Security Strategy,Identity and Access Management

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

Security Strategy,Identity and Access Management

How are you considering Integration Identity and Service Accounts?

Security Strategy,Access Control – Conditional Access (CA)

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

Security Strategy,Compliance – Data Retention

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

Security Strategy,Compliance – General

Are you aware of Microsoft Trust center?

Security Strategy,Compliance – General

Are there specific compliance certification requirements?

Security Strategy,LCS – Security

Is there user maintenance strategy in place for LCS?

Security Strategy,Roles – Approach

Is Customer managing all security implementation tasks?

Security Strategy,Roles – Approach

Are security roles part of Golden Config?

Security Strategy,Roles – Approach

Are security roles part of UAT?

Security Strategy,Roles – Approach

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

Security Strategy,Roles – Scope

Are all security roles/duties/privileges identified?

Security Strategy,Roles – Scope

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

Security Strategy,XDS Policy – Approach

Is the approach for using XDS policies finalized?

Security Strategy,Security – Human Resources

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

Security Strategy,Security – Human Resources

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

Security Strategy,Security – Human Resources

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

Test Strategy,Test Plan

Who is responsible for testing the solution?

Test Strategy,Test Plan

Who will create the test scripts?

Test Strategy,Test Approach

How are requirement tests being structured and executed?

Test Strategy,Test Approach

How is process testing being structured and executed?

Test Strategy,Test Approach

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

Test Strategy,Test Approach

How is user acceptance testing being structured and executed?

Test Strategy,Test Approach

Is there a plan to conduct a mock-cutover?

Test Strategy,Test Approach

What is the plan for testing in each required language?

Test Strategy,Test Management

How are test executions tracked?

Test Strategy,Test Management

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

Test Strategy,Performance Testing

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

Test Strategy,Performance Testing

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

Test Strategy,Performance Testing

Have you documented the performance goals for your solution?

Test Strategy,Performance Testing

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

 

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

 

 

D365 Hidden Sales order gem; copy from item list

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

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

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

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

When I then create a salesorder:

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

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

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

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

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

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

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

Certifications

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

Tools

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

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

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

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

Sites I use and visit a lot

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

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

Happy new year!!!!

D365 Recurring Integrations Scheduler(RIS)

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

How to learn and try out Dynamics 365 Commerce?

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

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

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

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

 

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

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

Take care friends

D365 : Use your data

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

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

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

     

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

     

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

     

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

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

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

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

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

 

D365 – Building a business value review

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

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

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

1. Benefits – scaled and phased

2. Costs – scaled and phased

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

4. Cashflow through an implementation and onwards

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

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

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

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

The benefits can be built from predefined templates.

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

General benefits

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

-Increase in revenue (%)

-Gross margin (%)

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

-Current revenue leakage (%)

-Revised revenue leakage (%)

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

-Current gross margin (%)

-Revised gross margin (%)

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

-Average revenue per project ($)

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

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

-Reduction in spend (%)

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

-Debtor days – today

-Debtor days – after

-Annual interest cost (%)

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

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

-Revised C2C cycle time (days)

-Annual interest cost (%)

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

-Revised annual regulatory costs ($)

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

-Direct efficiency improvement (%)

-Annual loaded cost per direct staff member ($)

-Number of indirect staff currently engaged

-Indirect efficiency improvement (%)

-Annual loaded cost per indirect staff member ($)

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

-Efficiency improvement (%)

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

-Annual loaded cost per person ($)

-Efficiency improvement (%)

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

-Annual loaded cost per person ($)

-Efficiency improvement (%)

-Annual non-labor costs ($)

-Reduction in non-labor costs (%)

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

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

-Working hours per day per person

-Annual loaded cost per person ($)

-Number of people affected

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

-Reduction in stationery spend (%)

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

-Percentage cost reduction (%)

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

-Reduction in overrun costs (%)

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

-Current annual value per person ($)

-Improvement in effectiveness (%)

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

-Proportion of spend avoided (%)

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

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

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

-Reduction (%)

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

-Number of cases avoided per year

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

-Reduction (%)

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

-Reduction (%)

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

-Reduction in marketing spend (%)

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

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

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

Retail and Consumer Goods benefits

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

-Percentage increase in revenue (%)

-Gross margin (%)

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

-Current average value per transaction ($)

-Increase in value (%)

-Gross margin (%)

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

-Gross margin (%)

-Current value of inventory ($)

-Revised weeks of supply

-Annual interest cost (%)

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

-Gross margin (%)

-Current shrinkage (%)

-Revised shrinkage (%)

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

-Average revenue generated by campaign ($)

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

-Gross margin (%)

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

-Annual value of mark downs ($)

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

-Margin on marked down sales (%)

-Average gross margin (%)

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

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

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

-Annual value of mark ups ($)

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

-Margin on marked up sales (%)

-Average gross margin (%)

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

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

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

-Sales space (sq m)

-Increase post implementation (%)

-Gross margin (%)

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

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

Reduce Inventory Holding -Current value of inventory ($)

-Percentage reduction in inventory holding (%)

-Annual interest cost (%)

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

-Percentage of procurement that is uncontrolled (%)

-Uncontrolled percentage in D365 (%)

-Percentage by which controlled buying is cheaper (%)

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

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

Better Procurement Margins Current annual procurement value ($)

-Price improvement (%)

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

-Reduction (%)

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

-Reduction in spend (%)

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

-Reduction (%)

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

-Average revenue per customer per month ($)

-Increase in revenue (%)

-Gross margin (%)

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

-Average lead time (calendar days)

-Revised lead time (calendar days)

-Annual interest cost (%)

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

-Current number of customers

-Current number of customers acquired per year

-Annual percentage improvement (%)

-Gross margin (%)

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

Customer relationship management benefits

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

-Percentage increase in revenue (%)

-Gross margin (%)

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

-Percentage improvement from D365 (%)

-Gross margin (%)

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

-Annual number of orders

-Increase in order value with D365 (%)

-Gross margin (%)

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

-Current number of customers

-Current annual retention rate (%)

-Target annual retention rate (%)

-Gross margin (%)

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

-Current cost of acquisition ($)

-New cost of acquisition with D365 ($)

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

-Estimated conversion rate (%)

-Average annual revenue per customer ($)

-Gross margin (%)

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

-Average bid size ($)

-Current bid success rate (%)

-Revised bid success rate (%)

-Gross margin (%)

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

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

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

-Average cost for self-service ($)

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

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

Business Intelligence benefits

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

-Average revenue generated by campaign ($)

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

-Gross margin (%)

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

-Annual loaded cost per person ($)

-Analytics efficiency improvement (%)

-Annual non-labor analytics costs ($)

-Reduction in non-labor costs (%)

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

-Average time taken per deployment (working days)

-Annual loaded cost per person ($)

-Reduction in deployment time (%)

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

-Reduction in non-labor costs (%)

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

-Annual loaded cost per person ($)

-Reporting efficiency improvement with D365 (%)

-Annual non-labor reporting costs ($)

-Reduction in non-labor costs (%)

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

-Annual loaded cost per person ($)

-Data quality efficiency improvement (%)

-Annual non-labor data quality costs ($)

-Reduction in non-labor costs (%)

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

-Percentage reduction in spend (%)

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

-Annual loaded cost per person ($)

-Improvement in legacy system access (%)

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

-Reduction in non-labor costs (%)

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

-Current rate of fraud detection (%)

-Rate of detection with D365 (%)

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

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

-Revised average age of claims (months)

-Annual interest cost (%)

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

-Revised annual loaded cost per person ($)

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

-Efficiency improvement (%)

-Annual loaded cost per person ($)

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

-Percentage reduction with improved forecasting (%)

-Annual interest cost (%)

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

-Reduction in capital requirements with D365 (%)

-Annual interest cost (%)

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

-Current gross margin (%)

-Revised gross margin (%)

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

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

-Revised time (calendar days)

-Additional permanent avoidable monthly losses ($)

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

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

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

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

-Annual cost to serve standard customer ($)

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

-Total FTE time to manage an escalation (hours)

-Annual loaded cost per person ($)

-Other non-labor costs per escalation ($)

-Reduction in escalations (%)

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

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

-Annual loaded cost per person ($)

-% premium paid for temporary staff (%)

-Percentage of time when temporary staff required (%)

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

IS/IT related benefits

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

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

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

-Cost of implementation of the new technology ($)

-How long until refresh due (months)

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

-Revised annual support spend ($)

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

-Proportion of support spend saved (%)

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

-Assets not re-purchased annually (%)

-People required to manage assets

-Annual loaded cost per person ($)

-Management effort reduction (%)

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

-Number of days worked per year per contractor

-Daily rate per completed working day ($)

-Reduction with D365 (%)

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

-Average time spent per call (minutes)

-Annual loaded cost per person ($)

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

-Percentage reduction in calls (%)

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

-Cost per trouble ticket ($)

-Reduction in trouble tickets (%)

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

-Waiting time per user (minutes per day)

-Annual loaded cost per person ($)

-Percentage waiting time saved (%)

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

-Efficiency improvement (%)

-Annual average loaded cost per person ($)

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

-Current uptime (or SLA) (%)

-Revised uptime (or SLA) (%)

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

-Downtime cost per hour ($)

-Reduction in downtime (%)

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

-Proportion saved/avoided with D365 (%)

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

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

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

-Current datacenter power usage effectiveness (PUE)

-Alternative datacenter PUE

-Cost per kWh ($)

-Carbon cost per ton ($)

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

-Present consumption (kWh per month)

-Percentage saving (%)

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

-Current time taken for each deployment (hours)

-Annual loaded cost per person ($)

-Revised time taken for each deployment (hours)

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

-Current time taken for each deployment (hours)

-Annual loaded cost per person ($)

-Revised time taken for each deployment (hours)

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

-Reduction in development costs (%)

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

-Reduction in internal application integration spend (%)

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

-Reduction in outsourced application integration spend (%)

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

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

-Annual loaded cost per person ($)

-Time saving (%)

-Annual non-labor DR costs ($)

-Reduction in non-labor costs (%)

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

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

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

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

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

Enjoy and god luck studying.

Configure Dynamics 365 Commerce Headquarters (25-30%)

Configure prerequisites and commerce parameters

Create employee and customer address books

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

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

Configure and manage retail workers

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

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

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

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

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

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

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

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

Here are some additional blogs on the subject.

Assign address books to customers, channels, and workers

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

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

Create email templates and email notification profiles

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

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

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

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

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

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

Configure organizational hierarchies and hierarchy purposes

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

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

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

Configure Commerce shared parameters

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

Configure company-specific Commerce parameters

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

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

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

Describe and configure additional functionality

Create and configure channel and sales order attributes

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

Then we create an attribute based on this attribute type.

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

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

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

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

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

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

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

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

Configure commissions and sales representatives

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

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

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

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

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

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

Configure payment methods and card types

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

Your start with defining the card types:

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

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

Configure payment methods and card types

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

Configure and manage gift cards

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

Configure and manage gift cards

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

The gift card is a number, balance

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

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

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

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

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

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

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

Then I can pickup this order in my CPOS:

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

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

Configure data distribution

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

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

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

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

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

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

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

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

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

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

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

Manage statements

Describe advantages of using trickle feed-based posting

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

See also the following blog-post.

Validate retail transactions by using the transaction consistency checker

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

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

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

Configure and manage retail statement calculations and posting

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

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

Troubleshoot statement posting issues

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

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

Configure Distributed Order Management (DOM)

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

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

Configure fulfillment profiles

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

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

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

Configure cost components including shipping, handling, and packaging costs

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

And I can add this to the fulfillment profile.

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

Configure management rules and parameters

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

Monitor fulfillment plans and order exceptions

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

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

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

Configure order fulfillment

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

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

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

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

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

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

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

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

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

Configure curbside customer order pickup

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

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

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

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

Configure charge codes, charge groups, and automatic charges

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

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

Configure and assign order fulfillment groups

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

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

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

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

Configure products and merchandising

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

Configure product category hierarchies

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

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

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

Configure product attributes and attribute groups

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

POS:

eCommerce:

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

Configure assortments and product catalogs

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

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

The following capabilities are planned as part of future releases:

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

Manage product labels and shelf labels

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

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

Product recommendations are available the following scenarios:

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

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

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

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

These curated lists can be added to eCommerce or POS :

Similar looks, and Shop similar descriptions recommendations

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

Configure recommendations

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

Configure warranty settings

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

Configure inventory buffers and inventory levels

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

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

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

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

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

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

Configure products and variants including configuring barcodes

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

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

Manage pricing

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

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

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

Design and create price groups

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

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

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

Configure pricing priorities

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

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

Configure product pricing including smart rounding

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

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

Configure catalog pricing

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

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

And if you click on the price list, you get the prices per product.

PS!  If you do this from the store channel (same feature) you can generate a nice excel based pricelist that is made available in the print archive.(at least in my 10.0.21 box)

Configure affiliation pricing

The definition of an affiliation is a link to or association with a group. In Commerce, affiliations are groups of customers. Affiliations are a much more flexible tool for customer pricing and discounts than the core concept of customer groups and discount groups. First, an affiliation can be used for both prices and discounts, whereas non-retail pricing has a different group for each type of discount and price. Next, a customer can belong to multiple affiliations but can belong to only one non-retail pricing group of each type. Finally, although affiliations can be set up so that they are linked to a customer, they don’t have to be. An ad-hoc affiliation can be used for anonymous customers at the POS. A typical example of an anonymous affiliation discount is a senior or student discount, where a customer can receive a discount just by showing a group membership card.

Although affiliations are most often associated with discounts, you can also use them to set differential pricing. For example, when a retailer sells to an employee, it might want to change the selling price instead of applying a discount on top of the regular price. As another example, a retailer that sells to both consumer customers and business customers might offer business customers better prices, based on their purchasing volume. Affiliations enable both these scenarios.

Affiliations is just a list, and can be connected to price groups

On the customer, you can add multiple affiliations to this customer.

If you want to apply customer-specific prices, we recommend that you not set price groups directly on the customer. Instead, you should use affiliations.

Configure category pricing rules

The category price rules feature in Commerce gives you an easy way to create new trade agreements for all the products in a category. This feature also lets you automatically find existing trade agreements for the products in the category and expire them.

It creates trade agreement journal lines that can be posted.

Manage discounts and promotions

There are many types of discounts:

  • Simple discount – A single percentage or amount.
  • Quantity discount – A discount that is applied when two or more products are purchased.
  • Mix and match discount – A discount that is applied when a specific combination of products is purchased.
  • Threshold discount – A discount that is applied when the transaction total is more than a specified amount.
  • Tender-based discount – A discount that is applied when the transaction total is more than a specified amount and a specific payment type (for example, cash, credit, or debit card) is used for payment.
  • Shipping discount – A discount that is applied when the transaction total is more than a specified amount and a specific mode of delivery (for example, two day shipping or overnight shipping) is used on the order.

When you set up a price adjustment or a discount, be sure to confirm that price groups are assigned to the correct channels, catalogs, affiliations, or loyalty programs that you want the discount to apply to.

Configure discount parameters

Calculating prices and discounts can be extremely heavy from a computational aspect.  Especially if you have many items in a sales basket and many promotions and discounts.  The following parameters allows for the right setting to you needs.

Microsoft have also hade the following flow schema available that explains some of the complexity involved to the sales basket pricing happening in CRT.

Configure channel or customer-specific discounts

Channel and customer specific prices are defined with price group.  At mentioned earlier I recommend using affiliation to create customer specific discounts, and then apply the affiliation to the respective price groups.

Configure quantity, shipping, tender-based, and threshold-based discounts

Quantity discounts

A quantity discount is a discount that is given to customers when they purchase a particular quantity of a product. For example, you can set up a 5 percent discount for the purchase of two products of a particular category or brand.

Buy 5 items get 20%, Buy 10 items get 40%

Shipping discounts

Free or discounted shipping is one of the highly influencing factors driving the customers’ online purchase decisions. Many retailers also leverage the free shipping benefit to motivate the customers to increase their basket size, thus increasing the revenue per transaction. With the 10.0 release of Retail, retailers can use “Retail shipping threshold discount” to define the thresholds, which once met, will qualify the customers for discounted or free shipping. For example, spend $50 or more to get free ‘Overnight shipping’ or sign up for the loyalty program and get free ‘Two-day shipping’.

This feature leverages the advanced auto charges capability that was available in the call center and e-Commerce modules but has now been made available in POS.

Unlike product discounts, the shipping discount does not create discount lines. Instead, the shipping discount edits the shipping charge directly and appends the name of the discount to the charge description.

Configure discount concurrency rules

When you have multiple discounts, pricing algorithm loops through the discounts across various priorities. The discount concurrency control model setting affects how all discounts compete and compound together.

On a discount you will find the discount concurrency mode.

When the value is Exclusive or Best price, only one discount can be applied to a transaction line. The only difference between Exclusive and Best price is the order that the discounts are considered and applied in. Exclusive discounts are always evaluated and applied before Best price and Compound discounts, if all other settings are the same. Therefore, Exclusive and Best price discount never compete for the best price. Two or more Exclusive discounts will compete for the best price, as will two or more Best price discounts.

When the value is Compound, the discount can be compounded with any other discount that is also set to Compound. Therefore, two or more Compound discounts will all be applied to a transaction line. When multiple Compound discounts are applied to a transaction line, they are applied in the following order:

  • Discount price discounts
  • Amount-off discounts
  • Percentage-off discounts

Compound discounts compete with Best price discounts when both types apply to a transaction line. Therefore, the Compound setting is used to determine which discounts are combined. Depending on the discount concurrency control mode used, two or more Compound discounts can be combined and compete with the Best price discounts that apply to the same products. The discount or discounts that have the largest total discount amount are applied.

Manage coupons

Coupons are codes and bar codes that are used to add discounts to transactions. Each coupon can have multiple codes, and each code can have its own effective dates. Each coupon is related to one discount. The price groups that are associated with the discount define the customers that can use a coupon or the channels where a coupon is valid.

In the following example I have a coupon number, that give 20% discount.  Each coupon may have multiple coupon code id’s to ensure that they are only used once.  I have also created a code-39 barcode that will trigger the coupon in the POS, and I may distribute coupon code to customers as a QR-code if needed.

Manage customers, loyalty, and affiliations

The documentation in the link above is quite updated and to the point, and covers how customers are handled from a commerce perspective.  Customers can be created in D365 HQ, POS and in the eCommerce solution.   What is important to also consider is that customers are one of the area where there are a good Dynamics 365 sales synchronization though the DataVerse, enabling a very good understanding of customers through Dynamics 365 Customer insights.

Configure client books

Building a long-term relationship with your customers can ensure long-lasting loyalty. If you know what the customers preferences, purchase history and other relevant information it is easier to target activities and promotions towards the right buying customers.  Client books is a customer card that where the preferences and activity log of the customer is shown.   Through the client book, each sales associate can have a list of “their” customers that they follow up.  This is most relevant for scenario’s where you have specialty retailing and close customer relationship. 

Clicking on the client card, opens the customer card, where timeline, recent purchases etc are available.

Configure customer attributes

The client book includes customer cards that show contact information for each customer, together with three more properties that are defined by the retailer and configured in Headquarters.

Configure customer affiliations

Customer affiliation have been discussed earlier in this document.  See Configure affiliation pricing.

Configure loyalty programs, loyalty schemes, and reward points

The documentation on this is quite detailed, but the main process of setting up loyalty can be presented like this flow. What is very nice, is that the loyalty features are a true omni-channel and is working on all channels. One aspect is that loyalty card, levels and points can be integrated with D365 Customer Service.

Manage loyalty tier calculations and processing

The calculation of loyalty tier can be processed in a set of batch-jobs.

Manage Point of Sale (POS) in Dynamics 365 Commerce (15-20%)

Configure retail stores

Create a retail store

A retail store requires a one-to-one (1:1) relationship with a warehouse and operating unit. The warehouse must be configured before the store is created. The operating unit is created automatically when the store record is created. If you have specific requirement on what the retail channel ID and operating unit number should be, then you have the option to set the number sequences to manual, and then manually create them.

Each store has some important store configurations to consider:

  • Legal entity – The legal entity where the store’s transactions will post.
  • Time zone – The time zone in which the store operates.
  • Language – The language that is used for the store data.
  • Currency – The default currency for the store.
  • Warehouse – The warehouse that is used for the store inventory. The POS can only sell out of a single warehouse location.
  • Functionality profile – Contains configurations for how the registers should operate.
  • Profile configurations – Configurations that are used to define technical architecture details, such as retail server and Cloud POS URLs, offline database schema, and more.
  • Sales tax configurations – A grouping of configurations that is used to determine sales tax configurations, such as the store’s tax group, and whether the store should use destination or customer-based taxes.
  • Default customer ID – Assigned for transactions where no customers are specified. All transactions will be aggregated in a sales order by using this default customer ID.
  • Screen layout ID – The default screen layout ID that is used for all registers and users, unless it is overridden.
  • Post as business day – Offsets the end-of-day time. For example, a store might close after midnight and wants transactions that happen until 2:00 AM to be posted as the previous day’s sales.

Configure POS registers and devices

Commerce supports two types of POS deployments:

  • Modern POS (MPOS) – Locally installed deployment on a Windows OS, iOS, or Android device and supports offline mode.
  • Cloud POS (CPOS) – A web application with nothing installed locally.

Microsoft is now also working on a third option called Store commerce that provides the benefits of both Modern Point of Sale (MPOS) and Cloud Point of Sale (CPOS).  Benefits of Store Commerce

  • Simplified Application lifecycle management (ALM) using Microsoft Store.
  • Extension or ISV code developed for MPOS or CPOS can be reused in Store Commerce.
  • Store Commerce provides the benefits of both MPOS and CPOS.
  • Better performance with the use of  Microsoft Edge WebView2
  • Easier POS and extension upgrades.
  • Support for dedicated hardware station (HWS).
  • Support for offline, in the future.

Registers contains the information of profiles etc.

The device contains information on the activation.

Configure retail profiles

Functionality profile differs from register and device configurations in that it specifies functionalities that aren’t tied to hardware or devices. In most cases, both devices can and should operate in the same way for a consistent experience for customers and employees across the entire store. The functionality profiles are defined at the store level, and you assign the profile to the store.

A visual profile will define the overall branding and theme for a register. For example, the sign-in background for a large monitor would require a different sign-in or lock screen than a phone or tablet would require. The theme might also be important. If it’s a customer-facing monitor, it might require more branding than one that is employee-facing only. The visual profile can help account for these requirements.

A receipt profile is a group of form layouts that can be assigned to point of sale (POS) printers via a hardware profile. A receipt profile provides a set of receipt templates for the printers at your registers. After you set up the receipt profiles, you must assign them to the hardware profile, so that the POS register can print the receipts.

The hardware profile is where you define the peripherals as printers, scanners etc.

Screen layout define different setup on how the POS screen should look like with buttons and different layouts based on screen sizes.  In the following example I have 2 layouts;  One for using POS as a mobile device, and one with larger screen.

Configure sales tax overrides

Sales tax groups can be used to override taxes for specific items that belong to the group. For example, food items are typically taxed differently from hard goods, and would likely have their own sales tax group. Sales tax groups are groups of taxes that are applicable to a particular channel. For example, if a channel sells both retail and business-to-business, different items sales tax groups may be used. All the applicable taxes would be mapped to the sales tax group.

Tax overrides will can be seen in POS as override buttons, and in this example I’m choosing if there is a high or medium tax on the line.

For tax in general related to D365 commerce, I recommend the following documentation.

Configure Task Management lists and parameters

In a retail environment, it’s always difficult to make sure that tasks are performed by the right person at the right time. Retailers must be able to notify workers about upcoming tasks and provide related business context, so that the tasks can be completed correctly and on time.

Task management is a productivity feature in Dynamics 365 Commerce that lets managers and workers create task lists, manage assignment criteria, track task status, and integrate these operations between Commerce back office and point of sale (POS) applications.

In D365 you will find the following menues:

The task management process allows you to see all active tasks, in this case a holiday season preparation wanted to be done in all stores.

And you can define additional tasks in the administration:

In the POS, the tasks will appear like this.

Define cash management processes

Cash management from a physical store perspective covers complete traceability and accountability of cash and its movement across the different registers and cashiers in a store. They must be able to reconcile any differences and determine accountability.  On the functionality profile you will find 2 settings that is managing this:

By enabling cash traceability, introduces the Safe entity and you will have safe transactions where you can reconcile and approve cash management transactions.  If there are exceptions you can tag the transaction with a reason code.

Cash reconciliation is always for a ‘Shift’. It is not for a Terminal / Register / Safe. With ‘shared shift’, a shift can be across multiple Registers. The Safe entity can be managed with a regular register or it can also be managed with a dedicated register.

‘Cash traceability’ feature by itself has not introduced any new GL postings and as such – like all safe transactions to post to the general ledger when money moves in or out of the safe – are not supported. Please do keep in mind that this parameter only supports GL postings for Safe drop transaction. Statement posting is the only way to get financial transactions for retail transactions created/posted in the store

The flow of cash can happen between the Safe  to Register and then back from Register to the Safe  With that:

1. At the end of any given day or shift, with Tender declaration we are closing the Register and before that the cashier performs the Safe drop operation which takes the cash from the Register and moves it to the Safe .This transaction does create a GL entry which increases the balance in the GL account linked to the Safe drop transaction. It may be common to have some money in Safe which they use every day to move to Register – e.g. from Safe to Register operation is happening every morning and not move money from Safe to Bank every day. This is like money circulating inside the store. And this move is not posted to GL. Posting entries to GL only happen with the use of Bank drop operation.

2. When the balance in the Safe (Shift) goes above a particular limit by which it is no longer a good practice to keep that much cash in the Safe, retailers typically transfers the cash from the safe to the bank and in the system they perform a Bank drop operation for the same. This also creates a GL posting where in the balance in the GL account linked to the Safe is reduced and the balance in the GL account linked to the Bank is increased. (essentially cash is deposited in the bank account).

The following steps are an example of how this works, and by having a exclusive shift for safe management:

To reconcile the cash transactions within a shift or across shifts, select the shift to reconcile, and then select Reconcile.

The view that is opened shows the list of reconciled and unreconciled transactions on separate tabs. From this view, users can either select unreconciled transactions and reconcile them, or select previously reconciled transactions and unreconcile them.

During reconciliation, if the selected transaction doesn’t balance, the user must enter a description of the reason for the unbalanced reconciliation. Users can select a single transaction and reconcile it with the relevant reason description as they require.

Users can continue to reconcile and unreconcile transactions until the shift is closed. After a shift is closed, the transactions can’t be unreconciled.

When a user chooses to close a shift, Commerce validates that there are no unreconciled cash management transactions in the shift. Users can’t close a shift if there are unreconciled transactions.

For safes that are defined in a store, users can manage operations such as declaring the start amount, doing a float entry, doing a tender removal, and making a bank drop.

Define shifts and shift management processes

The term shift describes the collection of POS transactional data and activities between two points in time. For each shift, the amount of money that is expected is compared against the amount that was counted and declared.

Typically, shifts are opened at the start of the business day. At that point, a user declares the starting amount that the cash drawer contains. Sales transactions are then performed throughout the day. Finally, at the end of the day, the drawer is counted, and the closing amounts are declared. The shift is closed, and a Z report is generated. The Z report indicates whether there is an overage or shortage.

In the posted statements form you have the record of the statement, declarations, transactions.

You can also print out the statement and use for booking if you have a manual external financial booking system (And I hope you don’t have this!)

Configure channel return policies

The channel return policy enables retailers to set enforcements on which payment tenders can be allowed for processing a return on a point of sale (POS) device. The scope of the policy is currently limited to setting the payment tenders that can be allowed for a channel. The “allowed” list is based on the payment methods used to make the purchase. For example:

  • If a purchase was made using a gift card, the store policy is to process refunds only to a new gift card or to give store credit.
  • If a sale is made using cash, the options allowed for refund are cash, gift card, and customer account, but not credit card.

Describe offline capabilities and limitations

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

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

To be more precise, here are the operations that is NOT available in offline scenarios:

IDOperationDescription
707Activate deviceActivate the current device by allowing an authenticated user to provide connection information and assign a device and register ID.
134Add affiliationAdd a preselected affiliation to a transaction. Select the affiliation on the Button properties page.
135Add affiliation from listAdd an affiliation to a transaction by selecting it in a list.
137Add affiliation to customerAdd an affiliation to a customer on the Customer details page.
138Remove affiliation from customerRemove an affiliation on the Customer details page.
643Add coupon codeAdd a coupon by entering its code in the POS.
141Add header chargesAdd a misc charge to the order header.
141Add line chargesAdd a misc charge to a selected sales line.
117Add loyalty cardPrompt the user to enter a loyalty card number that will be added to the current transaction.
136Add serial numberThis operation lets the user specify a serial number for the currently selected product.
1214Add shipping addressThis operation isn’t supported.
519Add to gift cardAdd money to the specified gift card.
6000Allow skip fiscal registrationThis operation isn’t supported.
1212Bank dropRecord the amount of money that is sent to the bank and other information, such as the number of the bank bag.
923Bank totals verificationThis operation isn’t supported.
915Blank operationThis operation represents a customizable button that a software developer can programmatically change for any specialized operation that the business requires.
1053Blind close shiftSet the current shift to blind closed, and sign the user out. A blind-closed shift is closed to additional transactions but is still open to drawer operations, such as tender removal and tender declaration.
310Calculate totalWhen discount calculation is delayed, this operation initiates the calculation for the current transaction.
642Carry Out All ProductsSet the mode of delivery for all lines to Carryout.
641Carry Out Selected ProductsSet the mode of delivery for the selected lines to Carryout.
647Change mode of deliveryChange mode of delivery for preconfigured shipping sales lines.
1215Change passwordThis operation lets the POS user change their password.
123Change unit of measureChange the unit of measure for the selected line item.
639Clear default sales representative on transactionRemove the commission sales group (sales rep) from the transaction.
106Clear quantityReset the quantity on the currently selected line to 1.
640Clear sales representative on lineRemove the commission sales group (sale rep) from the currently selected line.
121Clear salespersonThis operation isn’t supported.
1055Close shiftClose the current shift, print a Z report, and sign the user out of the system.
139Conclude transactionPrompts user to select payment method
620Create customer orderConvert the POS transaction to a customer order.
925Copy the bank checkThis operation isn’t supported.
620Create customer orderConvert the POS transaction to a customer order.
621Create quotationConvert the POS transaction to a sales quotation.
636Create retail transactionThis operation lets the user create a standard sales transaction when the default POS behavior is to create customer orders.
600CustomerAdd the specified customer to the transaction.
1100Customer account depositMake a payment to a customer’s account.
612Customer addThis operation lets the user create a new customer record.
603Customer clearRemove the customer from the current transaction.
602Customer searchThis operation lets the user search for a customer record by navigating to the customer search page in the POS.
609Customer transactionsThis operation isn’t supported.
917Database connection statusThis operation lets the user view the current connection settings, and switch between online and offline modes.
1200Declare start amountDeclare the amount that is in the cash drawer when the day or shift starts.
132Deposit overrideOverride the default deposit for customer orders.
913Design mode disableThis operation isn’t supported.
912Design mode enableThis operation isn’t supported.
1217Disassemble kitsDisassemble a kit into its component products.
624Display refund amountsThis operation isn’t supported.
513Display totalShow the balance of the transaction on the customer display.
623Edit customerEdit the current customer’s details.
614Edit customer orderRecall the selected order so that it can be modified in the POS.
615Edit quotationRecall the selected quotation so that it can be modified in the POS.
518Expense accountsRecord money that is removed from the cash drawer for occasional expenses.
919Extended log onAssign or remove permission to sign in by scanning a bar code or swiping a card.
1201Float entryThis operation lets the user add additional money to the current drawer or shift.
1218Force unlock peripheralThe system uses this operation internally to unlock POS peripherals.
520Gift card balanceShow the balance of a gift card.
708Inactivate deviceInactivate the current device, so that it can’t be used as a POS register.
804Inbound operationAccess the features of inbound store inventory management.
517Income accountsRecord money that is put into the cash drawer for a reason other than a sale.
801Inventory lookupLook up available, on order, and available-to-promise (ATP) quantities for the current store and other available locations.
122Invoice commentThis operation lets the user enter a comment about the current transaction.
511Issue credit memoIssue a credit memo to provide a voucher instead of a refund.
512Issue gift cardIssue a new gift card for the specified amount.
625Issue loyalty cardIssue a loyalty card to a customer, so that the customer can participate in the store’s loyalty program.
300Line discount amountEnter a discount amount for a line item in the transaction. This operation is used only for discountable items and only within specified discount limits.
301Line discount percentEnter a discount percentage for a line item in the transaction. This operation is used only for discountable items and only within specified discount limits.
703Lock registerLock the current register, so that it can’t be used, but don’t sign the current user out.
701Log offSign the current user out of the register.
521Loyalty card points balanceShow the balance of points for the specified loyalty card.
142Manage chargesView and manage misc charges applied to transaction.
918Manage shiftsShow a list of active, suspended, and blind closed shifts.
914Minimize POS windowThis operation isn’t supported.
1000Open drawerPerform a “no sale” operation, and open the currently selected cash drawer.
928Order fulfillmentThis operation allows users to pick, pack, ship, or recall orders for store picked up.
805Outbound operationAccess features for managing shipments of outbound transfer orders.
129Override line product taxOverride the tax on the selected line item, and use a different specified tax.
130Override line product tax from listOverride the tax on the selected line item, and use the tax that the user selects in a list.
127Override transaction taxOverride the tax on the transaction, and use a different specified tax.
128Override transaction tax from listOverride the tax on the transaction, and use the tax that the user selects in a list.
131Packing slipCreate a packing slip for the selected order.
710Pair hardware stationThis operation isn’t supported.
201Pay cardAccept a card such as a credit card or a debit card as payment.
200Pay cashAccept cash as payment.
206Pay cash quickComplete the transaction in one touch, and accept the amount that is due in cash (exact change).
204Pay checkAccept a check as payment.
213Pay credit memoAccept a credit memo (voucher) that the store issued.
203Pay currencyAccept payment in various currencies.
202Pay customer accountCharge the transaction to the customer’s account. This payment method isn’t valid for customer order deposits.
214Pay gift cardAccept a gift card that the store issued.
207Pay loyaltyAccept a loyalty card for payment, and redeem points toward qualified products.
634Payments historyShow the customer’s payment history for the current customer order.
803Picking and receivingOpen the Picking and receiving page, where you can select orders to pick or receive in the store.
632Pickup all productsSet the fulfillment method to Store pickup for all lines.
631Pickup selected productsSet the fulfillment method to Store pickup for selected lines.
400Popup menuThis operation isn’t supported.
101Price checkThis operation lets the user look up the price for a specified product.
104Price overrideOverride the price of a product, if the product has been set up to allow for price overrides.
1058Print fiscal XThis operation isn’t supported.
1059Print fiscal ZThis operation isn’t supported.
927Print item labelThis operation isn’t supported.
926Print shelf labelThis operation isn’t supported.
1056Print XPrint and X report for the current shift.
103Product commentAdd a comment to the selected line item in the transaction.
100Product saleAdd a specified product to the transaction.
108Product searchThis operation lets the user search for a product by navigating to the product search page in the POS.
633Quote expiration dateThis operation lets the user view or modify the expiration date on a sales quotation.
627RecalculateRecalculate all customer order lines and taxes, based on the current configuration.
143Recalculate chargesRecalculate the auto-charges applied to the order.
515Recall orderThis operation lets the user search for and recall customer orders and sales quotations.
504Recall transactionThis operation lets the user recall a previously suspended transaction from the current store.
305Redeem loyalty pointsThis operation isn’t supported.
635Refund shipping chargesThis operation lets the user refund shipping charges on a canceled order.
644Remove coupon codePrompt the user to remove coupons by selecting them in a list of coupons that are currently associated with the transaction.
1057Reprint ZReprint the Z report for the previous shift or a selected shift.
1216Reset passwordThis operation lets a user who has the password-reset permission reset another employee’s password by using a temporary password.
1219Open URL in POSThis operation lets a user to open an admin configured URL in POS.
109Return productPerform a return of individual products. The next scanned product is shown as a returned product that has a negative quantity and price.
114Return transactionRecall a previous transaction by its receipt number to return some or all of the products.
1211Safe dropPerform a safe drop to move money from the register to a safe.
516Sales invoiceThis operation lets the customer make payments toward the selected sales invoice.
502SalespersonThis operation lets the user set the Sales taker value on a sales order for customer orders in the POS.
2000Schedule managementThis operation is not yet supported.
2001Schedule requestsThis operation is not yet supported.
622SearchThis operation lets users preconfigure POS buttons to perform searches by item, customer, or category.
1213Search shipping addressThis operation isn’t supported.
709Select hardware stationThis operation lets the user select a hardware station in a list of available hardware stations.
637Set default sales representative on transactionThis operation lets the user select one of the eligible commission sales groups (sale reps) as the default sales rep for lines that are added later.
105Set quantityChange the quantity of a line item in the transaction.
638Set sales representative on lineThis operation lets the user select one of the eligible commission sales groups (sale reps) for the currently selected line.
630Ship all productsSet the fulfillment mode to Shipping for all line items.
629Ship selected productsSet the fulfillment mode to Shipping for the selected lines.
115Show journalShow the store’s journal. You can view transactions, reprint receipts and gift receipts, and recall for return.
802Stock countThis operation lets the user create or modify stock counting journals for physical inventory or cycle counts.
401Sub menuThis operation takes the user to another linked button grid.
1054Suspend shiftSuspend the current shift, so that a new or different shift can be activated on the current register.
503Suspend transactionSuspend the current sales transaction, so that it can be recalled later in the store.
1004Task recorderOpen Task recorder to record procedural steps in the POS.
1052Tender declarationThis operation lets the user specify the amount of money in the drawer for each counted payment method.
1210Tender removalThis operation lets the user remove money from the current drawer or shift.
920Time clockThis operation lets users punch in and punch out of work shifts and breaks.
302Total discount amountEnter a discount amount for the transaction. This operation applies only to discountable items and only within specified discount limits.
303Total discount percentEnter a discount percentage for the transaction. This operation applies only to discountable items and only within specified discount limits.
501Transaction commentAdd a comment to the current transaction.
922View product detailsOpen the product details page for the currently selected line item.
1003View reportsShow the reports that have been configured for the current user.
921View time clock entriesShow the time clock entries for all workers at the store.
211Void paymentVoid the currently selected payment line from the transaction.
102Void productVoid the currently selected line item from the transaction.
500Void transactionVoid the current transaction.
916Windows workflow foundationThis operation isn’t supported.
924X report for bank cardsThis operation isn’t supported.
311Remove system discounts from transactionsRemove all the system applied discounts, including coupon based discounts, from the transaction. This does not remove manual discounts.
312Reapply system discountsReapply system discounts on the transaction if they were removed using the Remove system discounts from transaction operation.

Manage store inventory

The POS provides functionality to manage store inventory, including store inventory replenishment capabilities, inbound and outbound store inventory operations, store stock counts, and store inventory lookup capabilities. The following Microsoft learn course gives a good overview, and touches on cross docking, buyer’s purch, Receive store inventory from POS and other inbound operations.

I really like the simplicity process of requesting goods from central warehouse or from other store.  It’s fast and easy to use.  The following screen shows how it looks when requesting goods from another store.  Scan barcode and specify quantity.

Configure availability calculations for products

It is important to understand that in a commerce architecture you have both the HQ database and the channel database.  This is done for performance and latency reasons, and data is often synchronized back and forth in an asynchrony way.  This can affect how the on-hand and availability calculations are being handled. Channel-side inventory calculation is a mechanism that takes the last-known channel inventory data in Commerce headquarters as a baseline, and then factors in additional inventory changes that occurred on the channel side that aren’t included in that baseline to calculate a near-real-time estimated on-hand inventory. The following post is important to understand and how to use the presented on-hand calculations.  If you are using product variations, like color and size , the onhand can be presented as a grid in POS.

When clicking on a variant or For pure SKU based products without variants,  you will see the inventory on other sites in the fulfillment group, and also on the central warehouse.

Manage inbound and outbound inventory operations

Store employees might want to transfer some of their store inventory out of their store and then send it to another warehouse (either a distribution center or another store). This transfer might be necessary in scenarios where the store contains overstock that another location can use. Store employees can initiate this process by first creating the transfer order through the Outbound inventory operation in POS.

Process customer pick-up and shipment orders

Customer orders can be used to capture sales where shoppers want to pick up products on a later date, pick up products from a different location, or have items shipped to them.  I recommend to read the following docs.  An important element if you want to demonstrate the process of a customer going into the store, buying some products(with cash) and then want them sent home is to follow the following process.  Pay especially attention to the red line, as this is the process when you want to demo with the order capture and the fulfillment/shipment of the order from the same POS.

  1. On the POS transaction screen, add a customer to the transaction.
  2. Add products to the cart.
  3. Select Ship selected or Ship all to ship the products to an address on the customer account.
  4. Select the option to create a customer order.
  5. Confirm or change the “ship from” location, confirm or change the shipping address, and select a shipping method.
  6. Enter the customer’s desired order shipment date.
  7. Use the payment functions to pay for any calculated amounts that are due, or use the Deposit override operation to change the amounts that are due, and then apply payment.
  8. If the full order total wasn’t paid, enter a credit card that will be captured for the balance that is due on the order when it’s invoiced.

This allows you to get through the process of picking, packing and shipping directly from the POS.

What I can think of here, is that it would be great to have extensions for printing delivery labels and even ensure that ASN is being sent to the freight forwarder.  Let’s hope some ISV picks this up.

Manage inventory processes including stock counts

Count journals are used to update and adjust physical inventory counts for a specific item within a specific warehouse. While the Commerce inventory logic is constantly tracking inventory that comes into and out of the warehouse, situations will occur where the physical inventory count that is being tracked by the application no longer matches the physical count of inventory on the shelf. This scenario can occur for a variety of situations, such as receipt of inventory was accidentally not processed, theft or breakage or other loss was not previously adjusted, and so on.

One quite new feature is the ability to perform stock adjustments, as this allows for adjusting up/down an exact quantity.  Let’s say when something was hungry and had to eat 😊.  I can then adjust out one tyrkisk peber.

Then this becomes available as an inventory adjustment journal.

Even the notes becomes available as notes to the transaction.

Look up product inventory

I think this have been covered earlier in this blogpost.

Process serialized items

Many retailers sell products that need to be serialized. These products are called serialized items. For inventory tracking purposes, some retailers may want to keep serial numbers in store or warehouse inventory. For service and warranty purposes, other retailers may want to capture serial numbers during the sales process.

Perform POS operations

Perform sales and order processes

Cash and carry transactions are the most common POS transactions where items are scanned. A customer might, or might not, be identified on the order, and all products are paid in full. When tendering out of the transaction, a customer leaves with the products. There are also more advanced processes of creating orders from POS, and then pick it up or ship the products to the customer. The order is then created and sent to Commerce Headquarters (HQ) for processing. The creation of the customer order to HQ typically occurs through an async process between the Commerce engine and HQ. You can also configure it to be created in real time, if preferred.

Perform end of day processes

Much of the end-of-day processes are related to closing the shift (If you are using shifts).  The process often starts with performing safe and bank drops of cash.  Then you would perform a tender declaration to specify the total amount of money that is currently in the cash drawer. Users most often perform this operation before they close a shift. The specified amount is compared against the expected shift amount to calculate the overage/shortage amount.  The last ting is to close the shift. This operation calculates shift totals and overage/shortage amounts, and then finalizes an active or blind-closed shift. Depending on the user’s permissions, a Z report is also printed for the shift. Closed shifts can’t be resumed or modified.

Blind-close can be used to free up a register for a new user or shift without first having to fully count, reconcile, and close the shift, and then later reopen the shift to perform closure. 

The way that shifts and cash drawer reconciliation are used in the POS differs from the way that transaction data is summarized during statement calculation. It’s important to understand this difference. Depending on your configuration and your business processes, the shift data in the POS (the Z report) and a calculated statement in the back office can give you different results. This difference doesn’t necessarily mean that either the shift data or the calculated statement is incorrect, or that there is a problem with the data. It just means that the parameters that are provided might be including additional transaction or fewer transactions, or that the transactions have been summarized differently.

Although every retailer has different business requirements, it is recommend that you set up your system in the following way to avoid situations where differences of this type occur.  The best way to have your statements is by shifts.  Period! This setup helps guarantee that back-office statements include the same transactions as shifts in the POS, and that the data is summarized by that shift.

Reconcile store cash

This have been covered earlier

Monitor store productivity by using task management and reporting features

Task management have been discussed before in this blog, but related to the reporting capabilities in POS there are some standard reporting ask shown here:

But my general recommendation is to invest in a power bi solution.  Combined with the P-job and recurring tickle-feed feature channel transactions are being imported quite frequently.  Then use the Azure data Lake integration to feed you power BI report with updated and refreshed data. Take a small look at the following presentation I did in 2018 about how to manually structure a cube for power BI based on existing data entities.

Configure and Manage Dynamics 365 Commerce call centers (10-15%)

The first time I took the exam, I felt that the call center functionality was over represented in the questions.  SO I guess to this exam, it requires that we need to take this topic more to the depth.  Orders that are created in a call center channel can take advantage of specific Commerce capabilities such as payment processing and retail pricing and promotions. Defining a call center channel also allows the organization to define specific order processing settings and data defaults to the sales orders that were created by call center users.  Som of the features include.

  • Full payment processing capabilities (Also with credit cards)
  • Use of catalog source code IDs to track marketing efforts
  • Ability for upsell/cross-sell prompts as sales lines are created
  • Ability to create and manage subscription orders by using continuity program features
  • Use of Commerce pricing and promotion configurations

A user can be linked to only one call center channel at a time and if you don’t associate the user to a call center, it will not trigger the Commerce-related features.

Sales orders that are created in the call center are also part of all Commerce omnichannel capabilities and can be used by the point of sale (POS) application to support cross-channel order fulfillment scenarios. This feature allows a call center user to create an order that can be picked up by the customer at a store location. Additionally, a customer order that is created in the POS or e-Commerce application can be further reviewed, edited, or managed by a call center user in Commerce HQ.

Configure call centers

During the configuration of a call center, three processing options have a great impact on the features that are available for call center orders based on whether these processing options are enabled on the call center channel or not:

  • Enable order completion – enforces a set of validation rules that the order must go through before it can be successfully submitted to processing.
  • Enable direct selling – upsell and cross-sell functionality
  • Enable order price control – enables call center users to change the price of an item on a sales order if that item has been configured to allow price adjustment. A specific commerce sales line workflow must also be created in Commerce Workflows to enable the price override approval process.

Create a call center

Configuration of a call center follows much of the same steps as creating a store channel.  You have to setup delivery modes, payment methods.  One thing that differs from the traditional sales orders is the introduction of order completion that can be enabled. When the Enable order completion setting is turned on for the call center channel, if line items are entered on a sales order and the channel user tries to close or navigate away from the sales order form without first selecting Complete, the system enforces the order completion process by opening the sales order recap page and requiring that the user correctly submit the order. If the order can’t be correctly submitted together with payment, the user can use the order holds functionality to put the order on hold. If the user is trying to cancel the order, he or she must correctly cancel it by using either the Cancel function or the Delete function, depending on the function that the user’s security allows. After a call center channel has been created, users must be linked to that call center to take advantage of additional order processing features that are exclusively available for call center order processing. Here is a screenshot of the “complete” feature mixed with a script asking if the customer did now there where a discount on teddy bears now 😊

Another important aspect is the customer service form where the call center sales process often starts.  Here it is easy to have a quick overview off all customers and orders.

Configure and publish product catalogs

Product catalog have been discussed earlier in the blog post.  Personally I think that catalogs are out, and there are very few that actually still use this.  It all has changed towards online.

Create product catalog scripts

Not much to say, rather than you can assign script towards the catalog or towards the products are in the catalog.

Configure fraud conditions, rules, and variables to trigger order holds

To use the call center order hold features, you must first define hold codes. To create a set of user-defined hold codes, based on your business requirements, go to Sales and marketing > Setup > Sales orders > Order hold codes

This hold codes can then be assigned to the order.

There are settings and rules that allow for validating and checking.  Here I have created a condition to put the order on-hold, if the quantity on the sales line is above 10.

I can then add the condition to a rule:

In the call center parameters page I can then setup the score of when the order should be flagged as fraud.

When the rules starts to kick in I get the “Order is on hold” message:

I can also see all order holds and them check out if it turns out that everything is OK:

In the sales order overview I also get some visual indicators/color coding of the salesorders that is marked as suspicious or fraud:

The last thing here, is that you can also build up a static fraud data containing variables that is known to be used in call-center fraud.

Configure fraud alerts

I covered this in the previous chapter

Configure continuity orders and installment billing

In a continuity program, also known as a recurring order program, customers receive regular product shipments according to a predefined schedule. Continuity programs provide the ability to create continuity schedules that will have a scheduled shipment and payment.

Set up continuity programs and parameters

To create a continuity program you specify details such as the payment schedule, the timing of the shipments, and whether billing is up front. You must also add a list of products that are included in the continuity program. Each product receives an event ID number that is assigned sequentially, beginning with 1. The event IDs determine the order that products are sent in. If customers receive a different product in each shipment, the products are sent in sequential order, based on their event IDs and beginning with the current event. If customers receive the same product in each shipment, the list contains only one product that has one event ID. The same event occurs repeatedly. You can specify how many times each event is repeated. Create a parent product that represents the continuity program that you created. If you add this product to a sales order, the Continuity page opens. You can then use that page to create the actual continuity order. The parent product doesn’t specify the individual products that the customer receives in each shipment.

Here I have a continuity order containing two lines.

On the release product you specify the Continuity schedule ID:

When creating the sales order, the continuity form pops up, where I can make adjustments to quantity, price, dates etc

Configure continuity order batch jobs

After setting up a continuity program as described above, you can create a continuity order for a customer. You might also have to perform the following additional maintenance tasks.

  • Update the current continuity event period – Set up a batch job that tells the system what the current event period is.
  • Create continuity child orders – Create child orders from the parent continuity order.
  • Process continuity payments – Process billing and notifications for payments that are associated with continuity sales orders.
  • Extend continuity lines (if required) – Extend the number of times that a continuity event can be repeated. The repetition of shipments can then extend beyond the limit that was set in the Continuity repeat threshold field in the call center parameters.
  • Perform a continuity update (if required) – Synchronize changes between the continuity program and the continuity parent sales orders.
  • Close continuity parent lines and orders – Close continuity orders.

The end result is that child sales orders are created and will then be processed in the normal fashion.  

Manage continuity child orders

To manage continuity orders there is a form under Retail and Commerce à Inquiries and reports à Continuity orders that lists up all sales order lines that is a parent continuity line.

In the Summary tab, you will see all child continuity lines, as they are being generated.

Manage call centers

Create, modify, and process sales orders

I think this area have been covered well earlier in the blogpost.

Process call center payments

In D365 Commerce, the configuration of the call center channel includes a setting that is named Enable order completion. This setting helps guarantee that all orders that users of the channel create are released to order processing only if they have a prepaid or pre-authorized payment that is within approved tolerances. If the Enable order completion setting is turned on, call center users can enter payments against sales orders for customers by using the payment processing features of Call center. If the setting is turned off, call center users can’t use the Call center payment processing features, but they can still apply prepayments to sales orders by using standard Accounts receivable functionality.

On the call center you can specify the payment methods that can be used.  Here you can also specify that cards are allowed:

Remember also to evaluate if the electronic payment setup is to specify that expiration date and pin is required.

When I then go through the complete and payment process and add the payment method card, the following happens:

An iframe from Adyen pops up in this case(missing setup on Adyen), and you can perform a “card not present” payment flow.  Even VIPPS is available here. 

Manage order holds

During order entry, but before order submission and confirmation, call center users might want to manually put an order on hold to prevent it from being released to the warehouse for further processing. For example, the customer who is placing the order might not be ready to commit to it, or critical data that is required in order to process the order might be missing.  The older hold form and color coding have been  have discussed earlier in the post.

Create return merchandise authorizations (RMAs)

Process returns, exchanges, and replacements

When a return order is issued, the Replacement order function can be used to generate a new sales order for the customer. This approach can be used in exchange scenarios. The Replacement order function creates another sales order for the new items that must be sent, but a cross-reference link on the RMA/Return tab of the Call center parameters page links the replacement order, the RMA, and the returned sales order.

The process can be described with the following flow:

The actual return order screen looks like this.  Also check out the following docs’s page for more information:

Manage e-commerce (15-20%)

Finally we have come to the “latest and greatest” part of this very long post.  E-commerce is actually an additional SKU you have to purchase, and is not included with the traditional D365 commerce SKU.  So you have to pay extra.  There are even additional SKU that you can select, as AI/ML recommendations, Rate&Review and solutions for fraud. The following learn site also gives a good overview.  A lot of very good tech-talk video’s have been also released, and here are some links to them.  I have also made available a list of known eCommerce sites running, so you may actually try it out, and even purchase 😊

Configure an e-commerce channel

To create an online store in Commerce, you must first create an online channel. Before you create a new online channel, ensure that you have completed the Channel set up prerequisites. Apart from what already have been discussed on other channels, you need to setup the online functionality profile.

Create an online store

To configure a functioning online store, you need to set up multiple components so that transactions can be successfully processed for that online store. When you have configured the online store and its components, you can link the channel to one or multiple Commerce sites or any other solution for a storefront that is compatible with Commerce. To finalize the online channel configuration and ensure that the products are discoverable in the e-Commerce store, you should also create a channel navigation hierarchy and sync the data to the online store database. Each channel can have a unique channel hierarchy.

If you wonder where you can define the category hierarchy for stores, then here it is : Retail and Commerce –> Channel setup –> Channel categories and product attributes:

Configure an e-commerce site

Much of the configuration of the e-commerce site is performed in the site builder.  This is a tool deployed and available from LCS, if you have purchased the e-commerce SKU.

The site builder have a set of site settings:

Configure channel assignments for an e-commerce site

To establish a new site and associate an online store with it, in LCS, select the link for the site authoring environment. Then, on the page for the site authoring environment, select New site. In the New site dialog box, you must provide some basic information about your site. Here are some additional details of the information you need to fill in.

Configure ratings and reviews

Also check out the topic on Microsoft learn. The ratings and reviews solution in Dynamics 365 Commerce uses Azure Cognitive Services to offer automatic moderation of profane words in 40 languages. Because human approval isn’t required, moderation costs are reduced. The system also offers moderator tools that can be used to respond to customer concerns, feedback, and take-down requests, and to address data requests from users.  But keep in mind that rating and review is an additional SKU from Microsoft.

Here is the moderation screen where moderators can respond and take input.  There is also a export to power BI for deeper analysis.

The rating and reviews can also be synced into the HQ and to the POS.  See the following article.

Manage e-commerce content

Building and maintaining content will be an ongoing process.  You therefore should invest in having dedicated content builders to create the best possible presentation and experience for the online users.

Configure URLs and aliases

When creating new pages, you won’t be required to specify a page URL. If you leave the URL field blank, the page is created in an unlinked state. In this case, customers won’t be able to access the page, even if it’s published. To make the page accessible, you must manually create the URL and link it to the page.

Configure product detail pages and category pages

The product details if a very central page, and can be customized for specific products.

The category page is the page that most often is used for browsing through the products.

Manage site themes, page fragments, templates, layouts, and pages

There is a lot of setup required when setting up the content.  We are using a DevOps template where we have all the elements defined and in place, and here is a view of some elements of setting this up.

And each of the setup of each element is documented in devops

Upload and manage digital assets including videos and images

The media library is where you store your pictures and video’s. The naming convention of your files  is very important to make sure you are linking the pictures with the right products.

Set focal points and attribute values for media assets

When an image is uploaded to the Commerce site builder Media Library, the system attempts to determine the focal point of the image. For example, if the image has a person on it, the system will set the focal point to the face of the person by default. In most cases the automatically set focal point works well for all viewports, but sometimes you may want to adjust the focal point to ensure that a specific part of the image is always visible. In the picture below, you see that I have a focal point on the head.

I can also change the view by module to only show parts of the image in certain settings.

Configure publish groups

E-Commerce websites are constantly updated with new content throughout the year. Updates are often published in batches around busy e-Commerce events such as holidays, seasonal marketing campaigns, or promotional launches. These updates often require that groups of website content (for examples, pages, images, fragments, and templates) be staged, validated, and published concurrently in a single action.

So you can setup publishing groups that changes the ecommerce site on a specific date.

Operate an e-commerce channel

Create e-commerce orders

The Microsoft documentation here is excellent and superb. The shopping experience is fast and intuitive.  Just what is expected from an eCommerce site. 

Synchronize e-commerce orders

To view the transaction in Commerce Headquarters (HQ), run the P-0001 job and Synchronize Orders to pull in the orders from the Commerce scale units.

Moderate ratings and reviews

This is covered earlier.  But check out the following learn session.

Configure business-to-business (B2B) e-commerce

Business-to-business (B2B) e-commerce sites provide some key capabilities that optimize the workflow for a B2B user.

Describe differences between B2B and business-to-consumer (B2C) solutions

It is possible to implement both a B2C and a B2B scenario’s.  The main capabilities that is relevant for B2B scenarios is the ability to purchase on account, and that you have tools to improve B2B account relations and partner management tools.  The capabilities available for B2B scenarios are:

  • Business partner onboarding
  • Order templates
  • Quantity thresholds (minimum, maximum, multiple)
  • On account payment method
  • Salesperson for business partner
  • Handling of customer deposits
  • Account statement and invoice printing
  • Payment of sales invoice
  • Quick order entry
  • Dynamics 365 Sales integration
  • Return order and return merchandise authorization (RMA)
  • Order cancellation
  • Matrix control for order entry

Allowing B2B customers to pay on the account is crucial for the B2B e-commerce solution. D365 Commerce will enable customers to buy within their pre-set credit limits. Invoices generate after the order is placed, and the customer can pay those directly from the eCommerce site with a credit card. Order templates allow users who may buy many of the same items during each order to have preconfigured lists of items they want to add to their cart. They can also access a quick order entry screen to make adjustments to quantities and SKUs they’re purchasing.

Describe use cases for organizational modeling hierarchies

Two new customer records are created in the system: a Type Organization customer record for the business partner organization and a Type Person customer record for the requestor (that is, the business partner user who submitted the request).

Manage business partners and business partner users

B2B e-commerce websites require that organizations register to become business partners. After an organization submits registration details to a B2B e-commerce website, it goes through a qualification process. If the organization is successfully qualified, it’s onboarded as a business partner.  New business partners signing up will show up as prospects.  On the next two screen, you see the signup form in ecommerce, and a screen of the all prospects where they end up:

Configure product quantity limits

Most products have a unit of measure that defines their grouping. The grouping affects how the products can be sold. Some products might have an additional grouping for quantities. This grouping determines whether the products can be sold as individual units or multiples, and whether there is a minimum or maximum order quantity limit that must be followed.

The quantity limiting feature ensures that the minimum, maximum, multiple, and standard quantities that are configured in Microsoft Dynamics 365 Commerce (in the default order settings or the Commerce site builder site settings) are applied to customer orders that are placed on an e-commerce site. Product quantity limits aren’t currently supported for the point of sale (POS) and call centers. On each product you may specify

  • Multiple – The quantity that the product can be bought in multiples of.
  • Minimum Order Quantity – The minimum number of products that must be purchased.
  • Maximum Order Quantity – The maximum number of products that can be purchased.
  • Standard Order Quantity – The default quantity that is automatically entered when the product is selected.

In the site builder à extensions, you can define for which type of customers this setting should affect.

Buy Commerce Scale Unit’s, and get Device licenses included

There is a small, but interesting element that retailers should be aware of. If you buy Dynamics 365 Commerce Scale Unit’s you get device licenses included.

It is available in the licensing guide.

What does this mean? As you scale up your installation, and deploy to multiple azure geo zone to achieve the best possible latency, then remember to reduce your number of device licenses according to the number of Commerce Scale Units you deploy.

No need to buy both Commerce Scale units AND devices.

Take care

*PS! Always read the licensing guide thoroughly, as there are conditions that needs to be followed.

D365 eCommerce sites live and running

Through search and connections, I have compiled a list of public sites that have implemented the Dynamics 365 eCommerce parts. This is by no means a complete list, and only represents a small subset. I have not been sponsored by any, and I only want to share with the D365 community sites that are live and running. Hopefully more can see the benefits of having a truly integrated omnichannel solution, and start investing knowledge in the capabilities. I hope also this can convince more to start enabling the eCommerce capabilities in the stack that they already have.

So here is the list, without any more comments:

Gardening

https://www.dobbies.com/

https://shop.friedmanshome.com/

Clothing and sports

https://www.mandsyourschooluniform.com/

https://www.aubainerie.com/en

https://www.obrien.com/ 

https://www.hosports.com/

https://www.liquidforce.com/ 

Home and Kids

https://www.cittadesign.com/

https://www.toysrus.com.sa/

Cosmetics

https://www.signaturecosmetics.co.za/

Food and Wine

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/

Demo sites :

https://vitalia.inspirit365.com/

https://vitalia.inspirit365.com/no

https://www.adventure-works.com/

https://cdx-contoso-coffee.commerce.dynamics.com/

https://r1tie.fabrikam.com/modern

Take care

D365 – CustTable – fast – faster – fastest – WOW!

I wanted to look deeper into an area that have troubled me for some time. Why are some forms very fast in D365, and some forms do not have the expected start-up time. At the end of this article you can see my finding, and I hope this will have an positive effect on user experienced performance.

The form I wanted to take a deeper look into is the custTable form, as this is one of the most used forms at customers. Over time we have seen that this form has increased in size, by additional features and code being added. New features are great, but it comes at a cost.

I wanted a simple test, where we are looking at a warm system, and time how long time it would take to open the CustTable form. I would like to test the opening of custTable a Cloud Hosted Tier-1 (DS12 V2), Tier-2 and PROD. This is benchmarked with a top-watch, and timing is from I click on menu item, until form is drawn and responsive. I will be using google chrome with F12, and measure until all network, and the main measurement will be TTFB (Time To First byte), as seen in the picture below. The actual waiting time tend to be beyond this, but it is the most concrete KPI I have found. The timing is therefore not the actual or experienced performance, but a KPI that can be used for comparing scenario’s.

The KPI represents the time the AOS/IIS is using to render and return the form object to the browser. Each “warm test” will be conducted 3 times, and the data is an extremely small dataset (just a few customers), as the purpose of this test is NOT to test the database, indexes or queries. It is about testing how the execution of code and caching on a form is performing.

Below is a screenshot showing where to find my performance KPI in the F12 Google chrome developer menu.

Test of architecture

In this test I’m testing how fast the custTable form is opened on Tier1, Tier-2 and on a PROD environment. The PROD/Tier-2 environments are on service fabrics(self-service), and the databases seams to be elastic pool based.

As seen on the table below the fastest execution happens on Tier-1, that is a one-box SQL, and the Tier-2 and PROD

Customer form

Warm execution

Cold execution

Tier-1 (DS12 V2)

1.50, 1.49, 1.49

22.99

Tier-2

2.20, 2.32, 2.20

16.96

Prod (6 AOS’s)

3.22, 3.25, 3.10 (20:00 CET)

2.37, 2.46, 2.40 (22:00 CET)

Not measured

What we here see is that a cold execution of the CustTable form is extreme, with a dramatic increase execution time. What we also see is that PROD differs on execution time. This can be because of different connection to another AOS, or affection of “noisy neighbor” caused by switch to Azure SQL elastic pool architecture.

On a simpler form like the “customer reason code” form, without much code, we see a very nice execution time on all tier-levels, and even cold executions are within acceptable range.

Customer reason code form

Warm execution

Cold execution

Tier-1 (DS12 V2)

0.11, 0.11, 0.12

1.01

Tier-2

0.26, 0.27, 0.26

0.98

Prod (6 AOS’s)

0.27, 0.28, 0.23

Not measured

The conclusion seams that complex forms, as the custTable are much more affected when opening a form in a cold state.

The complexity of the CustTable

As seen below, the CustTable contains 12 datasources, and quite many of them are joins. There are also 4 extension to the form.

We also see in the code in the CustTable is heavily regulated by code that controls features, country specific/regulatory elements, and display items. If we open the Customer form on a Tier-2 environment with 5 customers takes between 2-3s. In total there are 16.413 method calls, and of them 1.330 are unique method calls.

I did not get any meaningful information out of the recorded summarized tracefile analysis, so I must continue to more manually look into the actual execution of code.

Test of effect when reducing complexity CustTable

My next step in the analysis is to see what is affecting the execution time. In the following section I’m testing in a Tier-1 D12V2 environment. I have made 5 copies of the CustTable form, in each form, I’m removing more and more code and data sources. I name them:

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

To simulate a “cold execution” we can flush the cache by adding the following to the URL: &mi=ACTION%3ASysFlushAOD

CustTable form type

Warm execution (s)

Cold execution (s)

Standard 10.0.18

1.50, 1.49, 1.49

22.99

1.Standard, but no calls to feature enablement code

1.34, 1.43, 1,39

17.94

2.Fast : All code and data datasources removed, except custTable and DirParty

0.72, 0.72, 0.73

1.22

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

0.56, 0.62, 0.57

0.96

4.Fastest; All is removed except CustTable data source

0.34, 0.34, 0.38

0.49

5.Customer reasoncode form

0.11, 0.11, 0.12

0.32

What we see in the table above, is that the main thing that is taking time, is the execution of code. The datasources do not affect the user experienced performance in this scenario. The results show that simpler forms with less code have a huge effect of the execution and the cold-start scenario.

WOW! – Other findings.

I have found one area that is affecting heavily the cold startup of forms. That is the office button, that is typically initiated when the form is loading. I tried disabling the office button code, a cold startup of CustTable went from 23s to 5s. And this button is used everywhere.

This “fix” does not seam to have a large effect on warmed up system. But keep in mind that with the one-version strategy and adding extensions we are clearing any cache quite often, that the end-users needs to rebuild on each AOS. As there are thousands of forms, you can multiply the warmup with the number of AOS’s, and you realize why manual warmup take days.

I have informed Microsoft, and hope for a positive response. Let’s continue to dig for code changes that can make the best ERP system even better, and share what you find.

I realized, that when debugging line-by-line, a small gray text pop’s up showing the actual elapsed execution time per statement. This allowed me to find the lines that actually are using a lot of time, by jumping from line to line. The timing here, is from when I did a debug of a cold system. On a warm system it will not show, as then it all is cached.

I’m really proud of finding this, as it have been on my bucket list to find some real good improvements. For more details on the chase for more performance, take a look at the Microsoft Yammer group (If you have access?) https://www.yammer.com/dynamicsaxfeedbackprograms/threads/1105410564505600

D365 B2B eCommerce, Things have changed (again)

Me and my colleagues have had the privilege the last few weeks to go really deep into the D365 offering, in terms of capabilities, pricing and roadmap. A few weeks ago, I wrote about the pricing of eCommerce. As this have changed per 1. April, I have removed this post. I recommend that partners find the session that Microsoft had last night, called “Dynamics 365 Commerce e-Commerce Licensing Changes (DYN963PAL)“. It gives some new insight where Microsoft brings a better pricing differentiation, and the pricing can better meet price points in the low-end pricing marked.

But the key headlines are that Microsoft are now capable of offering license cost per sales in the range of 0,36$-0,85$ for the low-end market (sales order value <50$). And that is a significant price reduction! I suggest you check out the pricing when it becomes available on 1. April. (Without any jokes )

In some meetings I attended I also learned that a significant number of B2B customers are in implementation already(including us). I do believe that the D365 eCommerce B2B brings some very nice offerings, and it is in this domain that I think we will see a lot of customer onboarding to D365 eCommerce.

Take care my friends, and I’ll keep you posted on more to learn.

D365 Commerce – tech-talk videos on YouTube

Do you have YouTube available on your TV, and have finished all series on Netflix and HBO? If you want to fill up with additional knowledge and still enjoy your cozy favorite couch, then know that many of the Dynamics 365 Tech-Talks are available on YouTube. You can also find them available here: https://community.dynamics.com/365/b/techtalks?c=Commerce

Here is a compiled list of D365 commerce video’s I recommend if you want to learn more of the eCommerce domain. All of them originates from the following YouTube channel: https://www.youtube.com/channel/UCBoCtfQN1aRB31xnEexj5yQ

Enjoy your couch

Title

Video

Dynamics 365 Commerce Overview Tech Talk

https://www.youtube.com/watch?v=2E71HjrnwhE

Dynamics 365 Commerce Architecture Overview Tech Talk

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

Unlock the Power of Dynamics 365 Commerce: B2B e-commerce

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

Unlock the Power of Dynamics 365 Commerce: Omni-Channel Order Management Flows

https://www.youtube.com/watch?v=7kQJIV-42Dw

Unlock the Power of Dynamics 365 Commerce: Supporting Buy Online Pickup in Store/Curbside with POS

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

Unlock the Power of Dynamics 365 Commerce: Branding Your E-Commerce Site

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

Unlock the Power of Dynamics 365 Commerce: E-Commerce Module Library Overview

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

Unlock the Power of Dynamics 365 Commerce: Support Multiple Languages & Markets on E-Commerce Site

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

Unlock the Power of Dynamics 365 Commerce: Managing Omni-Channel Ratings & Reviews

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

Unlock the Power of Dynamics 365 Commerce: Best Practices for E-Commerce Customization Development

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

Unlock the Power of Dynamics 365 Commerce: E-Commerce Module Library Overview

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

Unlock the Power of Dynamics 365 Commerce: Managing E-Commerce Site Settings

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

Unlock the Power of Dynamics 365 Commerce: Commerce Deployments, Updates and Servicing

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

Unlock the Power of Dynamics 365 Commerce: Setup a B2C Tenant for e-Commerce Site Authentication

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

Dynamics 365 Commerce E-Commerce Architecture Deep-dive Tech Talk

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

 

 

 

 

 

 

Decompiling D365 retail components

Today I got a very nice tip from a colleague on how to better understand and see the source code for the retail components.

I was experiencing that I was not able to post a CPOS sales, and in the eventlog I got the following “Cryptical” error:

Customer with RECID 5637158076 is non-chargeable account.

at Microsoft.Dynamics.Commerce.Runtime.Services.CustomerPaymentService.ValidateCustomerForOnAccountPayment(Customer customerToPayWith, RequestContext context, Boolean isPositiveAmount)

 

The thing with the retail server, is that we don’t have the source code on all the components. But luckily there are a way around it:

JetBrains dotPeek (just google it, and download)

This tool let you decompile all components, and have an advanced search capability. Just all the K:\RetailServer\WebRoot\bin\Microsoft.Dynamics * files, and then search for the term ValidateCustomerForOnAccountPayment:


 

Solution to my problem, was that the InvoiceAccount on the customer record was blank.

So now you know how to see all sourcecode in Dynamics 365 Commerce/RetailServer components

Happy!

 

 

 

 

D365 smarter search algorithm

Dear fellow community members.

First a small announcement as of first of December I am in a new job where new ideas and visions for our community will come to life. I am overexcited to share more on this later at LinkedIn, but as a true enthusiast I choose to celebrate this milestone with a fun knowledge sharing blogpost to the community. The community have always been there for me when I need knowledge and paying forward is how the community choose to reward each other.

Today I would like to show you a way to create smarter search in Dynamics 365 with some minor extensions. As you know, relevance search API is on the horizon, but I expect quite a few release iterations before this will materialize into the D365 F&S codebase.

First some context; I hope you have familiarized yourself with the fulltext search capabilities that exists under the “sales and marketing”.

This feature materializes itself on the sales order screen, where you can search for products across different and multiple fields. Some of the drawbacks of the standard solution is the Microsoft have limited the number of fields you can search on to only cover fields you have on the inventTable and a few other tables. Some requirements I often get is the ability to search for barcodes/GTIN, external item numbers, vendors, attributes, classifications etc. I also get the requirement that the user do not want to be restricted in the sequence of how the search terms are specified. They want “google search” capabilities, meaning that [A] + [B] results in the same results as [B] + [A].

With some minor adjustments we can make the search for products much more meaningful. First, I need to explain how standard is performing the item search to explain how you can adjust this. There is a table named MCRInventTableIndex, that consists of 2 fields. One as a reference to the product, and one field that is a concatenation of several fields. As shown under, the Searchtext field contains item number and item description, just concatenated together. Then there have been created a fulltext index on this field to speed up the search on this long string.

When typing in your search criteria there is added a wildcard “*Criteria*” making sure that the system can find the right criteria according to the search term. The drawback here is that the search terms must be specified in the right sequence. There is also the issue that the concatenated search team is missing lot of exiting terms to search for.

So, there are 2 problems that needs to be solved:

  1. Adding additional search terms
  2. Fixing that the search sequence is irrelevant.

Lets look into that:

Adding additional search terms

The way I choose to add additional search terms, is to create my own SearchIndex table, where I can concatenate all the search terms, and include the fields like barcodes/GTIN, external item numbers, vendors, attributes, classifications. The code here is just concatenating the SearchText into a very large string, and referencing this to the product/NOBBnr. It is also OK to add multiple barcodes or vendors.

This results in having a table that have much more information, and just visualized here to show that the string contains many kinds of information.

The next stem, is to include this string into the std D365 search algorithm, so that all my search strings are included in the search.

At this time, I can search on itembarcode vendor external item etc. just as I wanted. But our goal has not been met yet. Let us go the next challenge.

Fixing that the search sequence is irrelevant.

If I should visualize how I want the search to be conducted, let us take a concrete example. Here I am searching for a door (“dør”), that is white (“hvit”) and have the size (“10X20”). As seen below, this results in to possible results.

But what we want to achieve is that the search criteria sequence should be irrelevant. What we want is to have an inner join of the search criteria’s to only get those items relevant. We therefore have to split up the search criteria, and then perform an exists join for each search criteria based on each of the separate search elements.

To make this magic happen, I have the following code, that is an extension to the MCRInventSearch class that is building up a query for the search.

This allow me to get a much better search result:

This beneficial search algorithm also kicks into the MCRSalesQuickQuote form, and here I also also added a “iframe” directly toward an external product database NOBB, that shows all relevant data.

If you enjoyed this topic, please share it. And if you want to discuss it, please contact me

Take care and see you all in my next chapter.

D365 X++: I’m using InventABC as my template

Hi fellow developers.

Back in the early days I was at a good old Damgaard conference, and attended at a technical session. In this session one of the founding fathers of Axapta came up with the phrase “Copy with pride“. What he meant was to look at existing code and patterns in the X++ code, and to feel free to used and copy these patterns from the Microsoft code and use them in customer customizations and extensions. I have lived by this principle and “copied with pride” and encourage other to feel free to take my work and copy what they need.

One of the more common customization/extension requests is where we have a class that does some magic and have a dialog, query and can run in a recurring batch etc. I guess all developers have their own approach, and as the blog name suggest I’m using the InventABC* classes as a “copy with pride” for my code. I know this code is more than 20 years old, and I guess there are better and advanced patterns to use. I don’t say this pattern is the best, but for me it is a fast and easy way to create simple periodic recurring classes. Please any feedback is welcome, and feel free to share your approaches.

The InventABCUpdate do contain the code to creating a dialog, executing in batch, parameters and most of the code I need to create the code needed. After done, my final code does not resemble the original InventABCUpdate code, but for me it is a journey where I have fixed starting point and then make constant adjustments until I have reached the desired solution.


For any of you that is starting the journey of learning development in X++, and quite quickly being able to create solutions our customers it is well worth investment to study of the InventABC to classes and then speed up your coding experience.

Happy coding friends.

 

EDIT: The community responds quickly A better class to use could be Tutorial_RunBaseBatch

D365 commerce; The need for speed (replenishment)

A nightmare for retailers is situations like this, where customers are experiencing empty shelfs.

The normal process for handling these situations is to have store employees to constantly monitor shelfs, back office stocks and to order replenishment when needed. We also see a lot of number crunching demand forecasting systems being offered to the marked, and with a questionable success rate.

Up until now, we have seen systems that have a quite slow react time. Goods are replenished and received. When selling the products there where delays in getting an updated on-hand, and very often a nightly master planning created planned orders that is manually firmed and then sent to the vendors or the central warehouse. In essence the process to getting replenishment signals through the supply chain can take day’s.

With the Dynamics 365 Commerce I now see a maturity to speed up the replenishment process, making it possible to dramatically shorten the lead times in each step. Let me explain:

  1. Retail statement trickle feed
    I have covered this topic a few times before, but in essence this means that the sales transactions generated from a POS sale, is updated at a much faster rate. Having an updated on-hand is essential, and where the outbound sales transactions reflects the actual situation on the shelfs.
  2. Inbound inventory operations in POS/Handheld
    The ability to quickly post the arrival and receive directly on the POS ensures that inbound transactions are updated in real time. Also the ability to quickly manually request replenishment for processing can now be done directly in the POS.
  3. Outbound inventory operation in POS/Handheld
    Faster request goods from other places can reduce the lead time and prevent stock-out situations. If some products are available at a another near store/warehouse that having processes to make them available across other near sales channels can speed up the replenishment.
  4. Planning Optimalization
    Nightly master planning (MRP) is too slow for retailers, and are better suited for businesses with longer lead-times. Retailers are looking for speed. With the Planning Optimalizations features we have a close to real-time generation of planned purchase and transfer orders. As soon as needed the system can initiate the supply chain process based on the on-hand and future expected transactions. In standard D365 there are also automatic firming processes that will generate purchase and transfer orders. These orders can be further processed and automatically be sent to vendors or from other storage locations. But it can also be used to automate transfers from a back-office storage and into the store shelfs.
  5. Solution is still in public preview but are very promising some exiting capabilities that can visually monitor your store and enable triggers that start executing supply chain processes. The first abilities are “Display effectiveness“, “Queue management” and “Shopper analytics“, and where the data collection are based on camera technology.

 

By optimizing the flow, it should be possible within Dynamics 365 to speed up and automate the replenishment process to be executed within 10 minutes after the sale have been conducted. Also, with signals from the connected store solution, this can be used to automatically adjust the minimum on-hand/Shelfs based on actual observed data. The gains and possibilities towards what Dynamics now can offer can again bring profit back to modern Brick&Morter retailers.

I hope this can inspire people to look deeper into the capabilities we now can deliver.

 

 

D365 Outsourcing your master data (DaaS)

In Dynamics 365 implementation projects I often say that all we do can mainly be categorized into 3 headline topics.

As we know for Dynamics 365, Microsoft is providing the software and the platform needed. It is easy to buy as a service where only a monthly commitment is essentially required. This is the nature of the Software-as-a-Service cloud-based concept.

The implementation partners are the best in structuring an implementation project and guiding step-by-step through the jungle. There is a lot of knowledge needed to understand complex processes needed in an organization. The partners are typically working tightly with people and ensuing that the organizational machinery is oiled and running smoothly. Defining processes that follows the entire end-to-end processes like procure-to-pay or order-to-cash.

The third element of equal importance is master data. I have written some previous blogpost about the subject, that is relevant to check up. Traditionally building the master data have often been the responsibility of the organization implementing Dynamics 365 and have been regarded as the heart and soul of the organization. The data is often manually built/generated and maintained, and low quality in master data can have catastrophic effects in any organization. If you cannot trust your data, then you do not have the information needed to make good business decisions.

Traditionally this have been identified as an integration requirement, but the main “ownership” of the data have still been handled internally in the company. Here is where I see a change. Instead of maintaining your own master data, the master data is maintained through cloud based public services operated based on a monthly fee. Just like SaaS (Software as a Service), we see mature implementations of DaaS (Data as a Service), where Dynamics 365 customers is closely integrating and outsourcing much of the maintenance to vertical specific online services.

But one aspect I see, is that the data providers are not global actors, but tends to be more local and verticalized services to specific domains. To be specific towards some providers here in Norway, I would like to name-drop some providers that I have encountered that provide such services.

BREG – Brønnøysund Register Center

The Brønnøysund Register Center develops and operates digital services that streamline, coordinate and simplify dialogue with the public for individuals and businesses. They operate many of the Norway’s most important registers, that contains information about companies, roles, tax etc Many of the services is free, and you can read more about them. If you need validated and confirmed information about any organization on Norway, then this is the registers you need to integrate towards. My friend Fredrik S, from Microsoft have create many demo’s showing how easy it actually is to set this up.

BISNode – Integrated credit check and risk management

Knowing the commercial risk is essential for all businesses. By having updated information, the decisions become less risky and less labor intensive.

1881 – search and return person address information

1881 is Norway’s leading provider of personal and business information and is providing information on telephone numbers, names and addresses. By having lookup into databases like 1881 you instantly get address information that enrich your data and simplifies transaction handling.

GS1 – The Global Language of Business

GS1 is the main provider of a lot of supply-chain oriented master data. Here you maintain product GTIN/barcodes, and they also provide a GLN (Global Location Number) register. When working with delivery addresses, then this is a must-have, because it ensures that goods are shipped and received to the right places. For a small fee, you get access to updated addresses directly into D365, where the addresses are also enriched with GPS coordinates. One more relevant aspect of GS1, is the GPC (Global Product Classification), that makes it easier to search for products globally and is also a very good reporting/analytics structure.

TradeSolution – The Norwegian Grocery PIM

If you are going to sell or purchase products through the Norwegian grocery chain’s, you need to have a close connection with Trade solution. I have written about them previously, but they make sure you have a reliable source of product master data and properties of the products. If you are using their services, there is no need for a third part PIM solution. They also provide a media store for product pictures.

NOBB – The Norwegian Construction PIM

NOBB contains almost 1,000,000 articles from 700 suppliers. You will find a wide range of product information, e.g. lumber, building materials, hardware, tools, fasteners, paints, houses and gardens, water / plumbing, electrical etc. The database contains basic data, price, logistics data, images, documentation streamline the industry’s need for structured and quality-assured basic data. The quality of the product database is ensured through the industry bodies Quality Forum and the Standardization Committee. The item owner updates and maintains the information based on industry standards (ref quality forum and standardization committee). This is a unique quality assurance and proximity to the industry that no other players can offer.

Elfo – The Norwegian electronics PIM

Electronics Industry Association – EIF – is an industry association for Norwegian-based companies that runs electronics-related activities that are mainly aimed at the professional market, either as importer, manufacturer or developer.

Farmalogg – The Norwegian pharmacy industry PIM.

The product register, with few exceptions, covers all goods that are sold in pharmacies, and it contains information that is necessary for the safe and efficient handling of the goods throughout the value chain from manufacturer / supplier, through wholesaler and retailer, to end-user.

Prisguiden – Compare your prices

Price databases that allows you to compare your prices to competitors. You can also measure the popularity and trends that happens in the market. What does customers search for? By tightly integrating towards the market, makes decision making easier and can be made more automated.

Consignor – Easy shipping

Delivery Management is all about connecting your warehouse to your customers in the most efficient way. By making one standard integration to services like Consignor, they make sure that no matter what combination of carrier services you choose, customer will get the same high-quality feeling when receiving a delivery from you.

Currency exchange rate

This service is already present in standard Dynamics 365 – Start using it!

There are surly many other master data providers, and here I have list listed a few actors in the Norwegian marked. By outsourcing your master data maintenance, you will get much higher quality on the data and more return on investment.

Are you ready to outsource your master data ?

DaaS Leben ist kein Ponyhof

 

 

D365 – My Covid-19 10 day’s response story

Hi Friends.

I hope you all are hanging in there and can still work and deliver excellent experiences with Dynamics 365.

I wanted to share my Covid-19 10-day response story on how fast a reduced scope Dynamics 365 implementations has been made available. Some weeks ago, we and Microsoft were contacted by an important player in the health industry, that urgently wanted to establish purchasing- and supply-chain processes for medications and equipment’s. The key element here was the urgency because it was unclear in what directions the pandemic would take here. What the customer needed was tools that could process information about supply providers and what kind of supplies is needed for readiness stockpiling. Our first step was to setup Dynamics 365 (CRM) to store relations and this was done in a few days. Then the next step was to setup and go live with a “minimum viable product” of Dynamics 365 finance and supply-chain apps. We had a goal of doing this in 10 working days. This is the story I would like to share.

Day 1: Onboarding, tools, and deployment

In the initiation of a project, I always have a document named “Welcome to the [Customer]-project”. This is a great document, because it contains all the essential information about the onboarding to a project and can be shared to all participants. It is typically a 6-7 pages document explaining the onboarding process and the main objectives. It also contains references to LCS, SharePoint/Teams sites, DevOps and URL’s to environments. The most valuable element is a full overview of all the people that will somehow be involved in the project. In this project we decided on a small efficient 4 person team(POD), and fast-track support from Microsoft.

Microsoft quickly processed licenses, and we quickly deployed the LCS project. The first we started was to deploy the Tier-2 sandbox, and we named this the ‘UAT’ environment, and this was to be used as the master data/golden environment in the start. We also deployed the Tier-1 sandbox and named this “Test”, and would be used to have access to Visual Studio etc. The initial version we deployed was 10.0.10.

We have a ready implementation templates that is imported into DevOps, that contains the main structure of requirements and tasks. We scope this down to the actual processes we need.


We also have a ready folder structure for the team’s site where we can store and complete all documentation. By the end of the first day we had established the tools needed for starting the project.

Day 2: Working with the generic tasks in the backlog

We established a 30-minutes daily sprint meeting with main implementation major actors, where the plan is presented, and where the today’s tasks are prioritized. We did not have the time to create large word documents, to we decided to document the solution in DevOps, and organizing all the system setup around the entity templates as they can be extracted from D365. I exported the templates to Excel, and then import them to DevOps using the Azure DevOps Office® Integration, and this gives be 419 tasks to setup as much as possible in standard.

This makes it possible for we to have a step-by-step task list of all the elements I need to build the “Golden environment”. Also, each task is being assigned, and the actual setup is documented with a direct URL to the D365 form, and a screen dump of the actual setup.

On the first day we where able to process close to 200 tasks and setting up the most generic parts of the system.

Day 3: Working with the finance task backlog

When working on the finance setup we have a standard chart-of-accounts we imported, and we had to setup financial dimensions. We are also setting up the accounting structure, creating a few inventory posting profile and setting up tax parameters. Normally this is quite strait forward and we can use much from previous projects.

Day 4-5: Working with products

Now the Excel skills is put to the test. We have a excel sheet that contain most of the product master data. In total over 33.000 products, and each product have classifications, attributes, properties, and vendor/producer information. We quickly decided to use the same item numbering as was present in the excel sheet. Each column in the sheet was classified if:

  • This is a field we have in D365?
  • Should field become a category in a hierarchy?
  • Should the field because an attribute?

To get the products inn it was a very advanced copy/paste/merge of data into excel sheets that we then imported into Dynamics 365. At the end, we realized that all information we had could be imported, and without any information loss. It was hard work, but the end result was promising containing a list of all medical supplies available and classified into the medical ATC structure.



We also imported barcodes, vendors, producers, employees, address information, external items names/descriptions, attributes.

Day 6: Frist demo, UAT and deploy production environment

On day 6 we were ready to show the actual master data, and the initial view of the system. The customer was impressed by how fast we where able to build a system and processes that was familiar to their operation.

We decided to update the system to 10.0.11, and in parallel with the setup of the system we had been working closely with the Microsoft fast track solution architect to make the environments ready for production deployment. After a few iterations we got the production environment up and running and performed a DB-refresh of the production environment with the master data we had in the tier-2 sandbox. This meant that now we had an environment available to start performing transactional process testing and trimming the systems. I know that this is not the normal way of doing this, but thanks to Microsoft’s understanding of the urgency we where allowed to go this “fast-track” route. In DevOps we established the processes we wanted to test and optimize.

Day 7: Test dual write, business events and power platform

As earlier described, we also implemented some of the “CRM” elements first. Now we could enable the dual write, and synchronize vendors, employees, and other information into the CDS. Our first step was just to validate that it was working as expected in the UAT, and it worked as a charm We can share these master data across the D365 platform.

The next thing was to test how we could use the business event framework to integrate towards a 3’rd party WMS provider. Dynamics 365 have a business event that is kicking in when performing a purchase order confirmation. We decided to enable purchase order change management to have a strict workflow and ensure that we would rely on the purchase confirmation process.

This allows us to create a solution where the business event is catched by a power automate flow, that fetched all the lines of the purchase confirmation. And then transforms this into the format that the WMS provider needs. We can also enrich the data sent to the WMS provider, so that it is sufficient with all needed master data in their system. The next step is to import receive lines from the 3’rd party WMS provider. This will happen by power automate creating an arrival journal, and then a batch job in D365 is posting it, and then posting a product receipt. It all ends with a new business event being triggered (Purchase order received) that will send a message to the WMS provider that the goods now have been received. What we then archive is that the on-hand in each system is synchronized, and without any major delay caused by processing.

In total we have setup quite a lot of batch jobs, that handles all from cleaning, posting, and planning. We used the takings from the following blogpost as a template for batch jobs.

Day 7: Master planning and Planning Optimization

We do expect that quite a lot of requisitions and requirements will be processed through the system. So, using the new planning optimization engine from Microsoft suited the project well. Calculating the requirement on all products is extremely fast and done within minutes. This will allow for faster reaction time to new requirements and potentially reduce stockout situations caused by vendor lead time.

On day 7 we also imported all employees and created some approval position hierarches. This way we can extend the workflow processing for approvals.

Day 8-9: Testing, Testing, Testing in UAT

We started day 8 by refresh the UAT environment and executing testing according to key central the business requirements defined in DevOps. We found 3-4 issues, that was reported to Microsoft (Index performance etc), that was quickly fixed within hours by the excellent support architects. We also wanted to provide a bit visually nicer purchase order form-letter, that was more presentable, and decided to import the modern reports package from Microsoft. This makes it a bit easier to adjust.

We did try out the configurable business documents, but in this case it would take a bit more time to learn properly (that we did not have..) to set up correctly. Any issues we found, was also fixed in the PROD environment.

The main processes we focused on was the procurement processes, with approval steps, and manual coordination with vendors.

Day 10: Project closure and training

On day 10, we summarized on how far we had come, and created a project closure/summary report that also contains next steps and more backlog suggestions. We have suggested additional focus on Azure Data Lake, Power BI and implementation of a vendor portal. We also planned to perform training and making final changes to enable end-user onboarding. What we see is that making a system ready is not just setting up the system but implementing the use of the system in the daily operation. This is expected to take more time, and we are ready to respond

Final words and tips

I really hope this system will show it value and will be regarded as small but valued contribution to the covid-19 response. Microsoft have published the following page where there are resources that can help. Microsoft have also launched a program where you can get a 200 seat Dynamics 365 Customer Service system for free for 6 months to Covid-19 response related activities. Se https://dynamics.microsoft.com/en-us/covid-19-offer/

If you have any similar stories, please share them. The Dynamics 365 community cares and stands united in this Corona-19 fight!

D365 Importing JSON data the hard way!

I recently created a solution where I’m importing products and all related data for the grocery industry, and I wanted to share my experience so that others may follow. This is not a “Copy-Paste” blogpost, but more show my approach to the process that can be used when working with more advanced and complex JSON integrations. Many industries have established vertical specific databases where producers, distributor’s and stores are cooperating and have established standards on product numbers, product naming, GTIN, Global Location Number (GLN) etc. In Norway we have several, and the most common for the grocery industry here is TradeSolution. Most products is available to the public at VetDuAt.no, but they also have a Swagger API where the JSON data can be fetched and imported to D365.

One of the experiences I had when starting this journey, is that D365 is not modelled according how the data in these industry specific public databases. Much is different, and the data is often structed differently. We also see that the product databases are quite rich in terms of describing the products with physical dimensions, attributes, packing structure, allergens, nutrition’s etc.

To give you a small figure of the complexity you often can find, here is a subset of the JSON hierarchy:

I needed to decide how I should import this data. Should I just import what I have fields for in D365? Should I extend D365 will lot’s and lot’s of new fields? Or should I model according to how the external database is presenting the data? I decided on the latter and import the data as it was presented. This would give the best result and the least information loss in the process. I decided to go for a model where D365 is requesting a JSON file from the Swagger API, and then placing the JSON structure in a C# class structure. Then extracting the data from the C# objects and place the data into a new module I named EPD. The next step the process does is to take these data and populate the standard 365.

The benefit I see is that I’m not overextending the std Microsoft code. The data is available in D365, and can be used in Power BI etc. I would like to share some of the basic steps when fetching such large data structures from external services.

Fetch the JSON from the service.

To fetch a JSON file, I’m using some .net references, that helps handle Active Directory and http connections. The first method shows how to get an accesstoken, and this is relevant of the swagger services requires this. The next method is where the swagger URL is queried, and the JSON file is returned. In additional some success/error handling.

So at this time we have the JSON file, and we want to do some meaningful with it. Visual studio have a wonderful feature, where you can paste a JSON, and convert it into classes. To make this work, you will have to create a C# project.

This will generate the C# class, and in this example the number of sub-objects and the number of properties is in the hundreds, and the properties can be objects and event array’s of objects.

In addition I need to have a method that takes that JSON file, and deserializes the content into the class methods.

Store the JSON object data into D365 tables.

So at this time, we have been able to fetch the data, and in the following code, I’m getting accesstoken, getting the JSON, deserializing the it into an C#-object, and parsing it forward for more processing.

 

Now, let’s start inserting this data into a new D365 table. For simplicity reasons, I have created a D365 table for each data object in the JSON file. This allow me to store the entire hierarchical JSON structure into D365 tables for further processing. As soon as I have the data stored in D365, I can create the codes that moves it forward into the more functional tables in D365.

A lesson learn was that when creating sub tables to store hierarchical JSON data, it is sometimes needed to create relationship between the records in multiple tables. Sometimes also uniqueness is required, and the best way I have found (so-far) is to create a GUID field, and use this GUID to relate the data in the different tables. This can easily be accomplished with the following code.

Create the std D365 data using data entities through code.

At this stage I have ALL the data in D365, and I can start processing the data. Here is a subsection of how I create released products by using standard
data entities, where a table containing the JSON data is sent in, and I can create the products and all sub tables related to products.

This approach has resulted in solution, where it is easy for the end-user to fetch data from external systems, and import them into D365. Here is a form showing parts of the “staging” information before it is moved into D365 standard tables. (This form in in Norwegian, and showing a milk )

I would like to thank the community for all the inspired information found out there. Especially Martin Dráb (@goshoom) that have been very active in promoting the “Paste JSON as classes” in Visual studio.

 

 

 

 

 

 

D365 : Automatic license disablement and login reminder

When assigning licenses to a Dynamics 365 user, it would be beneficial if the system disabled and removed a license from a user if the user has not used the system for X days. X minus 5 days the system should send out a message to the user like this:

“This is a login REMINDER for Dynamics 365. Kurt Hatlevik has not logged into for at least 25 days. Your last login was 2/20/2020 12:10:00 AM. Login to Dynamics 365 is required at least once within a 30 days window or your account may be deactivated without notice. Please login within the next few days to ensure access is maintained.

Reactivation will require user administrator approval and will be dependent upon license availability.”

This would make the system more secure, and it will also free up licenses for users that are not using the system.

If you also think this could be beneficial, please vote on this idea her : https://experience.dynamics.com/ideas/idea/?ideaid=c12972cf-6a6c-ea11-b698-0003ff68dcfc# 

D365 and the supply structures in grocery retail industry

Today I will write a bit about the supply chain structure we see in the retail grocery industry, and challengers Dynamics 365 may face, and how to address them. The grocery industry has for many years seen that industry collaboration brings benefits and synergies throughout the value chain. We see industry collaboration that offers a range of services to its owners, customers and partners. In the country where I’m from, the main collaboration initiative is TradeSolution, and is owned by the main grocery chains in Norway. TradeSolution operates and maintains central registers, databases, and various IT, reporting and analysis services in Norway, but we see much of the same pattern in other countries and other industries also.

One essential element is to have a unification of how to identify products and how the products are packed, ordered and shipped. In Norway we have the term EPD (Electronic Product-Database), that makes it easy for the entire Norwegian grocery marked to purchase and sell products. Much of the information shown in the blogpost here is originating from TradeSolutions public pages here.

What is EPD?

In Dynamics 365, one of the most essential SCM elements are products and released products, and the associated master data tables related to this. In the grocery industry it is actually the packaging that is the center of it all. The products etc is actually properties of a packing structure. It would be an oversimplification to say that EPD is products. EPD is describing not only the products, but also the packaging of the products. The EPD standard is describing the products in up to 4 levels: basis, inner box, outer box and pallet(with SCCS). Each level identified with a GTIN. See also my old blogpost about SSCC.

So far so good. We can model this in Dynamics 365 by having a product defined as a “Basis”, and use the inner box, outer box and pallet as unit conversions. In D365 we also have the possibility to create barcodes for each unit of measurement (UOM). It would also be quick to assume that the EPD number is an external item description.

Unfortunately, the grocery industry is a bit more complex. Let’s take a quick look on the EPD numbers of Coca Cola. It is actually 7 packing structure/EPD numbers, and these are shown to the right(7digits). All of the represents different packaging of the same basis unit, and can have different properties and attributes.

What we also see is that some boxes are marked with a “F”, that means this is a consumer unit. So talk in D365 language, is can be sold to consumers. Some are also marked with a “B” that means that this is the unit that the EPD number is purchased in. So if we take a detailed look at EPD 4507224, we see that it is defined what units you can sell, and what units you can purchase. On a single EPD number there is only one level you can choose to purchase of. Here are 2 examples that describes the complexity. First example is an EPD, where the grocer can sell in basis unit and in inner box unit (EPD 4507224)

The next example is where the grocer can also sell basis unit and in another inner box unit type (EPD 2142941)

As you can see here, the conversion between inner boxes to pallet results in different quantities.

To further add complexity we can add the definition mix to the element. The ordering is happening on the inner box level, but it actually contains separate products that is sold through the stores.

On last element is also the concept of unmarked variants. Like this package of yogurts.

Summary EPD

  • A product is identified by a EPD number (EPDnr)
  • A unit is identified by a GTIN (Global Trade Item Number)
  • A unit is called «pakning» in EPD
  • A product can have up to 4 levels of units (hierarchy)
  • A product can be a mix of multiple «basis» or «mellom/innerbox» units
  • A “basis” unit can be shared by many products
  • The first level of the units is called «basis» in EPD (often referred to as a customer unit or base unit)
  • The top level of the units is called «topp» in EPD (often referred to as a load carrier unit)
  • The levels between «basis» and «topp» (if any) are called « mellom/innerbox/outerbox » units
  • A basis unit can consist of units without identification called unmarked variants («umerkede varianter»)
  • Within an EPD structure, only one of the packings is used for ordering.
  • Multiple packings can be used for sale.

Some key issues we have faced with Dynamics 365 on how the industry is modelling products is the following:

  1. Cost: As seen, a product can be sold in many different UOM’s, and we also see that the industry can have different purchase prices depending on which EPD number you choose to order. Meaning that a 4 pcs pack have a different cost than a 24 pcs pack. As the product can be purchased in multiple UOM with different prices, it is difficult to model the cost pricing correctly, because the inventory transactions will be on the lowest item. The inventory transaction costing is based on the lowest level, meaning basis. This costing problem is the reason why I suggest FIFO in retail grocery implementations.
  2. On-hand: Keeping track of how many basis units, or other consumer units is difficult, because you do not always know with the consumer is breaking up a coca cola inner box. Where should the cost come from, when having multiple purchasing units as shown in figure. This makes it difficult in Dynamics 365 to 100% correctly model the revenue per pcs sold.
  3. Unit conversion: As shown in the example, the same unit (like pallet) can contain different number of basis products. This means that it is insufficient to unify the UoM per product. UoM conversion is EPD dependent. Clear relationships between the UoM must also be modelled. A product may have multiple definitions of an inner box, outer box and pallet.
  4. External item descriptions: Dynamics 365 external item description cannot be used, because it only supports one external item description per vendor. UoM is not taken into consideration.
  5. Attributes: In the grocery industry, there may be different attributes per EPD number, and also different attributes per UoM.

How to model this in Dynamics 365?

To solve the distribution requirements, we see in the grocery industry, it is required to do some front-end remodeling of how products are represented. The grocery industry are focused on packaging and Dynamics 365 is product oriented. The key here is that EPD is Object Oriented, a product can be represented in several packaging structures.

The entities we have at our disposal in Dynamics 365 is the following:

  1. Products and released products
  2. Unit of measurement and conversion
  3. Barcodes
  4. External item descriptions
  5. BOM’s

But Dynamics 365 is what is it, and any change on the architecture of how products and transactions are handled is not on the near roadmap. We must try to model this structure in a way, such that the EPD standard and Dynamics 365 standard is modelled to work jointly together.

First, lets try to model how the EPD(Only subset) from a grocery supply perspective(Not D365!). An EPD can consist of multiple packaging structures, and a package main contain packages. At the bottom of the packing structure there is a reference to a basic package, that describes the product.

 

 

When importing EPD based products I see the following as a solution:

  1. EPD will be a separate entity/Table, and modelled as the grocery industry have it.(New tables in D365, the feeds the std D365 tables)
  2. D365 products will be defined as the “Basic Package”
  3. The EPD package structure populate the barcode table and the product specific unit of measurement table. Because there is several packaging, the traditional naming of the unit of measurement cannot be used. The unit of measurement conversion is actually dependent on the EPD number. In essence, this means having unit’s of measurement named :

    PCS – Basic unit for the lowest basis product
    IB-4507224 – Unit for the inner box
    OB-4507224 – Unit for the outer box
    LC-4507224 – Unit for the load carrier

    With this we can create the unit of measurement conversion between the different types.

Let’s say we have the following simple product:

This would be modelled in D365 with a released product:

I would here have to define 4 unit of measurements:

I would then have to define the following unit conversions to describe the unit conversions between the different EPD packing structures.

The more EPD packing structures present, the more unit conversions needs to be defined. (In the coca cola example there will be 6 more conversions)

We also need to store GTIN per packing unit per EPD:

We also have the Physical dimensions menu item, that now let’s us describe the physical dimension on the product per EPD unit.

 

In Dynamics 365 we can only select one suggested purchasing unit. So if you have multiple EPD associated with a product you will have to choose one, and this is the unit that is suggested.

The purchase order would then look like this, and where the unit is describing the EPD number.

To keep track of all unit conversions, GTIN/Barcodes etc will be an impossible manual job. Since EPD is an industry standard, all of these data is imported through WEB-services.

TradeSolution have their webservices that offer the possibility to send EPD structures to D365. This way, all packing structures of products can be automatically imported, distributed into std D365 and adjusted when needed.

The suggestion is not 100%, but it would make sure that grocery retailers can procure and sell the products, while also have the concept of packing structures in place.

Let’s conquer the grocery industry also

 

 

 

 

 

 

 

D365 – What have changed (pmfTablehasChanged)

This short post is for you hardcore X++ developers that create magic everyday. D365 have the following method, that allows you to validate if any fields on a record have been changed. If it returns true, then something has changed, and if false, then nothing has been changed. There are scenario’s where you would like to know if there have been any changes to the record before you update/write to the Db, to save some roundtrips to the Db.

Then this is nice, and 100% std

Happy coding friends.

Batch Jobs; Take control of the executions

Dynamics 365 can be automated quite a lot with the use of batch jobs. With batch jobs, your Dynamics 365 solution becomes “alive”, and we can set up the system to automate many manually processes. Lets say to have the following “vanilla process”, and wants to automate as many steps as possible.



This document covers the Batch jobs needed to be setup for this process to be as automated as possible. I wanted to put a structured system on all the batch jobs that is typically used in a production system. But this also generates a lot of data, that you don’t normally need. It is therefore common to create both functional batch jobs that processes and executes functionality, and also execute cleanup jobs that removes irrelevant data.

Batch job Naming conventions

To make it simpler to understand the batch jobs a simple structure of naming the batch jobs have been created. The first character is just “A”, to make sure that the sorting of the batch jobs is in the best possible way, and that the batch jobs can be sorted according to name. The next is a 3 digit number and at the last there is a then a description that explains the batch job.

ID

Description

A001-A099

System administration batch jobs

A100-A199

Data management batch jobs

A200-A299

General ledger batch jobs

A300-A399

Procurement and sourcing batch jobs

A400-A499

Sales and marketing batch jobs

A500-A599

Retail batch jobs

A600-A699

Inventory management batch jobs

A700-A799

Warehouse management batch jobs

Reach of these ranges are then set up as batch groups, and you can better control what AOS servers is executing what type of batch jobs:


In this blog post more than 87 batch jobs have been specified, and that keeps the Dynamics 365 system updated and as automatic as possible

Job description
A001 Notification clean-up
A002 Batch job history clean-up
A003 Batch job history clean-up (custom).
A004 Daily Diagnostics rule validation
A005 Weekly Diagnostics rule validation
A006 Monthly Diagnostics rule validation
A007 Named user license count reports processing
A008 Databaselog cleanup
A009 Delete the inactivated addresses
A010 Scan for orphaned document references.
A011 Report data clean up
A012 Cryptography crawler system job that needs to regularly run at off hours.
A014 Updates system notification states.
A015 Deletes non-active and orphaned system notifications.
A016 Database compression system job that needs to regularly run at off hours.
A017 Database index rebuild system job that needs to regularly run at off hours
A018 Deletes expired email history.
A019 Process automation polling system job
A020 Scan for document files that have been scheduled for physical deletion.
A021 System job to clean up expired batch heartbeat records.
A022 System job to seed batch group associations to batch jobs.
A023 System job to clean up unrecovered user session states.
A024 Change based alerts
A025 Due date alerts
A026 Email distributor batch
A027 Email attachment distributor
A103 Entity Store Deploy measurement
A103 Refresh data entity
A200 Clean up ledger journals
A201 Import currency exchange rates
A205 Create a scheduled task that will execute the batch transfer of subledger journal entries.
A205 Update purchase and sales budget
A206 Source document line processing
A207 Source document line processing queue cleanup
A208 Ledger journal monitor
A300 Purchase update history cleanup
A300 Purchase update history cleanup
A301 Delete request for quotation
A303 Draft consignment replenishment order journal cleanup
A303 Run Forecast planning
A304 Run Master planning
A305 Post product receipt
A403 Sales update history cleanup
A405 Order packing slip
A406 Order invoice
A407 Calculate sales totals
A500 All retail distribution jobs (9999)
A501 Upload all channel transactions (P-0001)
A502 Process Assortment
A503 Update listing status
A504 Product availability
A505 Generate related products based on customer transactions
A506 Process delivery modes
A507 Synchronize orders job
A508 Update search Product data
A509 Update search Customer data
A510 DOM batch job
A511 DOM fulfillment data deletion job
A512 Default channel database batch job
A513 Recommendation batch job
A514 Retail scheduler history data removal batch job
A515 Create customers from async mode
A516 Retail transaction consistency checker orchestrator
A517 Retail transactional statement calculate batch scheduler
A518 Retail transactional statement post batch scheduler
A519 Retail financial statement calculate batch scheduler
A520 Retail financial statement post batch scheduler
A521 Process loyalty schemes
A522 Post earned points in batches
A523 Process loyalty lines for other activities
A524 Retail time zone information job
A600 Calculation of location load
A601 Inventory journals clean-up
A602 Inventory settlements clean up
A605 On-hand entries cleanup
A606 Warehouse management on-hand entries cleanup
A607 On-hand entries aggregation by financial dimensions
A608 Cost calculation details
A609 CDS – Post integration inventory journals
A700 Work creation history purge
A701 Containerization history purge
A702 Wave batch cleanup
A703 Cycle count plan cleanup
A705 Work user session log cleanup
A706 Wave processing history log cleanup
A707 WMS Replenishment
A708 Automatic release of sales orders

I will not go in detail of all the jobs, but here I at least refer to where you can find the menu item or what class is used in the batch job tasks. Also take a look at blog post by the D365 Solution architecture team, that is a subset of the batch jobs presented in this blog post.

System administration batch jobs

These are general system batch jobs that can perform cleanups and other general executions.

ID

Name, path and recurrence

Description and recurrence

A001 A001 Notification clean-up

System administration > Periodic tasks > Notification clean up

Daily

This is used to periodically delete records from tables EventInbox and EventInboxData. Recommendation would also be if you don’t use Alert functionality to disable Alert from Batch job.

A002 A002 Batch job history clean-up

System administration > Periodic tasks > Batch job history clean-up

Daily

The regular version of batch job history clean-up allows you to quickly clean all history entries older than a specified timeframe (in days). Any entry that was created prior to – will be deleted from the BatchJobHistory table, as well as from linked tables with related records (BatchHistory and BatchConstraintsHistory). This form has improved performance optimization because it doesn’t have to execute any filtering.

A003 A003 Batch job history clean-up (custom).
System administration > Periodic tasks > Batch job history clean-up (custom)

Manually

The custom batch job clean-up form should be used only when specific entries need to be deleted. This form allows you to clean up selected types of batch job history records, based on criteria such as status, job description, company, or user. Other criteria can be added using the Filter button.

A004 A004 Daily Diagnostics rule validation

System administration > Periodic tasks > Diagnostics rule validation

Daily

Incorrect configuration and setup of a module can adversely affect the availability of features, system performance, and the smooth operation of business processes. The quality of business data (for example, the correctness, completeness, and cleanliness of the data) also affects system performance, and an organization’s decision-making capabilities, productivity, and so on. The Optimization advisor workspace is a tool that lets you identify issues in module configuration and business data. Optimization advisor suggests best practices for module configuration and identifies business data that is obsolete or incorrect.
A005 A005 Weekly Diagnostics rule validation

System administration > Periodic tasks > Diagnostics rule validation

Weekly

Performs a weekly validation and diagnostics.
A006 A006 Monthly Diagnostics rule validation

System administration > Periodic tasks > Diagnostics rule validation

Monthly

Performs a monthly validation and diagnostics based on the rules.
A007 A007 Named user license count reports processing

Class : SysUserLicenseMiner

Daily

Batch job that counts number of users that have been using the system. The data is used in the Named user license count report. D365 creates this execution automatically, but you have to rename it to fit this structure.
A008 A008 Databaselog cleanup

System administration > Inquiries > Database > Database Log

Weekly

This job cleans up the database log, and makes sure that only (let’s say) 100 day’s of history remains. In the query criteria I set created date time less than “d-100”, to ensure that I keep 100 day’s of database log. This is general housekeeping and dusting in the system, and keeping the system nice and tidy.
A009 A009 Delete the inactivated addresses

Organizational administration > Periodic >Delete inactivated addresses

Weekly

Deletes addresses that have been set to inactive.
A010 A010 Scan for orphaned document references.

Class : DocuRefScanOrphansTask

Daily

Batch job that is setup automatically by the system, and scans for document references where the source record is deleted.
A011 A011 Report data clean up

Class: SrsReportRunRdpPreProcessController

Daily

Cleans up any data generated for SSRS reports.
A012 A012 Cryptography crawler system job that needs to regularly run at off hours.

Class: SysCryptographyCrawlerTask

Every 3 days

Auto created at D365 setup …Not sure what this is, yet…..
A013 A013 Data cache refresh batch

System administration > Setup >

Data cache >Data cache parameters

Every 10 minutes

The data cache framework is used to cache data sets and tiles. Enabling of the data cache framework will redirect certain queries against a cache table instead of executing them against the underlying source tables.
A014 A014 Updates system notification states.

Class : SystemNotificationUpdateBatch

Every minute

Updates notifications,
A015 A015 Deletes non-active and orphaned system notifications.

Class : SystemNotificationScanDeletionsBatch

Daily

Deletes non-active and orphaned system notifications
A016 A016 Database compression system job that needs to regularly run at off hours.

Class: SysDatabaseCompressionTask

Daily

Compresses the database
A017 A017 Database index rebuild system job that needs to regularly run at off hours

Class: SysDatabaseIndexRebuildTask

Daily

Rebuilds indexes to ensure good index performance
A018 A018 Deletes expired email history

Class: SysEmailHistoryCleanupBatch

Daily

Deletes expired email history
A019 A019 Process automation polling system job

Class: ProcessAutomationPollingEngine

Every minute

Using business events, the polling use case can be re-designed to be asynchronous if it is triggered by the business event. Data will be processed only when it is available. The business logic that makes the data available triggers the business event, which can then be used to start the data processing job/logic. This can save thousands of batch executions from running empty cycles and wasting system resources.
A020 A020 Scan for document files that have been scheduled for physical deletion.

Class: DocuDeletedFileScanTask

Hourly

Scan for document files that have been scheduled for physical deletion
A021 A021 System job to clean up expired batch heartbeat records.

Class : SysCleanupBatchHeartbeatTable

Daily

Cleans up the new internal monitoring BatchHeartbeatTable table (Only after PU32), and used for priority-based batch scheduling.
A022 A022 System job to seed batch group associations to batch jobs.

Class:
SysMigrateBatchGroupsForPriorityBasedScheduling

Daily

See priority-based batch scheduling.
A023 A023 System job to clean up unrecovered user session states.

Class:
SysUnrecoveredUserSessionStateCleanup

Daily

Cleans up sessions that is unrecovered.
A024 A024 Change based alerts

System administration > Periodic tasks > Alerts > Change based alerts

Hourly (or faster)

Events that are triggered by change-based events. These events are also referred to as create/delete and update events.

See also Microsoft docs.

A025 A025 Due date alerts

System administration > Periodic tasks > Alerts > Due date alerts

Hourly (or faster)

Events that are triggered by due dates.

See also Microsoft docs.

A026 A026 Email distributor batch

System administration > Periodic tasks > Email processing > Email distributor batch

Send emails. See also Microsoft docs.
A027 A027 Email attachment distributor Send emails, with attachments. For workflow.

Data management batch jobs

Data management executions can generate a lot of data, and to maintain performance and avoid data growth, it is relevant to clean up staging tables and job executions. Also document any of your recurring executions to make it easy and simple to maintain a overview of your data imports and exports that are recurring.

ID

Name, path and recurrence

Description

A100

[Cannot be executed in batch]

Data management workspace > “Staging cleanup” tile

Manually

Data management framework makes us of staging tables when running data migration. Once data migration is completed then this data can be deleted using “Staging cleanup” tile.

A101

A101 Job history cleanup

Data management workspace > Job history cleanup

Daily

The clean up job will execute for the specified amount of time. If more history remains to be cleaned up after the specified about of time has elapsed, the remaining history will be cleaned up in the next recurrence of the batch job or it can be manually scheduled again.

A102

A102 BOYD Data management export

Data management workspace >export in batch

Hourly

If you have a data management export to BYOD, then this can be executed in batch. There are other options that also can be evaluated for this purpose. See A102 BOYD Data management export

A103

A103 Refresh data entity

System administration à Setup à Entity Store

Monthly

To refresh the entity store (the built in embedded power BI). The refresh updates the aggregated measurements, and is only relevant of there are updates or changes that affect these.

General ledger batch jobs

ID

Name, path and recurrence

Description

A200

A200 Clean up ledger journals

Periodic tasks > Clean up ledger journals

Weekly

It deletes general ledger, accounts receivable, and accounts payable journals that have been posted. When you delete a posted ledger journal, all information that’s related to the original transaction is removed. You should delete this information only if you’re sure that you won’t have to reverse the ledger journal transactions.

A201

A201 Import currency exchange rates

Currencies > Import currency exchange rates

Daily

Automatically imports exchange rates from the bank.

A202

A202 Purchase budget to ledger

Inventory management > Periodic tasks > Forecast updates > Purchase budget to ledger

Monthly

Posts the purchase budget to ledger

A203

A203 Sales budget to ledger

Inventory management > Periodic tasks > Forecast updates > Sales budget to ledger

Monthly

Posts sales budget to ledger

A204

A204 Update purchase and sales budget

Inventory management > Periodic tasks > Forecast updates > Update purchase and sales budget

Monthly

Updates the purchase and sales budget.

A205

A205 Create a scheduled task that will execute the batch transfer of subledger journal entries.

General Ledger > Periodic tasks > Batch transfer for subledger journals

Daily

Batch transfer for subledger journals

A206

A206 Source document line processing

Class: SourceDocumentLineProcessingController

Every 10 minutes

Used for accounting distribution. See Microsoft docs.

A207

A208 Source document line processing queue cleanup

Class: SourceDocumentLineProcessingQueueCleanupController

Weekly

Used for cleaning up accounting distribution. See Microsoft docs.

A208

A208 Ledger journal monitor

Class: LedgerJournalTableMonitorController

Every 6 hours

Monitors if ledger journals should be blocked or opened.

Procurement and sourcing batch jobs

ID

Name, path and recurrence

Description

A300

A300 Purchase update history cleanup

Periodic tasks > Clean up > Purchase update history cleanup

Weekly

This is used to delete all updates of confirmations, picking lists, product receipts, and invoices generate update history transactions.

A301

A301 Delete request for quotation

Periodic tasks > Clean up > Delete requests for quotations

Manually

It is used to delete requests for quotation (RFQs) and RFQ replies. The corresponding RFQ journals are not deleted, but remain in the system.

A302

A302 Draft consignment replenishment order journal cleanup

Periodic tasks > Clean up > Draft consignment replenishment order journal cleanup

Weekly

It is used to cleanup draft consignment replenishment order journals.

A303

A303 Run Forecast planning

Master planning > Forecasting > Forecast planning

Weekly

Demand forecasting is used to predict independent demand from sales orders and dependent demand at any decoupling point for customer orders. See also at Microsoft docs, where using additional azure services to perform the calculation.

A304

A304 Run Master planning

Master planning > Master planning > Run > Master planning

Daily

Master planning is used to generate planned (purchase) orders, based on the coverage settings. We expect this service to be enhanced with more real-time oriented planning engine. The master planning batch job execution is located at. Also check out the Microsoft docs on this (large) subject.

A305

A305 Post product receipt

Procurement and Sourcing > Purchase orders > Receiving products > Post product receipt

Automatically post purchase receipt when all lines have been registered,

Sales and marketing batch jobs

ID

Name, path and recurrence

Description

A400

A400 Delete sales orders

Periodic tasks > Clean up > Delete sales orders

Manually

It deletes selected sales orders.

A401

A401 Delete quotations

Periodic tasks > Clean up > Delete quotations

Manually

It deletes selected quotations.

A402

A402 Delete return orders

Periodic tasks > Clean up > Delete return orders

Manually

It deletes selected return orders.

A403

A403 Sales update history cleanup

Periodic tasks > Clean up > Sales update history cleanup

Weekly

It deletes old update history transactions. All updates of confirmations, picking lists, packing slips, and invoices generate update history transactions. These transactions ca be viewed in the History on update form.

A404

A404 Order events cleanup

Periodic tasks > Clean up > Order events cleanup

Weekly

Cleanup job for order events. Next step is to remove the not needed order events check-boxes from Order event setup form.

A405

A405 Order packing slip

Sales order > Ordershipping > Post Packingslip

Hourly

Set up automatic packingslip posting of the sales order is completely picked. (If this is the process). This means that as soon as the WMS have picked the order it gets packingslip updated.

A406

A406 Order invoice

Accounts payable > Invoices > Batch invoicing > Invoice

Hourly

Set up automatic invoice posting of the sales order is completely packingslip updated. (If this is the process).

A407

A407 Calculate sales totals

Periodic tasks > Calculate sales totals

Recalculate the totals for the sales order. This is typically used in scenario’s when the sales order is part of a “Prospect to cash” scenario. See docs.

Retail batch jobs

ID

Name, path and recurrence

Description

A500

A500 All retail distribution jobs (9999)

Retail and Commerce > Retail and Commerce IT > Distribution schedule

Hourly

This batch job is sending all distribution jobs to the retail channel database. This data like products, prices, customers, stores, registers etc. The distribution job is a “delta” distribution, meaning that only new and changed records are sent. There is a lot of more to be discussed on how to optimize the 9999-distribution job, and for really large retail installations some deep thinking is required. For smaller installations it should be OK to just use the setup that is automatically generated when initializing D365 retail/Commerce.
A501

A501 upload all channel transactions (P-0001)

Retail and Commerce > Retail and Commerce IT > Distribution schedule

Hourly

The P-0001 is sending the retail transactions back from the POS to the D365 HQ, where the retail transactions can be posted and financially updated.
A502

A501 Process Assortment

Retail and Commerce > Retail and Commerce IT > Products and Inventory > Process Assortment

Hourly

This job processes the assortment based on the assortment categories set on an item, and based on the assortment set up, puts the items in the relevant stores’ assortment. When defining an assortment, you have in D365 the possibility to connect organization hierarchies to retail category hierarchies. The process assortment will perform the granulation of this, so that D365 have a detailed list of each product that is present in each store. The assortment is setup under Retail and Commerce à Catalogs and assortments à Assortments and more details is available on Microsoft docs.
A503

A503 Update listing status

Retail and Commerce > Retail and Commerce > Products and Inventory > Update listings

Daily

The listing status is related to publishing a retail catalog to an online store. The Microsoft documentation is not the best in this area, and the closes explanation I have is that it is related to the listing status on the catalog.
A504

A504 Product availability

Retail and Commerce > Retail and Commerce > Products and Inventory > Product availability

Daily

The batch job for product availability is calculate if a product is available on online store. Checkout this blogpost for further details. SiteCore eCommerce integrations can benefit from this, and in essence it populates the data needed for distribution job 1130, and that maintains the following tables into the channel database
A505

A505 Generate related products based on customer transactions

Retail and Commerce > Retail and Commerce IT > Products and Inventory > Generate related products

Daily

This job will automatically populate related products based on sales transaction purchase history. The two relationships created are ‘customers who bought this item also bought’ and the ‘frequently bought together’ relation types. This data can then further be used in eCommerce scenario’s. Fore deep details, take a look at the class ‘RetailRelatedProductsJob’
A506

A506 Process delivery modes

Retail and Commerce > Retail and Commerce IT > Products and Inventory > Process delivery modes

Daily

This job sets up delivery modes on a new store when added to organization hierarchy ‘retail store by department’. On the modes of delivery you can assign a organizational hierarchy, and this batch job assigns the specific modes of deliveries to each store. The modes of delivery is used in omnichannel scenario’s where the customer can have their products sent home etc.
A507

A507 Synchronize orders job

Retail and Commerce > Retail and Commerce IT > Synchronize orders

Hourly

If you have setup your channels to create sales order asynchrony, this job will create the sales orders and post payments. Also take a look at the following Microsoft docs on how sales orders and payments are synchronized from an online store.
A508

A508 Update search Product data

Sales and marketing > Setup > Search> Search criteria

Daily

Create an indexed search of products, that makes it faster and easier to search for products in the call center.
A509

A509 Update search Customer data

Sales and marketing > Setup > Search> Search criteria

Daily

Create an indexed search of customers, that makes it faster and easier to search for customers in the call center.
A510

A510 DOM batch job

Workspace > Distributed Order Management > Dom processor job setup

Hourly

Run distributed order management on retail sales orders to determine what warehouse should deliver the sales order
A511

A511 DOM fulfillment data deletion job

Workspace > Distributed Order Management > DOM fulfillment data deletion job setup

Daily

Cleans up the DOM data that is no longer the valid calculation.
A512

A512 Default channel database batch job

Class : RetailCdxChannelDbDirectAccess

Every 3 minutes

This job main duty is to check all Download sessions and Upload sessions with status “Available”, then it will apply the data to respective target DB’s (AX or channel DB). See also this blog.
A513

A513 Recommendation batch job

Class FormRunConfigurationRecommendationBatch

Weekly

Se Microsoft docs.
A514

A514 Retail scheduler history data removal batch job

Retail and Commerce > Headquarters setup > Parameters > Retail scheduler parameters

Class: RetailCdxPurgeHistory

Daily

Deletes CDX history. Typical only keeping 30 days of CDS history
A515

A515 Create customers from async mode

Retail and Commerce > Retail and Commerce IT > Customer > Create customers from async mode

Hourly

If customers should be created async (parameter), then this job will create the customer.
A516

A516 Retail transaction consistency checker orchestrator

Retail and Commerce > Retail and Commerce IT > POS posting > Validate store transactions

Hourly

Performs validation on the unposted POS transactions. See Microsoft docs.
A517

A517 Retail transactional statement calculate batch scheduler

Retail and Commerce > Retail and Commerce IT > POS posting > Calculate transactional statement in batch

Hourly (of faster)

Retail statement Trickle feed transactional calculate. Creates transactional statement. Se the following blog post.
A518

A518 Retail transactional statement post batch scheduler

Retail and Commerce > Retail and Commerce IT > POS posting > Post transactional statement in batch

Hourly (of faster)

Retail statement Trickle feed transactional calculate. Create and posts sales orders. Se the following blog post.
A519

A519 Retail financial statement calculate batch scheduler

Retail and Commerce > Retail and Commerce IT > POS posting > Calculate financial statement in batch

Daily

Retail statement Trickle feed financial statement calculate. Creates financial statement. Se the following blog post.
A520

A520 Retail transactional statement post batch scheduler

Retail and Commerce > Retail and Commerce IT > POS posting > Post financial statement in batch

Daily

Retail statement Trickle feed financial calculate. Posts shift declaration Se the following blog post.
A521

A521 Process loyalty schemes

Retail and Commerce > Retail and Commerce IT > Loyalty > Process loyalty schemes

Processes loyalty schemes. See Microsoft docs.
A522

A522 Post earned points in batches

Retail and Commerce > Retail and Commerce IT > Loyalty > Post earned points in batches

Loyalty points should be posted in batch. See Microsoft docs.
A523

A523 Process loyalty lines for other activities

Retail and Commerce > Retail and Commerce IT > Loyalty > Process loyalty lines for other activities

Other Loyalty points in batch. See Microsoft docs.
A524

A524 Retail time zone information job

Monthly

Generates timezone information up until 2054. Ensures that timezone used in the store does not causes inconsistent dates.

Inventory management batch jobs

ID

Name, path and recurrence

Description

A600

A600 Calculation of location load

Inventory management > Periodic tasks > Clean up > Calculation of location load

Daily

WMSLocationLoad table is used in tracking weight and volume of items and pallets. Summation of load adjustments job can be run to reduce the number of records in the WMSLocationLoad table and improve performance.

A601

A601 Inventory journals clean-up

Inventory management > Periodic tasks > Clean up > Inventory journals cleanup

Weekly

It is used to delete posted inventory journals.

A602

A602 Inventory settlements clean up

Inventory management > Periodic tasks > Clean up > Inventory settlements cleanup

Manually/Yearly

 

It is used to group closed inventory transactions or delete canceled inventory settlements. Cleaning up closed or deleted inventory settlements can help free system resources.

Do not group or delete inventory settlements too close to the current date or fiscal year, because part of the transaction information for the settlements is lost.

Closed inventory transactions cannot be changed after they have been grouped, because the transaction information for the settlements is lost.

Canceled inventory settlements cannot be reconciled with finance transactions if canceled inventory settlements are deleted.

A603

A603 Inventory dimensions cleanup

Inventory management > Periodic tasks > Clean up > Inventory dimensions cleanup

Manually/Yearly

This is used to maintain the InventDim table. To maintain the table, delete unused inventory dimension combination records that are not referenced by any transaction or master data. The records are deleted regardless of whether the transaction is open or closed.

Inventory dimension combination record that is still referenced cannot be deleted because when an InventDim record is deleted, related transactions cannot be reopened.

A604

A604 Dimension inconsistency cleanup

Inventory management > Periodic tasks > Clean up > Dimension inconsistency cleanup

Manually/Yearly

This is used to resolve dimension inconsistencies on inventory transactions that have been financially updated and closed. Inconsistencies might be introduced when the multisite functionality was activated during or before the upgrade process. Use this batch job only to clean up the transactions that were closed before the multisite functionality was activated. Do not use this batch job periodically.

A605

A605 On-hand entries cleanup

Inventory management > Periodic tasks > Clean up > On-hand entries cleanup

Monthly

This is used to delete closed and unused entries for on-hand inventory that is assigned to one or more tracking dimensions. Closed transactions contain the value of zero for all quantities and cost values, and are marked as closed. Deleting these transactions can improve the performance of queries for on-hand inventory. Transactions will not be deleted for on-hand inventory that is not assigned to tracking dimensions.

A606

A606 Warehouse management on-hand entries cleanup

Inventory management > Periodic tasks > Clean up > Warehouse management on-hand entries cleanup

Weekly

Deletes records in the InventSum and WHSInventReserve tables. These tables are used to store on-hand information for items enabled for warehouse management processing (WHS items). Cleaning up these records can lead to significant improvements of the on-hand calculations.

A607

A607 On-hand entries aggregation by financial dimensions

Inventory management > Periodic tasks > Clean up > On-hand entries aggregation by financial dimensions

Weekly

Tool to aggregate InventSum rows with zero quantities.

This is basically extending the previously mentioned cleanup tool by also cleaning up records which have field Closed set to True!

The reason why this is needed is basically because in certain scenarios, you might have no more quantities in InventSum for a certain combination of inventory dimensions, but there is still a value. In some cases, these values will disappear, but current design does allow values to remain from time to time.

If you for example use Batch numbers, each batch number (and the combined site, warehouse, etc.) creates a new record in InventSum. When the batch number is sold, you will see quantity fields are set to 0. In most cases, the Financial/Physical value field is also set to 0, but in Standard cost revaluation or other scenarios, the value field may show some amount still. This is valid, and is the way Dynamics 365 for Finance and Operations handles the costs on Financial inventory level, e.g. site level.

Inventory value is determined in Dynamics 365 for Finance and Operations by records in InventSum, and in some cases Inventory transactions (InventTrans) when reporting inventory values in the past. In the above scenario, this means that when you run inventory value reports, Dynamics 365 for Finance and Operations looks (initially) at InventSum and aggregates all records to Site level, and reports the value for the item per site. The data from the individual records on Batch number level are never used. The tool therefore goes through all InventSum records, finds the ones where there is no more quantity (No open quantities field is True). There is no reason to keep these records, so Dynamics 365 for Finance and Operations finds the record in InventSum for the same item which has the same Site, copies the values from the Batch number level to the Site level, and deletes the record. When you now run inventory value reports, Dynamics 365 for Finance and Operations still finds the same correct values. This reduced number of InventSum records significantly in some cases, and can have a positive impact on performance of any function which queries this table. 

A608

A608 Cost calculation details

Inventory management > Periodic tasks > Clean up > Cost calculation details

Monthly

Used to clean up cost calculation details.

A609

A609 CDS – Post integration inventory journals

Inventory management > Periodic tasks > CDS integration > Post integration inventory journals

Fetches journals from the CDS (Common Data Service) and posts them. This applies only of the CDS is in use.

Warehouse management batch jobs

ID

Name, path and recurrence

Description

A700

A700 Work creation history purge

Warehouse management > Periodic tasks > Clean up > Work creation history purge

Weekly

This is used to delete work creation history records from WHSWorkCreateHistory table based on number of days to keep the history provided on dialog.

A701

A701 Containerization history purge

Warehouse management > Periodic tasks > Clean up > Containerization history purge

Weekly

This is used to delete containerization history from WHSContainerizationHistory table based on number of days to keep the history provided on dialog.

 

A702

A702 Wave batch cleanup

Warehouse management > Periodic tasks > Clean up > Wave batch cleanup

Weekly

This is used to clean up batch job history records related to Wave processing batch group.

A703

A703 Cycle count plan cleanup