About Kurt Hatlevik

I appreciate that I can be a part of this worldwide blog community—as a consultant working from Norway, the blog lets me share more than 20 years of experience with Microsoft Dynamics 365. Along the way, I participated in developing retail, PDA/RF, barcoding, master data, kitting and WMS-solutions for Dynamics. My blog focuses on my deepest interests and expertise: along with a 360 degree view of digital transformation topics, I welcome opportunities to dive into retail and intercompany supply chain automation, logistics, and production—everything that is moving around in a truly connected enterprise. As Enterprise Architect on Dynamics 365, I specialize in strategic development and planning for corporate vertical solutions and works to build international networks that increase knowledge and understanding for Dynamics 365. As an advocate for both providers and customers, I'm committed to ensure that customers constantly changing needs are meet, and I see community as key for increasing expertise. I welcome you to connect with me.

Dynamics 365 for Finance and Operations On-Prem

Now the On-Prem system requirements are available : https://www.microsoft.com/en-us/download/details.aspx?id=55496

To get it running the minimum recommended requirements are:

Total Number of instances(VM/Machines) : 21

Total number of CPU cores : 104

Total Memory : 408 Gb

This minimum configuration will estimated be able to support 240-1200 users.

To sum it up: Go Cloud . Much smarter.

Localized Dynamics 365 documentation

The transitioning from ax.help.dynamics.com to http://docs.microsoft.com/en-us/dynamics365/operations is going great. One of the benefits is that we now have localized documentation.

So if you prefer to look at the documentation in Chinese URL : https://docs.microsoft.com/zh-cn/dynamics365/operations/

If you like Norwegain try https://docs.microsoft.com/nb-no/dynamics365/operations/


Dynamics 365 CSP; What happens when a customer is not paying their monthly bill?

Disclaimer: In this blog post I would like to share my understanding on what is happening when customers no longer pay their bill for Dynamics 365. Please consult with your partner or Microsoft to get the actual and official interpretation.

First some definitions; Most mid-size customers will buy Dynamics 365 through a partner that is a CSP (Cloud Solution Provider). Larger corporations will have the opportunity to buy Dynamics 365 directly from Microsoft through a EA (Enterprise Agreement). The information here is related to the CSP way of purchasing licenses.

When buying Dynamics 365, most customers will receive a monthly bill from their CSP partner. But the great thing about the CSP, is that you may adjust the number of users for the next period. Dynamics 365 have a low limitation of 20 licenses, but above this the customer may make changes.

But keep in mind that even though you receive a bill for the upcoming month, there is still a commitment for the base subscription period. For Dynamics 365, the subscription period is normally 12 months. I think I finally understood why the name is Dynamics 365; The reason may be that you have to buy it for at least 365 days

As stated earlier the customer normally receives a bill each month. But what happens when the customer stops paying the bills?

1. Well first the normal procedure is that the customer is notified by their CSP that payments are missing that follows the normal procedure.

2. The next step is that the CSP partner will suspend the subscription. This is done when by changing the status on the subscription to “Suspended”.

3. When a subscription status is changed to “Suspended”, this puts the subscription into a “data retention” mode. This means that end-users will not have access to any services, but administrators will still have access to the data associated with this subscription.

4. At the end of 60 days after a subscription is Suspended, the subscription is moved to a “de-provisioned” state. At this time, all data is removed.

The conclusion is therefore; Pay you bill or lose your data.

When I think of it…… it’s just like paying your electric bill.. no pay…no power.



Dynamics 365; New VM type cut your Azure bill

When deploying your Azure based VM’s the most common VM Size is D13 with 8 cores and 56 GB RAM. This VM costs approx. 924 USD per month according to the pricing calculator.

Microsoft have made some new sizes available :


The new size is named D13 V2 Promo, and will cost 749 USD. If you have MSDN the costs are further reduced to 429 USD/Month

You cannot select this size in LCS, so you must log into your azure portal after deploying, and change the size there.


Dynamics 365 ideas

Microsoft have released a new site for posting and voting on ideas to the Dynamics 365. https://ideas.dynamics.com

It is assumed that this is replacing all other forum and sites, like connect, yammer etc for suggesting new and exiting functionality. It covers the entire Dynamics 365 stack, and the concept is that each person can suggest and vote on up to 50 suggestions per forum. Microsoft have also created statuses on each suggestion, and additional comments can be added by registered participants.

A small suggestion to Microsoft on the site; Allow us to use our ADFS login, and not just our Live-ID login. (I guess I have to create a suggestion for this)


D365FO Channels, Insiders Preview and Update Policy

As announced with the update 4, Microsoft will release monthly updates so that new and existing environments can stay up-to-date with the latest innovations with a click of a button. Hopefully this make it easier to stay on the newest platform. We are also assuming and hoping that this approach in the future will extend to also cover business functionality (eg ApplicationSuite). A faster update cycle also results that there are more versions currently used in at customers. As seen here are all the official releases that Microsoft have made available for Dynamics 365 for operations. With a monthly update cycle the list will be extended quickly. Keeping track on versions does not give any actual customers value. But in a SaaS approach, creating faster and simplified updated on business functionality will require a better and more visible release policy, not based on build numbers.

We need to make this upgrade and update experience easier to understand and easier to follow. The work that the Microsoft Office and Windows team have done is a great example that I think is something we also should have for Dynamics 365: The introduction of release channels.

Update channel

Primary purpose

Feature updates

Platform updates

Security Updates

Preview Channel

Provide users to evaluate the newest features of Dynamics 365 as soon as possible. The channel is only available through an insider program, and is not deployable into a production environment.




First Channel

Provide users with the newest features of Dynamics 365.




Current Channel

Provide users with the released and stable features of Dynamics 365.

Every 3 months



Deferred Channel

Provide users with new features of Dynamics 365 only a few times a year.

Every 6 months




What channel you would like to have should be a setting in LCS, and the customers can switch between the channels as wanted. Visually the release and update schedule could then look something like this.

With the introduction of Microsoft AppSource and for ISV’s this would mean that they could commit to a specific channel, and “front-runners” like myself would have early access to the newest and hottest. Some customers are deadly serious about stability, and new features could potentially cripple business processes. In this way customers can for them self’s decide their speed for adding new functionality.

Dear Microsoft; Can we have something like this also for Dynamics 365?








D365FO – Test & Feedback

Visual Studio Team Services Marketplace contains a ton of jewels, and one add-in I like a lot is the Test & Feedback extension to VSTS:

When installing it, you get a small icon in Chrome, where test and feedback can be given.

When setting it up, you just point to the VSTS site :

And then you are ready to start giving feedback, and to collect backorders, bugs or tests.

Let’s say I wanted the implementation team to know that some changes are necessary on the “All Customers” form. I then click on the feedback button, and click on “start recording”

While navigating and taking screenshots, notes and video, it all gets recorded, with URL, time etc.

When done with my recording I want to create a bug, test or create a test case:

In this case, create a bug, and while I’m typing I can even see that there are one similar bug already reported.

After saving the bug. I see that a bug have been created in VSTS:

I now have a complete bug report in VSTS, that the consultants can start to process and to identify if this is a bug or an “as designed” feature

This means that in a Dynamics 365 project where VSTS is the central element, the feedback and testing just got simpler.

The feedback and Test extension do contain a lot more, but the rest you have to explore for yourself. Try out video recording . That is really cool.




Warehouse Performance Power BI pack

Just a small reminder to my digital brain, that Microsoft have released a Microsoft PowerBI pack aimed for the WMS industry. Here are some samples.

Inbound – Measure vendor delivery precision. Measure put-away average times for products, and vendors, and be able to measure how fast your workers are processing put-away work.

Outbound – Measure how many of the shipments are send in full and on time. We provide ability to measure early, late and on time shipments in order to monitor outbound performance and endure high customer service levels.

Inventory accuracy (Warehouse itself) – Every warehouse needs to have high inventory accuracy on locations in order to be able to process shipments correctly. Measure inventory accuracy for locations and items based on inventory counting with full visibility into discrepancies in quantity and percentage. We provide easy way to monitor counting performance, and inventory accuracy for items on locations


Where can you find this package ?

In the LCS- shared asset library:

Thanks Yi Zhang !

The new Warehousing App

Microsoft have released the new warehouse APP, and the setup instructions can be followed here : https://ax.help.dynamics.com/en/wiki/install-and-configure-dynamics-365-for-operations-warehousing/

You can download the Windows App here: https://www.microsoft.com/en-us/store/p/dynamics-365-for-operations-warehousing/9p1bffd5tstm

The setup instructions are very good, and in 10 minutes you should be able to get the app working as expected in your windows 10 machine. The App also have a demo-mode that lets you try it out, without having to connect it to an environment.

Here are some pictures for you pleasure.

Thank you Markus J

Retail process modeling; Divide and conquer

I normally don’t share much that is considered as employer specific IP/tools, but today I will do an exception. At EG we have for years been focusing on how to address the business processes for the Retail industry, and how to name and classify these processes. By combining the structure APQC business process mapping and classification with the essential understanding on how to improve and implement the retail business processes. This means we have a that a predefined approach for scoping and planning retail implementations. The key to this model, is to ensure that we can have a good scoping and planning phased retail implementations based on the customers actual processes.

The top level in the EG Retail model we group all epic processes into “Management processes“, Operating processes” and “Support processes” as seen in the following picture. Then we have broken each process into sub-processes(Levels), pretty much according to APQC.


Level 1 – Operating processes

The Operating processes are the day-to-day processes taking place in at a retailer. We have divided the level 2 processes into 5 specific areas as seen in the figure below.

1. Category management is all about grouping products into hierarchies with similar properties and attributes. This makes it possible to give responsibilities and parameters on group levels, instead of on SKU level.

2. Sourcing and procurement is about making sure that we have the products available on the store/channels available for sale. This means working with vendors and producers, and to have clear planning strategies.

3. Retail logistics is processes that typical happens at the central warehouse, and when replenishment to stores is needed, then it is sent at the right time.

4. Omni channels is about being available to customers on multiple platforms and through the customers purchase experience. It stretches from brand awareness, store, web, mobile, loyalty and after sales processes.

5. Store operations is what is happening at the physical store.

Each of these level 1 the retail processes have been split into the following level 2 processes. In the column 1 we have the parent process, and below we have the sub-processes in the horizontal boxes.

We can further look deeper into the category management processes and we see the following level 3 sub processes. You can see the red boxes in the level 1, have been moved to the first column in level 2, and then the sub-processes are shown in the horizontal columns.

For each and every retail process we break the processes down to level 3 or level 4, and we then also decide on how we are solving each of these sub processes. This is done by color coding the processes. As you can see in the following picture, you see that most is solved in standard Dynamics 365, but also with some 3-party products. There are also processes that is not covered by the solution stack available currently.

At level 3 we have mapped each of these processes into APQC and into the LCS business process modeler. When we take the level 3 process called “Define categories” we have a relevant APQC process named 2.1.1, and this means that we(or APQC Members) can extract som KPI’s to allow us to define how this process are performing.

Together with APQC we can use these KPI’s to measure how good this process if performing, and also compare the process with similar retailers also using the same KPI’s. This tells us if the process needs to be improved to achieve more.

Microsoft released a new APQC library in November 2016, that is available in LCS, and here Microsoft have defined 3774 business processes and have 617 flow charts for Microsoft Dynamics 365 for Operations. This gives us a further ability to map the processes directly into Dynamics 365. Here I have searched for “category” to see what APQC and Dynamics 365 processes are supported.

Using the process mapping to create a implementation plan.

When we are working with our customers, we build a scope plan quickly, and define what processes we what to start with, and what to postpone into future projects. We can be clear about the how quickly the ROI can be, and that we can start on business processes where we today have low performing processes. In the sample scoping below, I show how we can start with the stores, then in project 2 enable the HQ suppy chain/replenishment and then finally start a project where logistics to the stores are in scope.

This means we can do project phased retail implementations within the budgets for the retailer. Each of the “Boxes” also contains process descriptions, VSTS backlog and task lists, UAT test scripts and workshop agenda’s. This means that when running a retail project, we don’t have to start with a blank whiteboard.

In addition the model have been mapped into Visual Studio Team Services. This means that the Retail model is also a implementation model for than can be used by project managers, consultants, developers, customer super users and stakeholders.


I hope this gives you some ideas on how we are approaching the retail market from a business process standpoint, and delivering our implementation as predefined repeatable services where Azure, Office365, LCS, VSTS, ODM and all the other good Microsoft services are used to the full extent.

Retail is detail, and the future is bright J

Check out KB 3206881 – New image preview control

Microsoft have released a hotfix on the document preview control, and this is actually quite cool. In the following picture you see the preview pane have been updated with some new buttons.

Now we have ordinary functions like move, zoom, print, but we also have highlight, Blocking and some text functions.

This means we can make direct changes to the attached images, and this is interesting when we have scanned copies of invoices or any other document.

In the following picture, I have just highlighted some parts, and blocked some texts. I have also added a text of my own.

Why is this interesting? Because good developers is experts in “copy-with-pride” solutions. And we now have a new web-enabled control that allows us to create new extended solutions for handling scanned documents.

I expect that we very soon will see small invoice approval apps available at a fraction of the price we have seen before, and that is using this feature.

Try it out J It’s Cool.


Warning; Generate Demodata; Financial period close

Dynamics 365 for Operations have a nice feature for generating demo data.

Here is my 1000 $ tip!

This class is only meant for generating demodata in the Contoso dataset, and will corrupt and delete any real data you may have created. If you take a look at the class LedgerPeriodCloseWorkspaceDataCreation that will generate month end financial closing data you see that it only works towards specific contoso companies and personas defined in the contoso company.

There is also a method executed in the beginning, that just deletes data, and makes sure any data you may have generated is just gone.

Why Microsoft have decided to include this “Demo-data” package in the implementation deployment I don’t understand……

…and if you wonder; Yes, I did this mistake.

Try Dynamics 365 now

Microsoft is currently holding an online virtual Dynamics 365 launch party and I’m happy to see that Microsoft is delivering as promised. Take a look at it here:

What Microsoft also have made available is a trial experience of Dynamics 365 for Operations. That is available here. What you get is an access to a 30 day multi-tendent trial experience, where basic testing can be taken place. In my case I got company number 037, and I cannot access other trial users company J

In this first release you will have limited access to 3 basic processes as defined in the trial experience task recording. You can try to navigate around, but you have very limited access to create customers/vendors/products etc. Important: This is NOT a full feature trial, and you NEED to follow the task guides as your guide to Dynamics 365.

Remember that Microsoft is constantly refining and improving the trial experience, and if you want a full-blown trial you need to contact a Dynamics 365 partner that can help you set this up. Later Microsoft will release additional trial experiences, and also support localized trial experiences. Other industry based trials are on the way, like Retail/POS experiences.

Check it out!

My Dynamics 365 FastTrack experiences

If you have not heard about the Microsoft FastTrack program for Dynamics 365 on-boarding, then this is the post for you. So, to say it simple; the FastTrack program is Microsoft’s involvement after the licenses have been purchased to get you fast up and running on the cloud platform.

It starts when the licenses have been purchased through the CSP-portal (or through a EA agreement), and lasts until the live production system have been deployed.

When a Dynamics 365 deployment should start, we get a checklist of tasks that need to be completed when we move from one stage to another. The LCS implementation project looks a bit different than the ordinary LCS projects.

As you can see here there are a lot of checks that needs to be confirmed before going live. In the process, some guidance is needed, and Microsoft is giving this as a service included in the license. As the implementation goes forward Microsoft is conducting some bi-weekly workshops, where each meeting has a predefined agenda with information and some room for discussions and guidance. The touchpoints are divided between actual workshops using Skype 4 Business and Tech Talks that is a kind of webinar session.

In the FastTrack program there is a role and responsibility, that is explaining what is expected from the parties involved in a Dynamics365 rollout.

I have been lucky, and have been involved in a complete cycle, and I have to say that I’m impressed how this FastTrack program works. As the Dynamics 365 is quite new, and the entire Dynamics ecosystem is trying to absorb the information made available, it is easy to get lost and to think that implementations are conducted in the same way as earlier. If you expect that some hardcode system administrator/developer can jump into the sandbox/production environments, then you are wrong. Now things have to happen in a sequence and have to follow predefined quality steps to ensure that we get a rock-solid production environment.

Our FastTrack contact have always been available and have given us the “light touch” on the shoulder to guide the implementation and expectations. Remember that FastTrack is not about business processes, masterdata and project management. That is still handled outside of this program.

A small and important reminder; remember that you have to purchase your implementation licenses, and remember that you could start small, and ramp up you license count as needed.


Testing Microsoft Flow for CRM –> AX integration

A few days ago Microsoft have the Flow connector available for preview, and you can read more about it here. What I wanted was to see if I could make a very simplified flow, where a customer is created in CRM, and then transferred to Dynamics AX.

The flow therefore consists of the following steps, when a record is created in CRM, a customer is created in AX. After that, I wanted an email to be sent to me.

To test this flow, I created a Customer in CRM online.

Then I waited for a few second, and then the customer was visible in AX. I just became very impressed.

I also received an email, telling me that a new customer was created in AX from CRM, and that made be even more happy.

If I when in and analyzed what happened, I could trace the entire integration in Flow, and also see how much time spent on processing each step. In this case, I see that AX used 10 seconds to process the JSON/ODATA message, and spent 3 seconds to sending me an email that the record was created.


Here are the steps I used to create this flow. First I select the Flow action “Dynamics CRM Online – When a record is created”.

Then I specify the organization and the entity name: Accounts

Next I add the action Dynamics AX Online – Create a record

And I select the instance, and what user I should log in with. I also select the entity name: Customers, and select to only transfer the Account number and Account name into the AX entity. Some of the other fields, I choose to hardcode for simplicity reasons.

The last step is to send an email to myself

Some summary.

Using Dynamics AX with flow will certainly be the way forward on how we integrate AX with CRM and all kinds of other 3’rd party systems. It is still in preview, and the next thing we are waiting for is that Dynamics AX can get reactive, and then when a record is created or modified inside AX, this can trigger a flow. But Microsoft have promised that this is on its way. Also remember that this tool has its current restrictions and that we need to be patient and let Microsoft further develop and improve its capabilities. But for easy and simple integrations I would call this as a unique opportunity to get rid of complex and time consuming integrations. As long as you keep it simple it works as intended.

Thanks Microsoft, keep it coming!

Dynamics AX Retail Scale Unit

In the AX Licensing Guide from february 2016 Microsoft announced a new add-on to retail called; Retail Scale Unit.

Retail Scale Unit

As part of our future offering, we are considering offering a scale unit (Retail Scale Unit) that will enable businesses to run in distributed environment across datacenters to support proximity to physical locations
as well as allow distributed storage and help scale out needs of retail and commerce operations. This offering will allow the ability to add one or more identical scale units that can meet the transactional compute needs of retail and commerce channels. Additional details coming soon.

Even though details have not yet been disclosed on what or how it works, it is now available on sites where you buy Microsoft Licenses. Even prices are available, and it is a service priced per month.

Try to google-search on “E3307B7FD0C149AE9B95E4707C9D1AD7” and you will see distributors that are having this SKU/product in their assortments. Stay tuned as more will be explained as Microsoft makes more information available, but this is great stuff for all retailers!





Dynamics 365; Hello CDM

The Common Data Model was today as promised made available in preview through PowerApps, and gave us insight on how it works. You need to take a log at the following blog posts. Your entry point for starting to explore CDM is http://powerapps.microsoft.com

Let’s jump past
all introductions take a small look at the products made available the sample demo data when the CDM database is created. After the sample CDM database is created you will have access to the entities here

Then find the entity named Product. Then click on the “Open in Excel

After logging in I start to see some similarities to what we have in the new Dynamics AX. It’s the same excel app on the right side.

It is even the Contoso data, and as highlighted here I’m showing the item 1000 – the good old Surface Pro 128 Gb J


Now start your journey into the CDM. It will be the backbone and foundation of our entire Dynamics 365 stack.



Dynamics 365, PowerApps, Flow and Common Data Model

This summer at WPC Microsoft unveiled the Dynamics cloud strategy by explaining their new initiative named Dynamics 365. Let me say it very short; IT ROCKS !

A good Q&A blog explaining it is this blog post from James Crowter. The essence is that the Dynamics 365 will be available in 2 editions; Business (cloud based NAV-edition) and Enterprise (new Dynamics AX, aka AX’7′). In addition, Microsoft have also launched the AppSource that can help finding the right business apps available from other ISV/VAR’s. This is a great offer to customers, where 3rd party apps and extensions can be previewed.

As the new name implies ‘Dynamics 365’, there will be a tight connection to the Office 365 package. Is there something Microsoft is good at, it is cross-selling and building strong dependency though the entire stack of Microsoft technology. This will further strengthen the offering. Some concerns are that the total offering could be regarded as an increase in costs. Very often we see customers comparing their offer based on the wrong assumptions, and where on-premises offers are compared with cloud and SaaS offerings. This will give the wrong perspective, because often in on-premises solutions don’t include all costs related to implementation and running the systems. What looks as cheap today may in the longer run actually result in higher costs and the build-up of a technological debt. When making the classic tradeoff decisions in technology, make sure you understand the implications.

Dynamics 365 is more than just a rebranding, and the introduction of the new Common Data Model(CDM) is the glue(database) that will stick all pieces/entities together. We can expect that in future, all the components will be working together across the ordinary product lines as we know it today. Customers will download a app, and don’t care if they have a business or enterprise edition of Dynamics.

CDM will over time make sure that Microsoft PowerApps enables users to create applications for Windows, iOS, and Android mobile devices. Using these apps, you can create connections to common SaaS services, including Twitter, Office 365, Dynamics 365, Dropbox, and Excel. Making all kinds of apps will easier, and in many cases not even involve any coding.

My Dynamics friends, please try out the Microsoft PowerApps because this a central element in the future of Dynamics 365, and also check out Microsoft Flow, to understand how the CDM in the future will enable the flow of data and processes between all components in the Dynamics 365 and Office 365 landscape.

Again we have a lot of learning, and I’m amazed how fast the transition to a cloud and mobile first business environment is going. This change will also make ripple effects on the entire ecosystem. New technologies require new organizational approaches and new workforce skills and knowledge. I assume that we again will see consolidations and mergers among the traditional ERP vendors, where the traditional WEB and .NET consultancy is being consolidated under the Dynamics 365 umbrella. We can also assume that smaller ERP vendors are just too small to master all these new technologies, and will slowly fade away. Soon, most of our business processes is handled on your mobile phone, backed by the cloud.

And remember, your best bet is to learn!

How I saved thousands of dollars on my Azure environments!

I just love such headlines, because it instantly attracts attention.

But in this case it is actually true. And Microsoft is even wants us to do this. I want to write how to automatically shut down and start up environments in Azure, so that you are not spending more than needed. This post is for newbies, and experts surely will bombard the comment section with improved suggestions on how to make it even better.

In this example I have 4 environment running in Azure and the machine type I prefer is the D13_v2. This will cost me 3696 USD per month if I just let them stay on for 744 hours per month.

But I only plan to use them 07:00 à 17:00 Monday to Friday. This is 200 hours per month, and then it will just cost 993 USD J A lot of fun can be done with these extra credits.

So what is the next step? The trick is to use the Azure Powershell Runbook. Here is the step-by-step instruction on how to set it up:

1. Log into Azure, and open the Azure automation

2. Add an Automation Account.
    Create a name, like “TurnOffOnVM”.
    Select the subscription, and if a resource group should be created. Also if you want an Azure Run As Account. (I didn’t bother to have that, since I have no important stuff on these environments)

3. Then create an Asset named “automation” for holding credentials, that will run the shutdown/start up scripts. The credentials you are using must have the rights to run scripts and to start/stop VM’s.

4. Let’s create 2 Runbooks, that holds the scripts and schedules for the start and stop scripts.

5. Use the “Powershell Workflow” type


6. Let’s put in the “Start script”. It’s done here


I have removed my VM-names in this example.

If you wonder what your VM name is, it is the computer name, that can be seen here:

Here is a copy-paste version of the Start-up script:

workflow StartVM


    $cred = get-automationpscredential -name “automation”

    add-azureaccount -credential $cred

    select-azuresubscription -subscriptionname “Microsoft Azure Enterprise”


    $VMs = Get-AzureVM


foreach($VM in $VMs)


if ($VM.Name -In “VMName1”, “VMName2”, “VMName3”, “VMName4” )


if ($VM.PowerState -ne “Started”)


     Start-AzureVM -Name $VM.Name -ServiceName $VM.ServiceName -ErrorAction Continue





7. Let’s put in the “Stop script”. It is basically the same procedure as creating the “start script”, so I just add the copy-past version of the script.

workflow StopVM


    $cred = get-automationpscredential -name “automation”

    add-azureaccount -credential $cred

    select-azuresubscription -subscriptionname “Microsoft Azure Enterprise”


    $VMs = Get-AzureVM


    foreach($VM in $VMs)


    if ($VM.Name -In “VMName1”, “VMName2”, “VMName3”, “VMName4” )


        if($vm.Status -eq ‘ReadyRole’)


        Stop-AzureVm -Name $vm.Name -ServiceName $vm.ServiceName -Force







Remember to press the “publish” button the scripts J

8. Let’s create a schedule (one for the Start runbook, and one for the stop runbook)

9. You can now monitor the start/stop scripts:


10. Go party with all the credits you have saved! And if you see me, and use this script, buy me a beer J


Happy DAX’ing J

The most important AX.HELP page

To always keep an eye on what’s happening is important. We see that AX.HELP is growing and becoming the number one center for understanding the new AX. I want to give you the most important page; https://ax.help.dynamics.com/en/wiki/help-get-started/ Read it!

What I did was to setup a RSS feed to get all the news and new articles, and the address is https://ax.help.dynamics.com/en/revisions/

Setting this up in Outlook is easy. Right-click on the RSS Subscription, and add https://ax.help.dynamics.com/en/revisions/

You will then get a RSS message for each new post and article. You will in 5 minutes every day get the overview of what have been published and update. No more slow searching, and you will quickly be the “go-to” expert, that knows it all.

Happy DAX’ing




New Dynamics AX – Pimp up your form-letters with document branding

The New Dynamics AX never stops to surprise me, and every day I find new possibilities and solutions. Microsoft have made available a new set of form letters, like purchase order, sales confirmation, invoice etc, and installing them is optional. What is new is that they are much nice and modern, but they are missing country specific requirements. Microsoft is calling them “Modern reports”, and you can read about them here.

But the main topic of this blog is about how to pimp-up your form letters, with document branding. The following report is the Purchase order in modern design, and where I have added a logo and some colors.

The menu item for controlling this is found under Organization à Setup à Document branding

We have the following menu items;

Document brands, is just the identifier, like company ID etc.

Document images is a container for logoes etc,

The Brand details is where we can override per formletter and design, and select colors, and override addresses and contact information.


I expect Microsoft have much more coming, so stay tuned J

AX RTW My ODATA and JSON journey – Part III

Now the fun begins, and let’s develop! The following post is only meant for hardcore Dynamics AX technical consultants J

In previous posts I wrote about how to access Dynamics AX data and metadata through ODATA and only using an internet Explorer. In these scenario’s we where only fetching data from Dynamics AX. This time, we will use Visual Studio to publish data into Dynamics AX, by accessing the ODATA services. I must let you know, that I consider myself as a newbie to creating C# code, and the following post is only for giving you a directional guide for you to start exploring for yourself.

What you need to make this happen is:

  1. Visual Studio 2015
  2. Administrator access to Azure AD
  3. A deployed New AX on Azure

What I wanted to achieve here, is to be able to add vendors from a C# program. A None-Dynamics AX developer may have no idea of the inner structure of AX, but they can be given access to the metadata. Based on this metadata it should be possible to create CRUD integrations. One issue with Visual Studio is that it is not possible to consume ODATA services directly. So we need to generate a proxy library. The MSDN OData v4 Client Code Generator is the best way of doing this, because it will generate wrapper classes for the data entities. To speed up a bit I found the AX-LAB12, where Microsoft is showing how to import a BOM, here I found the framework that we can use. This AX-LAB12 contains a word document that is good to understanding how to set this up. I’m “stealing” the following 4 first classes from the.

The AuthenticationUtility is the class that makes sure we are authenticated with Azure AD, and that we are logged in with the right user. In this class you can hardcode the user/password and the Tendant and the ActiveDirectoryClientAppId

The next step is to generate the ODataProxy. This is done in the Microsoft.Dynamics.DataEntities project. This basically means creating a bunch of classes that reflects all the metadata. It will give us a class, so that we can assign values to Odata fields and execute methods etc. But first we must specify where all the metadata can be downloaded from. In the picture below, you see that this is just a hardcoded string in the OdataProxyGenerator.tt file.

Then right-click as shown under, and select the “Run Custom Tool”.

This will then download all the metadata from the published data entities in Dynamics AX, and create one class per data entity. It takes a few minutes, and it creates thousands of classes.

Since we want to create vendors, it is interesting to see how the Vendor data entity looks in AX, and how the generated C# proxy class looks like:

As you see, we are consuming the ODATA Data entities into visual studio, that let’s to access fields and methods as we are used to in X++. And this by only generating proxy classes from the Odata metadata.

Then I may start developing against the ODATA proxy classes, and now I see that fields and method lookup, that we are used to in X++ is working. As seen in the following picture, I’m declaring the vendVendorEntity of the type Vendor, that have the same structure as defined in the Data Entity.

My complete code for creating a vendor using ODATA is therefore :

I build and run:

I then check AX to see if the vendor is created:

It works J

Let’s try to see if I change the code, and are selecting a vendor group that does not exists :

It correctly don’t let me create the vendor J

The conclusion:

The ability to create CRUD operations using ODATA, changes the game. External none-Dynamics developers can create apps and integrations through the Odata services, and it regulated through security and validation. They don’t need to know the internal structure of Dynamics, because this is exposed through the metadata service. Dynamics AX is truly a game changer.

Happy DAX’ing J



New Dynamics AX and the Excel Add-on

When using the «Open in Excel»( Dynamics Office Add-in) feature in the New Dynamics AX RTW, you may have some trouble opening it in Excel.

Especially if you have a corporate login, like me. It then seams that the login failed.


Microsoft have upgraded the Dynamics Office Add-in, but on existing demo data (Contoso) may also need to be changed.

Then the connector seams to be working (At least for me)

Also take a look at https://ax.help.dynamics.com/en/wiki/office-integration-troubleshooting/

Happy DAX’ing

New Dynamics AX On premise = Azure Stack

As we know, deploying the new Dynamics AX will basically come in 3 different flavors. I wanted to explain a bit what this means and what I have found. The information here should be double checked together with your partners, and also with Microsoft. Also remember that it all is very fresh technology, and that things may change quickly as must is in early releases and preview.


  1. AX Public cloud – Black-box, maintained by Microsoft in Azure and it just works.
    The public cloud “edition” was the first platform that the new Dynamics AX was released on. In the public cloud it is Microsoft personnel that is deploying and monitoring the instances. Customers and partners should have no technical access to the production environments. Data and code (like customizations) are created as packages and uploaded into LCS, where according to maintenance windows, and Microsoft will deploy them to the production environment. Customers pays a monthly fee per user, that includes licenses a production environment with high availability, disaster recovery and some sand-box environments (for testing and dev). The customer doesn’t have consider how to scale or what kind of virtual machines is needed. This is taken care of by Microsoft. Customers must expect to pay at least 110.000 USD per year in costs for this. It is my consideration that this offer actually is a very good offer, because it includes many of the services and licenses that we don’t normally consider when evaluating costs for operating a ERP system. I think than smaller customers (50-250 users) would benefit from this scenario.
  2. AX Private cloud – Maintained and deployed by customer/partner, but still on Azure.
    Private cloud is 100% running in Azure. Private just means that Microsoft is not deploying and monitoring the instances. In this scenario you will purchase AX licenses, and you will purchase Azure services and deployments. Basically 2-3 invoices J. You scale up the VM’s according to you needs, and it is your own responsibility. It is typical a partner that can help out, and you probably will have to purchase service agreements to monitor and maintain your Azure deployed instances. Will this be cheaper than the “public cloud” offer? If you compare apples with apples I don’t think so. There are many hidden costs, and if you sum up the costs, at least my internal calculations show that this offer quickly can be 20% more expensive than the Public Cloud offer. But the private cloud offers flexibility, but will demand a very knowledgeable technical department/partner. You can decide more by yourself within the boundaries of the Azure. I expect that larger customers (250+ users) would like to go for this scenario.
  3. AX On-Premise and Azure Stack – For those that have a datacenter to spare

    Azure Stack is the new hybrid cloud platform product that enables organization to deliver Azure services from their own datacenters. You get cloud services, yet maintain control. You decide where to keep your data and applications—in your own datacenter or on others/azure. You will still pay for the AX licenses, but the you will also have to pay for your own hardware. There is one problem. It is not released yet. We are waiting for Windows Server 2016 with Azure Stack, and SQL Server 2016. These are still in technical preview. But for those (like me) that like to try out, you can actually download it from https://azure.microsoft.com/en-us/overview/azure-stack/ . If you wonder what kind of machinery is needed, take a look her. (Basically 16 Cores , >128 Gb RAM and a few TB of disk). It will be a bit difficult to run the Azure Stack on my portable PC J. Also remember that there will still be lots of services that still have to be on the cloud. I assume that this option will be selected for large enterprises (1000+ users) and for hosting providers/ASP.

And remember that what I write here is not facts, but just my interpretation of how it can be.

Happy DAX’ing J

Mobile Access for Visual Studio

In the new AX the tool we use for work, development, test and build is Visual Studio Online(VSO). Now a mobile access to VSO is available in the Visual Studio Markedplace. It enables you to browse, monitor and engage in projects via your phone, It’s still in preview, but it looks very interesting.

Take a look at it here; https://marketplace.visualstudio.com/items?itemName=sprints-for-vsts.sprints-for-visualstudio

AX RTW Hack to enable unsupported countries

We have learned that today the RTW is officially released, but this is mainly for the “tier-1” countries. I’m a bit jealous on Denmark and Iceland that are in the first support release wave, and that Norway have to wait until H2 2016 to get country specific support. But when I dig into the AX RTW I will find much of the country specific elements already in place. They have been included in the transfer from AX 2012.

Only one small Issue. Microsoft have hardcoded that the unsupported features cannot be used. I guess (and hope) that it is for a reason. If you try to create an unsupported company for Finland, you get;

Many of the localized fields needed to run Finland is then hidden or disabled.

But there is a way to “Hack” this. Comment out your country from SysCountryRegionCode.onCountryRegionSupportedCheck():

Then compile and deploy. Then the fields related to Finland etc will open up.

I know I’m are moving into uncharted terrain, and this is disabled for a reason. But we start already now to promote and sell AX 7, and then we expect Microsoft to stick to the release schedule, and make the Dynamics AX ready for all countries as planned. We also have several customers that don’t need the localized company specific functionality, and they don’t want to be constantly reminded J.

Disclaimer; If you do this for a production environment you are on your own!

Hacking Dax’ing

AX RTW – My ODATA and JSON journey – Part I

Learn the word; ODATA. We will hear a lot of ODATA in the future, because it will change the way we integrate and how we exchange information between AX and other systems. A good starting point is the AX help wiki, that Kuntal Mehta created. I have decided to explore what the ODATA can do, and wanted to write a bit about my journey. Instead of trying to explain all technical details of data entities and how the architecture is, then let us rather just test something J

What you need to test what I’m doing is

  1. An AX RTW environment deployed from LCS
  2. Internet explorer
  3. Good old notepad

Step1: What services is available?

To get all entities available to you use your Site address, and add “/data” at the end.

Then save the file you receive, and open it in notepad. (I have associated *.json with notepad). The file you get looks like this:

Each line here represents a data entity service we can use. The format of this is the JSON format, but that is not important now.

Step2: Show me the customers

In the file you may find that there is an entity/schema named “Customers“. I can therefore just add the “/data/Customers” to my URL

And then I get a JSON file of all the customers;

But this is a bit “cloudy” and I can further filer down what I want. Let’s say I just want to see all customer names. I can then add “/data/Customers/?$select=Name” to my URL

Now it returns a JSON file with only the Name.

If I wanted to add one more column, like the Payment terms, the syntax would look like “/data/Customers/?$select=Name,PaymentTerms“, but this would not work because the comma cannot be used on a URL. I therefore need to replace the comma with %2C, that is the URL representation of comma. For multiple columns I therefore add “/data/Customers/?$select=Name%2CPaymentTerms

You see some strange “@data.etag”, and here is an explanation. It is for caching.

Step3: Can I read this in Excel?

Yes. Excel can import OData, and format it like we would.

Then fill in the /data URL, select schema, and then select fields.

And then you may read directly into Excel all entities made available in AX RTW, even without the AX connector.

Step5: Show me all !

Sure. Try to add the “/data/$metadata“, and AX return All schemas, fields and relations. It take a long time, but nice to explore.

Step6: Can we use DIXF to import directly from OData feeds ?

This is what I would love to see. But I have not found it yet.

Happy DAX’ing 😉

AX RTW – Hack to enable configuration mode

When downloading the AX RTW local VM from connect, you often want to disable some configuration keys. (Like catch weight etc). But now you will see the following warning;

“This form is read-only unless the system is in the maintenance mode. Maintenance mode can be enabled in this environment by running maintenance job from LCS, or using Deployment.Setup tool locally”

This warning is to prevent that configurations are enables/disabled, and that the system is set in maintenance mode. There are 2 ways of dealing with this.

  1. The proper way; Use the Microsoft.Dynamics.AX.Deployment.Setup.exe command; (Credits to Joris de Gruter)
    Run this from command line:

    \bin\Microsoft.Dynamics.AX.Deployment.Setup.exe –metadatadir –bindir –sqlserver . –sqldatabase axdbrain –sqluser –sqlpwd –setupmode maintenancemode –isinmaintenancemode true




    Here is an actual example J:\AosService\WebRoot\bin\Microsoft.Dynamics.AX.Deployment.Setup.exe –metadatadir J:\AosService\PackagesLocalDirectory\ –bindir J:\AosService\WebRoot\bin –sqlserver . –sqldatabase AxDB –sqluser axdbadmin –sqlpwd ******* –setupmode maintenancemode –isinmaintenancemode true

    and then run the command with “false” at the end to turn if back off.

  2. The Hack way; Use the Microsoft SQL Server Management Studio, and edit the following record in the table dbo.SQLSystemvariables ; CONFIGURATIONMODE

After that, you can change configurations. But make sure you never
EVER do this in a production environment!

Hacking DAX’ing J

Master data concepts

In Dynamics AX, we have been blessed that we can have most of the data in one system, and in one single database. But I sense a shift, where systems are breaking up into more loosely best-of-breed components. We see the introduction of Omi-channels, SaaS, RESTful Web services and ODATA as accelerators into this area.

The generic topic of Master data management(MDM) is much less about technology and much more about understanding how business processes are supposed to work. The principle of MDM is applied whenever two or more business processes must view or share (master) data. This means that all companies have a need for the discipline of MDM, meaning that it must be driven by the business, a business case, and supported/enabled by IT. This includes governance and data quality, and MDM cannot be established without them.

In my profession, when working with our internal EG-Retail model we are covering the Master Data Management processes from life-cycle data management to data distribution to POS-systems. As you see, there are not much directly related to the functionality of Dynamics AX, but more against how to create work processes that maintains and secures a company’s master data.

Master data lifecycle

The most common area where life-cycle processes are used are on products. Products are introduced, created, maintained, discontinued and finally archived or deleted. A lifecycle also involved different roles and departments, and the responsibility and master data ownership is changed through the lifecycle. It could be visualized like this, where effort in the processes is shown.

In terms of responsibility I also see the benefit of separating the roles of Master Data owner and requester, and introducing clear formal processes.


Create master data

Master data are the critical nouns of a business and falls into four groupings: people, things, places, and concepts. Further categorizations within those groupings are called subject areas, domain areas, or entity types. For example, within people, there are customer, employee, and salesperson. Within things, there are product, part, store, and asset. Within concepts, there are things like contract, warrantee, and licenses. Finally, within places, there are office
locations and geographic divisions.

The process of identifying additional Master Data elements should be a formalized process and an ownership process must be in place.

Creating master data is the process of collecting the accurate and persistent data related to each master data element. It is not only important to just enter the data, but also to identify
the source of the master data. In a data maintenance scenario, the process and master data owner may return to the source to collect more details. When creating master data, the completeness must be defined. Define what Master Data elements are mandatory and optional. What related master data must be in place to correctly create the master data.

As described above, all Master Data will have a life cycle. When creating, often only a minimum set of mandatory data elements are required. The life cycle and status should reflect the completeness of the master data.

Master data may originate from many different resources, roles and process participants. Timing is also relevant, because different data elements may only be needed on a later stage. An example is that certain set of data elements is needed when purchasing a product. When selling the product another set of data needs to be in place before this process can start.

A more formal process of handling Master Data will ensure that the quality and relations are taken into consideration. The following process should include both a requester and the master data owner, so ensure the formality.

When the master data is complete enough to be used for selected processes, the master data must be released and available in the systems where it is used. Examples are the procurement process where only a small subset of information is needed to initiate the purchasing process. But in order to receive the product at the warehouse, the product must be released to the warehouse management system. This require additional information and timing. In integrations, the release process of master data must be controlled and tracked. Before release of master data, the required completeness and data quality must be decided and confirmed.

Maintain master data

As requirements is expanding and changing, the master data will also have the need to change. Maintaining completeness and quality of master data becomes a central part in the life cycle Master Data management. Typically new markets and countries will request the need for new prices, VAT/Tax compliance and translations. Establishing maintenance processes will not only be essential for growth and expansions, but also to support day-to-day processes. The key principle is to centralize master data update around specific roles and processes. The generic maintenance process is reflecting this.

Discontinuation of master data

Deleting Master Data is generally not recommended. The reason is that the master data often have been used and related to transactions, and often in other systems like WMS, eCommerce etc. A better approach is the discontinuation process. If master data still should be deleted, it is important to analyze the consequences, and to initiate clean-up processes.

The discontinuation phase begins when the maintenance phase ends. Master data discontinuation is often a planned process, where the date of the discontinuation is set in advance. The discontinuation can also be related to specific processes, like a product is discontinued for procurement, but not for sale.

It is recommended must implement a structured life cycle process on master data, to control the situations where a master data record is discontinued or replaced with a new master data record. In this future process, we expect that the participants are the Master Data Owners and the MDM Administrator. The main purpose of the process is to support the actual discontinuation or depletion of Master Data Records in the AX system.

The input to the process is an online request or need for discontinuation or depletion of a Master Data Record. The output of the process is an updated Master Data Record in AX with the specified data from the request.

The process diagram below outlines an example of the future process for the discontinuation or depletion of existing Master Data Records in AX. In this process, we distinguish between discontinuation and depletion. In relation to products, the discontinuation only applies for specific SKU’s whereas depletion applies for all. (Like flushing out master data from an integrated system)

If it is expected that the growth of the data will accelerate as more partners and stores is connected to the installation, then archiving and purging will be important to keep an optimized performance of the Microsoft Dynamics AX installation. Before a master data record can be archived and deleted, other data (such as purchasing documents) that refer to the master data must themselves be archived. Both the purge and archive operations depend on a carefully determined hierarchical relationship of related tables based on both master data, settings and transactions. The archiving and purging process is too complex to be manually handled, because of the many relationships that exists to master data. It is therefore recommended to look into tools like the Microsoft Dynamics AX Intelligent Data Management Framework (IDMF) that can be used for this purpose.

IDMF have the following process.

Taking easy on master data processes can result and complete failure of your system and processes. When implementing Dynamics AX, make sure that enough time is invested to create a clear strategy, and good processes.

Happy DAX’ing J

AX7 – Cloud estimation sheet

When working with new clients, I just love to show Life Cycle Services, and all the new tools and gadgets now available to us. Prices on licenses and Azure services are beginning to come into light, but there is one “unknown” factor. How much would it cost to in time to setup and implement all the tools and services?

I will not
give you the estimates, but I can give you the sequenced task list of what to do


Sub Area


Life Cycle Services


Create LCS site

Life Cycle Services


Add users to LCS

Office 365


Create Office 365 Azure AD

Office 365


Create SharePoint site

Visual Studio Online


Create VSO site

Visual Studio Online


Add users to VSO

Customer source


Add users to Customer source



Create Azure account



Setup administrators to Azure



Connect Azure subscription to CSP account



Create LCS projects



Connect Azure, VSO and SharePoint to LCS



Invite project users into LCS



Select and setup metology in LCS



Infra structure estimation tool in LCS



License sizing estimation tool in LCS



Deploy Demo/CRP based on Contoso



Deploy development environments (per developer)



Deploy VSO Build/staging environment (one VM)



Deploy Acceptance test environments (2-3 VM’s)



Deploy Production environments (3-10 VM’s)



Setup LCS System diagnostics

Visual Studio Online


Setup VSO projects and users rights

Visual Studio Online


Setup process for nightly builds and automated test

Visual Studio Online


Define product backlog

Visual Studio Online


Define sprints

Office 365


Setup Microsoft power BI



Setup Configuration Manager (data transfer)

Office 365/LCS


Add ODM templates to be used in the project

AX 7


Setup Data Entities for ODATA/Integrations

AX 7


Basic parameters and generic setup


..Ok… the number is 42… but what was the question ?


Access Dynamics AX (aka ‘7’) performance counters with “&debug=develop”.

The new Dynamics AX have some very powerful capabilities to show exactly where time is spent. You would like to explore more about what is happening behind the scene, try adding the “&debug=develop” to the URL. This will bring up a small timer that shows how much time was spent on opening and showing the current form.

If you click on it, it will give more performance details. Like if I open the all customers in the Contoso form, my system gives me the following.

I see here that the loading the customers took 366 ms, where 131 ms was from the AOS loading the data. You also see a color coding (green/blue) that indicates at what sequence the time was spent.

There is also a section to show what the server is doing, and it also shows you the exact SQL call that was the longest running SQL statement.

At the bottom of the performance screen we can also see something interesting;

And when I click on this Session ID, I get;

I have no clue what that is J, but could this be a tool for external monitoring ?



New AX (aka ’7’), limited navigation and the WHSWorkExecute

When opening the new Dynamics AX client, you see that we have a nice set of navigation menus and options in the top of the screen.

But if you would like to limit the navigation options for the user, try to add the “&limitednav=true” to the URL.

As you see, the menu-bar is then changed, and the user cannot see the menu buttons, search and settings any more. We have a limited navigation.

Let’s further extend this ability by also adding the “&mi=action:WHSWorkExecute. For those that have not heard what WHSWorkExecute is, it is the form used for simulating a Warehouse Mobile Device. The form existed in AX 2012, and it also exists in AX 7.

In the AX ‘7’ preview demo environment try the URL:

You then have a quite nice RF device without the navigation options. Simple can often be the best J

Happy DAX’ing

New Microsoft Dynamics AX – A guide for using retail sales prices and discounts

This is a guide I have been looking forward to publish, but due to the NDA restrictions I needed to wait until the new Dynamics AX was made public preview, and today it is J This blogpost is not about AX licenses prices, or implementation costs, and if you were looking for that, you have to google again. It’s about what product sales price and discount options that exists MSDAX – “out-of-the-box”, and it’s not about product sales price tactics and strategies, but how to apply them into AX and most of the presented information here can also apply to earlier releases of Dynamics AX.


Pricing and discounts is a science, and the number of variations and combinations is amazing. When I talk to my customers I like to show the following overview of the most common used pricing strategies available in AX. Here I have tried to put “retail names”, and exemplify what they mean.

The Microsoft documentation on TechNet visualizes quite clearly the relationship between prices, discounts, channels and programs with the following many-to-many relationship diagram;

It basically means that you can combine and mix pricing elements to achieve the strategy you are aiming for. The combination of these gives us the functionality we are looking for, but we have also realized that not all combinations are practical or possible. Remember that much of the pricing possibilities became available with the introduction of Retail, Call- center and in some cases the lean-modules. Some pricing options will therefore not work in combination with each other, and also not across the Omni-channel.

Product prices and RRP (Recommended Retail price)

RRP, or Recommended Retail Price is a very common and known concept. It is very often used on, when the sales channels are more complex, and includes producers, distributors, partners and resellers. Often the ownership structure of the sales channel is fragmented and differentiated. The recommended retail price is therefore often specified based on geography, currency and channel. The RRP if very often just the baseline on which prices are built on, and as the name suggests, just a recommended price. In Dynamics AX either the standard (single currency) sales price on the released product or having a “All/Group” sales trade agreement (multiple currencies, dates, quantity) is sufficient to make this work. One restriction to make this work within AX, is that the product must be released, in order to do this. If a more “Global recommended retail price” is wanted, I suggest reading my blogpost on this subject, where prices are made global, and distributed to all legal entities.

Price/discount matrix’s (Trade agreements)

The price discount matrix has been available for AX users since the beginning, and handles most requirements in a B2B scenario. The setup is quite easy, and involves setting price or discounts on groups, or in relation to specific entities like product or customer accounts.

In the following example we have different sales price on a single item, but it differences per customer price/discount group.

In AX ‘7’, you will just create a trade agreement journal, and create the necessary lines to reflect the different prices.


Discount matrix

Maintaining sales prices on the item-level per customer group, or per specific customer can quickly be a maintenance nightmare. The different combinations quickly end up with so many price points, that oversight is lost. A customer of me had 4000 products, 6 currencies and 12 different account selection options. This would mean that they would maintain 288.000 price points. That was impossible! The option was to use discounts instead, and just maintain recommended retail prices per currency. This resulted in 24.012 price points to maintain. With the use of smart rounding, and generic currency we reduced the number further down to 4012 price points. A discount matrix would look like this, where the combination per item price group and customer price group resulted in a discount.

In AX ‘7’, you will just create a trade agreement journal, just like for prices, and create the necessary lines to reflect the different discounts.

If you want to test a sales price, with all the different combinations, you can use the “Find prices” feature. Here I have a specific customer belonging to the price group “Retailer”, The item belongs to “Apparel”, and the combination of this gives me a net amount of “127,5”.

Generic currency and smart rounding

As seen in the example above, I have specified prices for different account selections, but only in USD. If multiple currencies are used, and you don’t always want to maintain currency based pricelists, then the generic currency option is a nice feature. The first step is to specify what is the generic currency, and what exchange rates that should be used. Also if smart rounding should be applied after currency conversion. In the setup of smart rounding you also need to set up member currencies that belongs to the smart rounding.

Enabling this, will open the “include generic currency” option on the trade agreements, and when creating sales orders in a different currency, the sales order. Here we have a sales order, converted from USD to €, and then the automatic smart rounding is applied.

Trade agreements and Retail/Call center in combination

As shown here we, the trade agreement matrix can solve quite a few price requirements, but in a retail scenario it would not solve the all requirements we see. We are missing elements like retail channel, categories and more advanced features. Going deeper into retail functionality shows that there are many additional possibilities that opens up. I have met quite a few companies, that have advanced price and discount requirements, but they have never thought about enabling the retail module. Many thinks the retail is for POS, but the retail module is for Omni-channel. This means that we can also use this in traditional sales orders (The “call center module” enabled retail functionality to be used in traditional sales.)

But there are some elements in AX, that you should be aware. I often see good old AX consultants getting confused when they start looking at retail discounts. Let’s say we have the following scenario; We have item 0001 with a recommended price of 150 USD.

And then we have a 15% discount on the customer;

You would then expect that when using the retail module, it will just use these values. But it don’t ! It actually calculates the discount amount, and not the percentage. Keep this in mind, because it will confuse you later.

When using the retail discounts, they will work together with the traditional trade agreements, but not exactly as you would expect. To better understand the actual code executing, then take a look at the class\RetailOrderCalculator.saveSalesOrder(). The CRT (Commerce Run Time) engine returns quantity, price and total discount amount. Based on this, the unit discount amount is calculated. I’ll also show the actual source code on this, because when we are talking about discounts, we are most likely going to think in percentages, and the same are customers and users.

And one more thing. The CRT will not apply both the trade agreement discounts and the retail discount. It will select the best of them.

The use of Retail Discounts in Sales orders

Let’s take some scenarios, that is common in the retail industry, and I’ll try to link them to what you find in the standard Contoso demo dataset. In AX ‘7’, the retail module mainly has 4 discount types of discounts, and a price adjustment;

  1. Just an ordinary discount product

Let’s say you just want to have a discount on a single item.

First step is to use the retail discount rule.


Periodic discounts on categories

“50 % off on accessories this week” can be a strong trigger to make the customer open the wallet.

To create such discounts, we can use the same screen.

PS! The Retail discounts have a “discount code” field, but I have never managed to use it in the call-center sale order screen. But in POS, it works J


Happy hour J

Happy hours are an efficient way of attracting and breaking customer’s shopping routine. It’s also fun, and can give retailers a lot of attention. This feature is excellent also for Black Fridays.

The validation period has an advanced setting, that opens up the field “Discount period number”, and select a discount period. I have here created a happy hour between 12 AM and 1 AM for early birds.

We can further specify the valid periods here, so that more period based discounts can be given. Just remember that the valid period is current time +/- the offset time defined on the retail channel. In the AX ‘7’ CTP 7 version, the call-center channel details screen is not showing the time zone, like it does for retail stores, and this could have some implications on using “Happy hour” in an installation that works across time zones. A small service request to Microsoft have been created, and I’m sure they will fix this J

Coupon discounts (Call center)

Coupon discounts seems to be very popular in US, and we also see an increasing use of this in Europa. Especially in relation to mobile coupons.

In Dynamics AX 2012 there are two ways of working with Coupons. One solution for POS, and one solution for Call-Center. And these two don’t work in common. It is a bit sad, because it means we have a GAP in the Omni-Channel offering. But with enough push on Microsoft, I’m certain it will merge in future versions.

Call-Center Coupons, can be defined to be an amount or a percentage, and may have valid period. The coupon can be a unique, and a one-time use, and

It can have item rules attached, that specifies what products the coupon can be used with or excluded from.

So solve Coupons for Retail/POS, you can see that all discounts have the option to apply a “Discount code”. I have not found a way to make this discount code to behave as a unique and on-time code. Even though AX-Sales orders not can use CRT as the price engine, there are no places, where the discount code can be applied to a sales order. It therefore only works on POS/eCommerce scenario’s It is a bit sad, because it means we have a GAP in the Omni-Channel offering.

Dynamics AX for retail have a GAP in relation to coupons to solve “One-Time” coupons, and in future versions I hope to see more features, like Store coupons, Manufacturer coupons, Mobile/Cell codes and promotion codes.

Trade discounts

Trade discounts is a most common way of creating discounts. 3 very common discounts are

  • Employee discounts

    This can be solved by using affiliations in Dynamics AX, and works for both POS and AX sales orders In order to leverage the Affiliation functionality at retail POS, the following must be setup:
    Price group(Retail)

    Affiliations, and link the Affiliation to the Employee price group.

    Discounts, and link to the price group “employee

    Each employee must be a customer, that is linked to the Affiliation, and you mark the customer with the relevant affiliation. When this customer in POS or in AX creates a sales order, the discount will apply.

    Affiliations can also be used for senior, military or any other groups.

  • Discount category

    With discount category I mean that we can have a discount on an entire category of product. Let’s say “Digital SLR camera” sale, as is exemplified in the Contoso demo data. We then don’t have to assign a discount to a specific product, but just refer to the retail category. When adding products from the category the discounts will automatically apply (after running some periodic jobs, and distributing the prices to the channels.)
  • Loyalty discounts

    To use the loyalty features, then a lot needs to be setup. But in relation to prices, it just means that you need to assign a price group to the discount. If we take the example of the “SLR” discount, we can associate it with a price group called “LP-FabGold”, meaning that all loyalty customers in the “Gold” tier will get the discount.

Mix and Match discounts

  • Mix/Match

    A mix and match discount gives customers a discount when they purchase a specific combination of products. In the Contoso demo data, take a look at the “30% off 3” discount. Here a 30% discount is given, if you select 3 of the specified products. Here we use the “Mix and Match discount” form.
  • BOGO

    A BOGO price is basically “get 2 for the price of one”. We also use the “Mix and Match discount” form for this, but we use the “Least expensive” price option, and give a discount of 100%, and specify that 2 units are required for the price to “kick-in”. In this case, the lucky customer gets 2 camera’s for the price of one J

    Other options also exists, like a 50% discount when selecting 2 of an item, or use line Spec and Product category feature in Mix and Match discount

  • Buy 3 pay for 2 promo
    This can be solved just like BOGO, but where the number of products are increased to 3.
  • Free item A if item B
    For this, we can take a look at the “Water Bottle Promo” in the Contoso demo data. We use the Mix and match discount, but use the “line spec” discount type. Then we create a “Mix and match line group, to specify that we need to have at least one item in the selected category/product, for the price to be active.

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 2 items get 5%, Buy 3 items get 10%, Buy 10 items get 40 %

Threshold discounts

A threshold discount is a discount that is given to customers when the total for a transaction reaches one or more specified amounts. For example, you can create a discount that gives a 5 percent discount for purchases over 100.00 or you can specify a fixed discount amount.

Buy for 100 $ get 5%, Buy for 200 $ get 10%, Buy for 900 $ get 40%

Price adjustments per channel

  • Online gives 5% discount, In Store gives 2% discount
    Channel based discounts are solved by assigning channel specific price groups to a channel, and then assign the different price adjustments to each price group.

Loyalty cards

The loyalty module in Dynamics AX is a large module with a lot to offer.

But there are some small GAPS you should be aware of, and that is to use loyalty points for payment in the call-center sales order. It could be I’m wrong, but I have not been able to efficiently use the Dynamics AX sales order screen efficiently with the loyalty module. A good blog for loyalty is available here.

Smart Rounding

Smart rounding is a feature that have no direct effect on retail pricing.

But it can adjust trade agreements, that indirectly works with retail. Also remember that it is not “automatic smart rounding”, and the smart rounding is applied to a price discount journal. A good blogpost on smart rounding is this one.

Recurrence and discounts

The ability of creating recurring sales is not directly related to Retail/POS. In AX there is a feature called continuity programs where delivery schedules can be setup.

I don’t think this modules works very nicely with POS and eCommerce, and is mainly a tool for call-centers and selling recurring items. More information is available on TechNet.

B2B Discount agreement

Price agreements is not working with retail-POS, and is not very good supported through the CRT. It is mainly used for B2B orders, and features exists both for sales and for purchase.

  • Yearly agreement to buy 1200 pcs, and get them for 450 $ per pcs.
    In this example I have an agreement to buy 1200 units, and I get the price of 460, until 12/1/2016. In this case, it is a product quantity commitment.

    Other types of commitment also exists like

    This makes it possible to create several different types and combinations. It features also contains Ok formletter that is confirming the agreements. Take a look at the following blog for additional information.




Synchronization problems in AX 2012 R3; Try disable track changes.

If you are installing a ISV solution into a Contoso environment, and you suddenly see that you cannot synchronize, and you cannot see why:

Here is a tip that works for me;

Disable the track changes in the specified tables;

Then the synchronization is able to perform. After synchronization you can enable it again.

If you want to switch on/off in SQL, then this is the script for Switching off;


To switch them on again;


Happy Daxing !

How to evaluate Dynamics AX ISV solutions

Dynamics AX 2012 R3 have truly evolved into an enterprise solution, and the functional width solves most requirements that any customer “really need”. But there is always the 80% / 20% rule that applies and there are requirements that is not solved by the standard Dynamics AX. We often see extended domain specific requirements in relation to finance, sales, procurement, logistics and production. To solve this, customers have the option to create customizations or to try to find VAR/ISV solutions that solves this. (VAR= Value Added Reseller. ISV =Independent software vendor) Creating your own large customizations can result in high risks, and the option to buy a “ready to use” ISV solution then becomes interesting.

What I wanted to give to the Dynamics Community is my list of how I evaluate ISV-solutions as a VAR. I basically just use a word document with a set of chapters, and the topics to evaluate here is from a consulting perspective. The idea is to have a formalized way of making evaluations, and also use the ISV/representatives to fill in the information for you.

1. Executive summary
{Yup. There is always someone to report to. }

2. Product Introduction
{Then I write a brief introduction to the product, describing the overall area that it solves.}

3. Background for evaluation
{Here I write why this product was evaluated in the first place.}

4. Vendor/Distributor information – general
{Then I record some general information about the company that offers the solution. Just to be sure that the company behind the solution will exists in the future. The following table can be used}

Company name
Sales manager
Turnover 2014
Results 2014
Number of employees
Number of customers
Number of references

5. Vendor/Distributor information – product

{The ISV-“mothership” may be large, but it is interesting also to check out the team that is organized around the product. I therefore have a secondary evaluation around the team developing and maintaining the ISV solution}

Product manager
Product turnover
Number of customers
Number of developers

100% dedicated

Part time dedicated

Number of consultants

100% dedicated

Part time dedicated

Support resources/routines

6. Pricing

{Describing product pricing, enhancement and also flexibility. Also include a case study with implementation. }

7. Marked/Cost savings potential
{ Describing the current marked potential, also reflect according to existing customer base. I also use a calculation sheet to show investment, potential, margins, number of sales each year, training costs, start up issues etc}

8. Known Competitors
{Describing any known competitors to the ISV solution and what the main advances this product have.}

9. Versions and language
{Describing supported versions and language of Dynamics AX. I also want to record how support is handled as new versions and upgrades go along}

10. Access to software
{Describing how the product is accessible from the ISV and how it is distributed}

11. Technical Installation guide

{Describing the quality of the installation guide, and I also try the installation to check how easy it is}

12. Application setup guide
{Describe the quality of the application guide, and I also try the application to check that it actually work}

13. Scenario testing
{In this chapter, we will test the different functional aspects of the product. The processes that is tested is the most common scenarios that we expect and have experienced in the field. Normally divided into a section per feature.}

14. Solution footprint
{The solution footprint is very important to evaluate, because this tells us how costly upgrades and applying hotfixes will be. We want to see high footprint on SYS elements for Dynamics AX. A way to easily evaluate this, is to count the number of SYS overlaying’s that exists and how many new elements that have been introduced. I therefore use a table like this}

{If there is a high number of SYS objects customized, I know that cumulative updates from Microsoft will be more costly.}

15. Best practice deviations
{To evaluate the coding quality, then evaluating all best practice deviations that can be found. Dynamics AX have building tools for this, and if there is a high amount is BP errors and warnings, it means that the code quality it not where it should be. }

Also get any documentation if the product have a CfMD certification (Certified for Microsoft Dynamics)

16. Support and training
{Describe how the product is supported from the vendor. There will always be questions and issues, so we need to know how this is handled. Often ISV solutions are purchased from VAR’s, and then it is good to know how this financially is handled. Also if there are any training included in the offering.}

17. Internal requirements
{Describe needed competence and needed training needed internally to implement, deliver and use this ISV-solution. }

18. Road map
{Show what plans there are for the product, what their priorities, what are their policies around upgrades, etc}

19. Marketing
{If you are a VAR, that want’s to include a ISV solution offering, it is important to understand how the ISV will support you in promoting the solution. Show what marketing material the ISV have and how you can use it. Do they have marketing insight they in the local market. Also find out how the ISV will support and drive market campaigns, participate in events, demos, etc with people and or marketing funds (money)}

ISV solutions play a big role in unlocking all of the possibilities that Dynamics harnesses. When analyzing your Dynamics ERP investment, it’s imperative that you also analyze your ISVs so that you can make the best decision for your business, both in the short and long-term. These topics will lead you toward making better evaluations while looking for an ISV solution. Feel free to use them, and extend them when needed.

AX7/AX 2012 Retail Omni-channel Hub-and-Spoke Architecture

The simplest definition of “hub and spoke” is that it is a model for integrating the ERP system used at a company’s headquarters with the systems used by its subsidiaries and branch offices. This blogpost discusses approaches on how to benefit from the fast innovation cycle that Dynamics AX have, without starting a new big-bang ERP implementation project.

Implementing any ERP system is a huge investment. It is not uncommon that thousands of hours is required before you can start to see the benefits. The cost of performing a large scale upgrade simply cannot be justified. It is therefore common to see companies implementing Dynamics AX, and then waits a few years before they take the effort to upgrade to newer releases. In my experience I see that it is most common to jump over a major release.

The innovation cycle that we see with Dynamics AX, new ground breaking technology is being released every year. Much of this new innovation is directly related to new possibilities in having true Omni-channels. The Dynamics AX Retail solution became mature in release AX 2012 R3. But there is a lot of companies still using AX 2009, any they have a well working systems for financials, procurement, supply chain and order management. They don’t want to upgrade, but they are still missing the ability to benefit from becoming a true Omni-channel retailer. The challenge is that the competition will be stronger and more mature.

I have met several customers that are implementing AX 2012/AX7 only for the Omni-channel, while keeping their AX 2009/legacy system taking care of the traditional ERP-processes. This approach focuses on limiting the implementation scope to only cover the Omni-Channel Retail vision. The idea is to only use AX 2012 on the retail channels. This means that retail stores, WEB, retail hierarchies, call-center is features that the AX 2012 (green) is covering. Then an integration between the legacy system (AX 2009) and AX 2012 is done using DIXF, that seamlessly connects the systems.

What I like about the Dynamics AX retail, is that what we currently have in AX 2012 is a very stable and is built for supporting a much faster implementation cycle. This means we can faster take advantage of new technologies. The AX for retail support the N-1 approach. This means that we can upgrade the AX 2012 parts to AX7, without making changes to the POS or the e-commerce systems. We can also in a timely fashion roll-out updated version to new channels, without being concerned of disrupting the existing channels.

I can share a personal experience with this approach. A customer came to us that had Dynamics NAV as their legacy system, and wanted to roll-out Dynamics AX POS to several countries. From the time we did the kick-off, and until the first store was up and running it took only 8 hardworking weeks. We used the Hub-and-Spoke approach, and it shows that it is a quick and achievable way to get return-on-investment fast.

So my advice is; Start your Omni-Channel journey today. Don’t wait until you have upgraded your legacy systems, because you can do that later.

Happy DAX’ing friends, and thanks for reading my blogposts!

AX suggestion: XML Columns and XML indexes

In AX we have the following datatypes we can use in table fields.

But in MS SQL server there is a XML data type. With the XML data type we can store XML documents in the SQL Server database. And we can create columns and variables of the xml type and store XML instances in them. we can also create XML-indexes that speeds up searching on the XML contents. As seen here, I have manually added a XML column, and a XML primary index.

The Xml datatype allows us to perform several operations on the xml data from within t-sql. Although this is not very fast, it’s often better than round-tripping and doing the xml parsing in an application like Dynamics AX. Take a look at the following blog-post for a sample SQL- Querying XML attributes from XML Columns.

Why would this be interesting for the Dynamics AX ?

Let’s say we want to have the possibility to dynamically add new fields and information to an item/customer/BOM, but we don’t want to make customizations. One possibility would then be to have a XML field or a related table that contains a XML datatype column. In this column new fields and values could be stored inside the XML. By having some generic code that is extracting the XML values into fields or computed columns, would mean that we could provide a generic way of letting the user interact with dynamic fields, and that the user could add the fields as wanted on the fly without customizations. And still have the search, sort and filter capabilities.

I would like to use it for storing metadata like searchable retail product attributes. Since the XML format is a bit generic additional actions and events could also be stored inside the XML document. This could be functional triggers and workflows to be executed. It could even be specified down to the lowest record level.

So what is the difference from having XML’s in an ordinary text field ? One difference is the ability to use XML indexes, and to have search, filter and sort capabilities on the values stored inside the XML, without parsing the entire XML. More information on this is available here. Then the user could work with dynamic fields as it was real fields.

The first step in exploring this possibility is to have XML columns and XML indexes available in AX.

So my question to Microsoft is “Can we get the XML datatype and the ability to create XML indexes in AX 7.X ?

At least I think it is an interesting idea for the future.

DAX2012R3CU9 – DIXF – Automate import/export without customizations

The Microsoft Dynamics AX 2012 Data Import/Export Framework(DIXF) is an AX module import and export data in Microsoft Dynamics AX. We often use it in data migration projects to load legacy data from old systems. I was wondering if I could use DIXF as an automated integration, without any customizations. I wanted to see if I could have a folder where new customers are dropped in a folder, and then the DIXF automatically picked up the file, and imported it.

My first step is to have a small and minimalistic Excel sheet, that users can paste in the new customer records. This is how my Excel sheet looks like:

Most of these customers exists from before, but the last record is a new customer that don’t exists in my database.

The recommended process of setting up an import/export process is described here.

The first step is to create a source data format:

I then determine what entity to use, and create a target entity

When I do this, the mapping is done automatically for me, and I don’t have to understand all the database related complexity.

My next step is to create the processing group


I then click on the Entities in the processing group, and I select my created entity and that I want to use my created Excel source data format. I also select a sample file to see if the mapping is OK.

I then just check the mapping from Excel to the staging format, and make the necessary corrections.

My next step is to go back to the processing group, and to make the necessary batch job for automatic processing.

As you see here, I set the “type” to Directory, that DIXF will scan for new files. I also specify directories for processing, completed and error. I have therefore created the following directory structure for each integration:

The other important thing is the “Execute target step”. This this used for also executing the step that transfers data from the staging table to the target tables.

I then want this to be work in batch, so I enable the batch processing.

And then I need to wait for an entire minute……… I then saw that the file was moved from the 1_new folder, and ended up in the ¤_Completed folder.

I also see in the execution history, that the files was imported into the staging tables, and then imported into the target tables.

In my customer overview, I now see that I have a new customer, but is also made sure that other related data as addresses, and phone etc was created.

This concludes how you can use DIXF to automatically import data. What I can now do to import data, is just to create my Excel file, and then dump it into the right folder (.\1_New), and then the batch system take care of the test.

If you wonder all entities that are “out-of-the-box” supported from Microsoft, then take a look here. If still something is missing, you can always ask a developer to assist in creating the DIXF entities you need.

Happy DIXF’ing J


DAX 2012 R3 – Retail Channel POS reports

Both ePOS, mPOS and the upcoming AX7 CloudPOS have a built-in feature for showing small reports and KPI’s directly on the POS. These reports are not running against the Dynamics AX database, but against the retail channel database connected to that specific terminal.

The great thing about these reports, is that it does not require any heavy development to define these reports. They are just XML report definitions, that queries the database for specific columns or stored procedures. This means that we easily can create new reports based on the direct reporting requirements. In the report, shown below a report called “Sales by staff” is shown. Here the staff name, number of transactions, sales amount and average sales amount is shown.

The report can also be shown as graphics.

The report definitions are located in the RetailàSetupàChannel report configuration.

We see here the report definition, and it can look a bit cryptic. But let’s format the XML to better understand the definition. We here see that the retail report basically have 3 sections. The dataset, parameters and the reportcharts.

As we can see here, the dataset is referring to a stored procedure, with 3 parameters; Channel, start-date and end-date. If we open the SQL stored procedure we can see the exact implementation of it.

We see here that the actual source tables are an inner join between retailTransactionTable and retailStaffTable. We can also see that the amount is “retailTransactionTable.paymentAmount”. This amount is the amount of what the customer is actually paying inclusive taxes.

But a US-based customer of me asked if it is possible to make some minor changes, and just show the reporting exclusive taxes. To do this, it means that we must do some changes. We cannot use the existing standard stored procedure. We could surely create new stored procedures, but rolling this out to hundreds of terminals would take a lot of time. But we have the option to use an actual query in the report XML definition instead.

The first step is to try to create a SQL that retrieves the sales amount minus taxes. As far as I have interpreted the table retailTransactionTable, it seems that the field I can use is the -1*[NETAMOUNT]. Here is the query tested directly in SQL Manager, and I have “yellowed” out the differences compared to the script used in the stored procedure CRT. GETSALESBYSTAFFREPORT

It seems to be working, and the next step is to create a new XML report definition. I therefore took the report “101 Sales by staff”, and created a “101_US Sales by staff”, with the following XML report. Here I have colored the differenced to the original report in yellow. As you can see here, I use a query, instead of a stored procedure.

I also localize the labels in the report

To have the new report available to the users, I need to run the CDX Async job to send data to channels.

  1. In AX, go to Retail > Periodic > Data distribution > Distribution schedule

  1. Select job 1110, click Run now

  1. Wait couple of minutes for the job to finish

I then have the new retail report available.

Then I get my POS report, where the amounts is without taxes J

Happy DAX’ing !

DAX 2012 R3 CU9 Retail database version mismatch and GAC issues

When upgrading the Contoso AX 2012 R3 CU8 to AX 2012 R3 CU9 and then trying to open the ePOS, you might get the following error. “Database version mismatch. You must either apply a Retail POS hotfix or upgrade the Retail POS database

In the event viewer you might see the following:

A TechNet article gave me some indications that the issue was related to the CreateDatabase.dll in the Retail Channel Utility.

My trick to make this work again was to open the installation folder for CU9, and apply the retaildatabaseutility.msp

This upgraded the CreateDatabase.dll to include upgrade to version 6.3.105

When I then re-run the Retail Channel Configuration Utility on the channel database and on the offline database

After successfully upgraded the channel database, when trying to startup the POS, I get the following error; Could not load type ‘Microsoft.Dynamics.Retail.Notification.Contracts.SignatureCaptureConfirmation’ from assembly ‘Microsoft.Dynamics.Retail.Notification.Contracts, Version=, Culture=neutral..

And the POS screen shows no login, just the following “corrupted” screen.

I raisted a service request to Microsoft, and I got my answer today. It is related to All .NET applications will check first if the required assembly is available in the Global Assembly Cache (GAC) before searchin in the AppBase folder.

If we look at the C:\Windows\Microsoft.Net\assembly\GAC_MSIL we see the following

The date is older than the CU9. Microsoft explained me that this issue occures, because we have a “one-box” installation, and As we didn’t redeploy the Online Store after upgrading to CU9, the old assemblies were still in the GAC, causing the error. This would not come up in a real situation where all components are installed in separated server, but with this being an all in one environment we had this side effect.

The solution is therefore to uninstall the assembly from the GAC.

1. Check that GACUTIL is located at C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools in the VM-image

2. Run the command “gacutil /u Microsoft.dynamics.retail.notifocation.contracts”

You may need to do this for all Microsoft.dynamics.retail.* in the GAC_MIL folder

Then you can start the ePOS as expected J

Thank you Microsoft J

DAX 2009 – Shipping overview, a mirror of arrival overview


Dear AX 2009 customers. You are not forgotten, and Microsoft have support options available until year 2021 J. I wanted to write a blogpost to show that there still happens a lot of local innovation at the customers that are relying on this version of DAX.

Often, when we talk about purchase orders and sales orders, we often refer to them as mirrors. On the transaction level Purchase and sales can be seen as mirror processes, with just the opposite sign. But in standard AX the processes to handle the supply chain can be quite different. The question was therefore if it was possible to also mirror the supply chain processes. Taking the ideas from arrival overview and mirroring it to a shipment overview.

For receiving many reply on the Arrival overview to group together expected receipts and to create arrival journals. The Arrival overview is actually a quite good tool when you learn to use it. For the more the more advanced outbound logistics shipments are used to handle the picking, staging and loading of the goods. A customer came up the suggestion to create a “shipment overview”, but based on the arrival overview. This way the warehouse operator can search across shipments, but also have some volumetric indication of the load that is being released to the warehouse floor.

The arrival overview differs from other screens, because it actually consists of temporary tables that is build based on a query. The same thing happens here. The shipments are loaded on the upper grid, while the picking lines is loaded on the lower grid. There are advanced queries to control the loading of the data. Since it is a temporary table, the fields like address, weights, pallet quantity is real fields on the temporary table. This means that after the result have been fetched, the user can perform additional search and filtering. Like sorting and filtering the shipments in a based on addresses, pallet quantity, weight etc. Also the ability to multi select shipments or lines to be able to move lines between shipments. The screen will mainly be used for inquiry and for activating shipments.

And in relation to performance.. It is acceptable J

DAX2012 R3 – Playing with Retail CRT

The Microsoft Dynamics AX commerce runtime (CRT) serves as the engine for a retail channel. It connects to a CRT database that stores business data for the channel.. Dynamics AX uses the CRT Architecture in the Retail ePOS, mPOS and in the Sharepoint based eCommerce solution. Also the SiteCore eCommerce solution uses the CRT as the integration to Dynamics AX.

Let’s look at some of the interesting things with CRT.

1. It is a well-documented framework supported by Microsoft. More details on it is available here.

2. It can make it easier to integrate business logics to other eCommerce solutions. Like Magento.

3. We can create CRT web-services that handles information like very advanced retail prices, on-hand shipment, check-outs etc.

4. And MUCH more. This CRT we will have almost everything we need to interact with external system. It Rocks !

Let’s take an example. I would like to utilize the CRT to calculate a sales price with discounts. Price/discounts in AX is very flexible and almost all options you can imagine. Here is a small example of the possibilities we get in Dynamics AX 2012 R3 CU 8.

Let’s say we would like to expose this price/discount structure as a web-service to external parties. Since the CRT is relying on it’s own channel database, it means that the much of the integration is actually not creating a heavy load on the Dynamics AX database. We also have the possibility to “scale out” on the architecture.

The CRT is developed in Visual Studio, and is basically just a bunch of dll’s. I have to admit, that Visual studio, Web-services and is not my strongest side. So I decided to see it I could access and use the CRT framework directly from Dynamics AX. The new call-center module in AX 2012 R3 CU8 is using this, and I wanted to create a very simple job that exemplifies how CRT operates and can be used. Basically I’m looking for this:

I use the standard AX 2012 R3 CU8 contoso demo data, but added the following quantity discount to the Houston store;

Since I know X++, I’ll use X++ job to try this. The infolog I got was the following:

Here we see that the CRT returned the sales price, discounted price, and also information like total amount. Surely it can give everything else, but I wanted to keep the example easy to understand.

I created the following job to play with the framework, and it gives you an idea of how to interact with the CRT from AX.

static void demo_CRT_GetSalesPrice(Args _args)
    //To test this code, use the AX 2012 R3 CU8, and use the USRT company
    Microsoft.Dynamics.Commerce.Runtime.Data.IPricingDataManagerV2                pricingManager;
    Microsoft.Dynamics.Commerce.Runtime.Services.PricingEngine.DiscountParameters priceParameters;
    Microsoft.Dynamics.Commerce.Runtime.DataModel.SalesLine                       crtSalesLine;
    Microsoft.Dynamics.Commerce.Runtime.DataModel.SalesTransaction                crtSalesTransaction;
    System.Object                                                                 roundingRule, currencyConverter;
    CLRObject                                                                     clrSalesLines, enumeratorSalesLine;
    CLRObject                                                                     clrObjectSalesLines;
    System.DateTimeOffset                                                         activeDateTimeOffset;
    System.String                                                                 lineIdString;
    System.String                                                                 customerPriceGroup = "";
    Price                                                                         price;
    Qty                                                                           qty;
    InventDim                                                                     inventdim;

    RetailStoreTable    storeTable = RetailStoreTable::find("HOUSTON");   //Lets use houston as an example here
    RetailChannelRecId  channelId = storeTable.RecId;                     //This is the recid for a retail channel. A retail store is an extension of a retail channel.
    CurrencyCode        currencyCode = storeTable.Currency;
    appl.setDefaultCompany(storeTable.company(), false);                  //Setting default company to houstons company

    //Creating a unique line ID
    lineIdString = System.Guid::NewGuid().toString();

    InventDim.InventLocationId = storeTable.inventLocation;
    InventDim.InventSiteId     = InventLocation::find(storeTable.inventLocation).InventSiteId;
    InventDim                  = InventDim::findOrCreate(InventDim);

    //Pricing manager : Encapsulates data access to pricing information.
    pricingManager          = Microsoft.Dynamics.Commerce.Headquarters.RetailProxy.AxPricingDataManager::BuildDataManager(channelId);

    //Price parameters : types of AX discounts (aka trade agreement discounts, aka not Retail Periodic Discounts) are currently activated and should be allowed on the transaction
    priceParameters         = Microsoft.Dynamics.Commerce.Runtime.Services.PricingEngine.DiscountParameters::CreateAndInitialize(pricingManager);
    roundingRule            = Microsoft.Dynamics.Commerce.Headquarters.RetailProxy.ServiceHelpers::GetRoundingMethod(currencyCode);
    currencyConverter       = Microsoft.Dynamics.Commerce.Headquarters.RetailProxy.ServiceHelpers::GetCurrencyConverter(currencyCode);
    activeDateTimeOffset    = RetailPricingEngineHelper::getSessionDateTimeInChannelTimeZone(channelId);

    //Next we create a crtSalesLine, that represents a channel agnostic sales line.
    crtSalesLine = new Microsoft.Dynamics.Commerce.Runtime.DataModel.SalesLine();

    crtSalesLine.set_ItemId("0001");        //Lets use product 0001 as our example
    crtSalesLine.set_Quantity(10);          //Lets use quantity 10 as our example
    crtSalesLine.set_LineId(lineIdString);  //Let give this line a uniqe ID

    crtSalesLine.set_UnitOfMeasureSymbol("ea"); //Let use 'ea' as the unit

    //We then create a sales transaction, and add the salesline to this.
    crtSalesTransaction = new Microsoft.Dynamics.Commerce.Runtime.DataModel.SalesTransaction();
    clrObjectSalesLines = crtSalesTransaction.get_SalesLines();
    clrObjectSalesLines.Add(crtSalesLine);                      //This is where the we add the salesLine to the sales transaction

    //Lets calculate the prices

    //Lets calculate the discounts

    //And, let's show what the CRT can give us.
    qty   = crtSalesLine.get_Quantity();
    Price = crtSalesLine.get_Price();
    info(strFmt("Normal sales price is %1 when buying %2", price, qty ));

    Price = crtSalesLine.get_DiscountAmount();
    info(strFmt("Discount amount pr unit is %1, when buying %2", price/qty, qty ));

    Price = crtSalesLine.get_NetAmountPerUnit();
    info(strFmt("Net amount pr unit is %1, when buying %2", price, qty ));

    Price = crtSalesLine.get_TotalAmount();

    info(strFmt("Total amount is %1 when buying %2", price, qty ));

Maybe some of you can teach me how to expose the CRT in a web-service, so that we can easily




DAX 2012 end-to-end processes and APQC

With LCS (Life cycle Services), Microsoft have taken steps to introduced the APQC (American Productivity & Quality Center) Process Classification Framework as one of the business modelers.

Microsoft have also created some flowcharts to visualize the APQC processes in dynamics AX.

In some Dynamics AX implementation projects it have been decided to use the APQC model, and the participants(including me) was struggling connecting the APQC model to actual tasks and activities performed in DAX. So I started on a small mental journey to better understand how to use APQC model, and to be able to connect the dots from the classification framework into dynamics AX swim lane process maps.

First I thought that is was possible to take some level 4 APQC try to draw them. It is possible to draw the small and simple activities, but I was struggling drawing an end-to-end processes. Like order-to-cash. I quickly realized that I cannot use the LCS-APQC model to explain end-to-end DAX processes, since end-to-end processes often will involve many different departments, functions and processes.

To visualize a complex processes in an end-to-end process like order-to-cash using APQC classification model I could imagine looking something like this.

Here we see the involved processes visualized with the APQC classification. And it makes sense. But it does not tell you how to use AX in in this process, because that is described using the level 4 (or 5) in APQC. Like in 8.2.2 Invoice customers, would be a specific process, that we can visualize in Dynamics AX/LCS.

The other thing I realized was that APQC is not about implementing a ERP system, like DAX, but it’s about improving the processes you have(regardless of what systems and applications you have). Some of the activities may be handled in DAX, but many is just how to improve the actual steps the company actually does. Very often it can be the working procedure, involving many systems and internal working processes. So you don’t ask “How does this APQC process look in DAX ?”. You should rather ask “What APQC processes is involved in the selected DAX processes (like order-to-pay).

The APQC model will therefore not tell you how to use and setup Dynamics AX. It will just help you to have a common language to classify your processes and to improve them. When it comes to visualizing Dynamics AX processes in swim lane flowcharts it can be a good idea to use the APQC identifiers as process identification.

My tip when using LCS, is to understand the APQC process identification model, and use it as a repository and building blocks when you create your own processes.

By referring to APQC on your own business model you can start on process improvement project for that specific process. You will can also evaluate to implement the benchmark indicators as APQC exemplifies.

My quick summary is therefore;

1. Do I like LCS, and will use it à Yes, and I will use it for implementation and DAX process visualizations.

2. Do I like APQC à Yes, and I will use it for classification, benchmarking and process improvements.

3. Do I think that the LCS APQC processes reflect what we see at customers à No

4. What would be nice to have in LCS business modeler à More end-to-end processes, where the APQC process identifiers is used would be nice.

Happy DAX’ing !!


Distribution orders in a cross company scenario.

Many retail enterprises have selected Dynamics AX as their main system to handle their processes for financials, procurement, logistics, merchandising and POS/retail. They have a presents globally and is true international enterprises. We also often see that they are organized through partnerships and francizing, and to be cost efficient a lot of processes like brand, assortment and logistics have been centralized.

Dynamics AX for Retail natively supports most scenarios by providing efficient processes for the retail industry. The flow of products by using intercompany trading simplifies transactions handling.

One question that arises is how clear boundaries between the legal entities should be ? What I would like to discuss in this blogpost is how to structure legal entities in Dynamics AX, and still be efficient. Let’s say we have the following 3 level structure of the enterprise.

Here we have a central enterprise legal entity, that have the responsibility of overall finance, reporting, products, recommended retail pricing, assortments and procurement.

The next tier is the regional logistics units. They can be own operated warehouses, or outsourced to third party logistics providers. The purpose is not only to serve stores and partners, but to perform logistics processes like receiving, quality control etc.

The tier at the bottom is where all the partners and stores are located. This can be based on a franchise model, partner or own stores. At least one legal entity per partner or country.

How to handle transactions between these entities?

Keeping a good track on processes and the transactions is vital. We need to know where costs occur, and how the transactions are handled. Here I would like to discuss a bit how the transactions can be handled. Let’s start with the partners and stores.

Products are purchased through a intercompany purchase order. If products needs to be internally moved, then transfer orders are used. When the stores sell products, then POS and sales orders are used. The transaction handling clean and easy with simple transactions. Some times there may be issues with costs that will arrive later, like transportation costs. This can be handled with misc. charges as described here.

In the figure above we see how inventory costs are originating from the vendor and the costs are propagated through the intercompany chain. Also how we can add additional charges like insurance, freight, and make sure that these costs flow through the intercompany chain.

The next tier, the regional logistics warehouses/distribution centers is also very simple. All goods are purchased from a vendor. This means that the vendor will have a matching sales invoice per regional logistics center.

All sales out of a regional logistics center is a intercompany sales order. If the center is a third party logistics provider, this means that the legal entity is mostly being handled by automated transactions and by integrations. What is important, is that it is an actual legal entity and is being handled as one. By doing this, it means that there are less need for customizations in handling financials and taxes.

Then we come to processes being handled in the headquarters; Enterprise processes and functions. This is the main topic of what I wanted to write about. The idea is to be able to control both the procurement/purchase and the distribution from a central perspective. It is fully possible to do this with standard AX, but it can be a bit resource intensive. I wanted to see if it was an easier way to deal with this, without making too many customizations. The concept is the “distribution order“.

Company wide distribution orders does not exists as a concept in standard AX. A distribution order is close to the “Buyer’s push” functionality that exists in Dynamics AX, but to be able to be handled in a global intercompany scenario. It means that you from a central perspective see and plan all the purchase orders and intercompany sales orders, regardless of whish legal entity that is performing the actual transactions.

The distribution order is not linked to a legal entity, but is created and controlled by HQ. The resources doing planning and procurement, and create a distribution, and add the lines/items they want to distribute. They can also add additional purchase order lines to the distribution. In the distribution lines the distribution quantity can be fetched directly from the purchase lines, or can be manually overridden.

It is also possible to “reverse” the creation process, where the planner starts with a set of manually created distribution lines, and then create the purchase orders created in each regional warehouse/legal entity.

It is also possible to create a distribution order of the type “On-hand” and “end-of-season”, that will base the quantity of the distribution lines on the available physical.

The planner can then run the process “create suggestion”, based on a distribution key. This will create a Distribution result. It will have one line per store. The planner can then choose to make manual changes. When the result is OK, then the planner can activate the distribution order. This will make the necessary intercompany sales orders from the regional logistics companies to the partner/stores.

Since the distribution order will have visibility across legal entities, the purchase lines and the intercompany sales orders can be additional linked through inventory marking. This can then enable the possibility for cross docking scenarios, and also to add the ability for direct delivery scenario’s.

We will then have the possibility to give the buyers and planes an overall view of all inbound and outbound logistics through all regional distribution centers. Also the ability to show current status and progress.

I have done this before in AX 2009 as you can read about here. And I would love to add this feature to the free Codeplex AX 2012 Global retail package. If this is interesting for you to have, please reach out to me, and we can have a discussion on an jointed cooperation.

Dynamics AX 2012: Warming up for presales demo

To really impress potential buyers of Dynamics AX, it is important that we are capable to show that AX 2012 responds fast. We normally use the Contoso hyper-v demo environment, and our laptops have limited resources. Starting a demo on a cold system, we often see that forms takes some time to operate in optimal performance. If you already have opened a form, it is much faster the second time you open it.

So how can we give the users a view of a fast system without manually opening all the forms prior to the demo?

We can warm them up J. I use the following job-script to open and close all the forms I’m planning to use. I just traverse through the AOT, and open the form, and then I close them again.

static void WarmupRF(Args _args)
    //This code is for "warming" up all RF* forms and code I have in the VAR-layer
    UtilElements e;
    TreeNode treeNode;
    FormRun formRun;
    Args args = new Args();

    while select e
        where e.utilLevel  == UtilEntryLevel::var    //<-- spesify layer here
        &&    e.recordType == UtilElementType::Form  //<-- and only forms
        &&    e.name like "RF*"                      //<-- I only want the forms that starts with the prefix RF*
                treeNode = xUtilElements::getNodeInTree(xUtilElements::parentElement(e));
                formRun = ClassFactory.formRunClass(args);
                //formRun.run();   //<-- No need to run the form, but sometimes it can load the data

The code must be modified to suit what you want to “warm-up”, but you get the idea.

This will make you demo go much more smooth, and you truly show the potential and performance of a warm Dynamics AX system.

Happy DAX’ing

DAX 2012 R3 – Kick-back, Bonus and marked support

We often see that vendor’s use loyalty marketing in hopes of nurturing customers to be even better customers. Introducing new products in a marked can be costly, and success is often rewarded based on performance.

We often encounter requirements where vendors is compensating with kick-back, bonuses and marked support on specific products. The agreements can be formulated like; If you sell more than 1000 units per quarter, we will give you a 10% discount on purchased products for that quarter. But the transactions and invoices then may be that the original invoice is on the exact amount, and each quarter a credit note with the bonus is received. The idea behind kick-backs can be controversial, but this is not the topic her.

Having the cost price on the products determined on the actual purchase price give a very good foundation for a healthy business model, and also gives a much better insight to revenues and margins . But this “delay” in the transactions and payments introduces some issues for customers that relies on using inventory models as FIFO, FEFO etc.

  • What is the actual cost price in a scenario with kickbacks?
  • How can we calculate the actual revenue and margins?
  • Does my system support this feature?

If you have Dynamics AX 2012 R3, then you are lucky. There is a very nice way to handle kickbacks effect on product cost prices, and making sure that the cost prices is affected accordingly.

The name of the feature is charges. With charges we make adjustments of the cost prices on the right dates, and on the right transactions. The inventory closing will make sure that the cost prices are settled to the sales orders/issue inventory transactions.

The first step is to create a new charge, that will adjust the cost price on specific invoices, and also post on a selected ledger account.

Then let’s say the following received invoice from 2013 of 200 Surface Pro 128:

I see on the inventory transactions that the cost amount is 179.800 USD.

The vendor now want to give me a kick-back for my effort of managing to sell these old notepads. When they send us a credit note of 50% of the amount, and I want to post this so that the cost price changes on the inventory transactions.

When this is posted it will adjust the cost of the inventory transaction on the selected posting date:

The voucher transactions looks like this.

In AX 2012 R3 the inventory transactions will make the necessary adjustments on the issue transaction.

The next step is to receive and post the invoice from the vendor post it against the selected ledger account on the charge code, and eventually also run the inventory closing procedure.


There are no need to credit post the purchase order for adding kickbacks, bonuses and marked support etc. It is supported in Dynamics AX 2012 R3.

Happy DAX’ing





DAX 2012 Remove reservations and markings from a sales order

Some friends of me have asked how to remove reservations and markings on a sales order. Going through line by line can be time consuming and they wanted to know how this could be solved by a single “click”.


static void Tutorial_UnreserveSalesTable(Args _args)
    InventTrans             inventTrans;
    InventTransOrigin       inventTransOrigin;
    SalesLine               salesLine;
    InventMovement          inventMovement;
    InventUpd_Reservation   inventUpd_Reservation ;
    SalesId                 SalesId = "001260";//<--- Send/get sales id here

    // Remove reservations and markings on a reserved salesorder
    while select inventTrans
        where inventTrans.StatusReceipt                == StatusReceipt::None
           && (inventTrans.StatusIssue                 == StatusIssue::ReservPhysical 
           ||  inventTrans.StatusIssue                 == StatusIssue::ReservOrdered)
        exists join inventTransOrigin 
            where   inventTransOrigin.RecId            == inventTrans.InventTransOrigin
        exists join salesLine 
            where   salesLine.InventTransId            == inventTransOrigin.InventTransId                    
                &&  SalesLine.SalesId                  == SalesId    
            if (inventTrans.MarkingRefInventTransOrigin)
                InventTransOrigin::deleteMarking(inventTrans.MarkingRefInventTransOrigin, inventTrans.InventTransOrigin, -inventTrans.Qty, true);
                InventTransOrigin::deleteMarking(inventTrans.InventTransOrigin, inventTrans.MarkingRefInventTransOrigin, inventTrans.Qty, true);

            if (inventTrans.StatusIssue == StatusIssue::ReservPhysical || inventTrans.StatusIssue == StatusIssue::ReservOrdered)
                Inventmovement = inventTrans.inventmovement(true); 
                inventUpd_Reservation = InventUpd_Reservation::newInventDim(inventmovement,inventTrans.inventDim(), -1 * inventTrans.Qty, false); 

The next step would be to create a class, so that it can be performed in CIL, and some code that refreshes the sales order for the end-user.