If you have ever tried extending the warehouse mobile flows in Dynamics 365 Finance and Operations, you know the code is very complex and extremely difficult to make sense of and modify without introducing regressions in unpredictable scenarios.
This was of course on our mind as well for some time, which is now I am pleased to announce the release of a new framework for implementing such flows, called ProcessGuide framework.
You can read the documentation we've published so far here:
https://docs.microsoft.com/en-us/dynamics365/unified-operations/supply-chain/warehousing/process-guide-framework
We will incrementally start converting the existing flows, and you should do the same with yours.
Give it a try and let us know if you have any feedback by leaving a comment here or reaching out directly!
Thanks
Tools and tutorials for Microsoft Sustainability Manager, Microsoft Cloud for Sustainability, Microsoft Emission Impact Dashboard, as well as Microsoft Dynamics AX aka Microsoft Dynamics Supply Chain Management (F&O)
Code highlighting
Showing posts with label WMDP. Show all posts
Showing posts with label WMDP. Show all posts
Friday, November 16, 2018
Thursday, March 30, 2017
Development tutorial: Platform improvements for handling X++ exceptions the right way
A while back I wrote about a pattern we discovered in X++ code which could lead to serious data consistency issues. You can read it again and look at an example mfp wrote up here:
http://kashperuk.blogspot.dk/2016/11/tutorial-link-handling-exceptions-right.html
With the release of Platform update 5 for Dynamics 365 for Operations we should now be better guarded against this kind of issue.
Let's look at the below example (needs to be run in USMF company):
Before Platform Update 5 the result would be:
Now with Platform Update 5 the result will be:
That is, we
So, again, we will simply not handle the 2 special exception types (UpdateConflict and DuplicateKey) any longer in a catch-all block inside a transaction scope, you will either need to handle them explicitly or leave it up to the calling context to handle.
This will ensure we do not get into this erroneous code execution path where the transaction is not aborted, but we never handle the special exception types internally.
Hope this helps!
http://kashperuk.blogspot.dk/2016/11/tutorial-link-handling-exceptions-right.html
With the release of Platform update 5 for Dynamics 365 for Operations we should now be better guarded against this kind of issue.
Let's look at the below example (needs to be run in USMF company):
class TryCatchAllException
{
public static void main(Args _args)
{
setPrefix("try/catch example");
try
{
ttsbegin;
TryCatchAllException::doSomethingInTTS();
ttscommit;
}
catch
{
info("Inside main catch block");
}
info(strfmt("Item name after main try/catch block: %1", InventTable::find("A0001").NameAlias));
}
private static void doSomethingInTTS()
{
try
{
info("Doing something");
InventTable item = InventTable::find("A0001", true);
item.NameAlias = "Another name";
item.doUpdate();
throw Exception::UpdateConflict;
// Some additional code was supposed to be executed here
}
catch
{
info("Inside doSomething catch block");
}
info("After doSomething try/catch block");
}
}
Before Platform Update 5 the result would be:
As you can see, we
- went into doSomething(),
- executed the update of NameAlias for the item,
- then an exception of type UpdateConflict was thrown
- At this point the catch-all block caught this exception without aborting the transaction, meaning the item is still updated. We did not abort the transaction because we did not think about this case before
- We exit the doSomething() and commit the transaction, even though we got an exception and did not want anything committed (because the second part of the code did not execute)
- As a result, the NameAlias is still modified.
Now with Platform Update 5 the result will be:
That is, we
- went into doSomething(),
- executed the update of NameAlias for the item,
- then an exception of type UpdateConflict was thrown
- At this point the catch-all did not catch this type of exception, as we are inside a transaction scope, so the exception was unhandled in this scope, and went to the one above
- Since we are by the outer scope outside the transaction, the catch-all block caught the exception,
- and the NameAlias is unchanged
So, again, we will simply not handle the 2 special exception types (UpdateConflict and DuplicateKey) any longer in a catch-all block inside a transaction scope, you will either need to handle them explicitly or leave it up to the calling context to handle.
This will ensure we do not get into this erroneous code execution path where the transaction is not aborted, but we never handle the special exception types internally.
Hope this helps!
Thursday, March 02, 2017
Announcement: Warehouse Mobile Devices Portal improvements with February update of AX 2012 R3
A monthly cadence AX 2012 R3 update for February has just come out on LCS, and with it a few changes our team has done that deal with overall behavior and performance of WMDP - the Warehouse Mobile Devices Portal used in the Advanced warehousing module.
I want to call them out here, and if you are reading my blog to keep up to date with the Warehousing changes, I strongly encourage you to install the below changes:
I want to call them out here, and if you are reading my blog to keep up to date with the Warehousing changes, I strongly encourage you to install the below changes:
- A functional enhancement, that allows you to start execution of a work order that has some lines awaiting demand replenishment, processing the lines that can be picked already now
- Can also be downloaded individually as KB3205828
- Make sure to pair it up with KB3209909, if you use the Full button when executing work
- You can read more about the functionality in my earlier blog post: http://kashperuk.blogspot.dk/2016/11/tutorial-link-executing-outbound-work.html
- A performance optimization, that avoids updating certain persisted counters on the wave when work goes through its stages.
- This also ensures they do not get out of sync, as they were used to make certain decisions about what is allowed for a work order
- Can also be downloaded individually as KB3217157
- An integrity enhancement, that ensures we always are in a valid state in DB, where each service call from WMDP is now executed within a single transaction scope
- Can also be downloaded individually as KB3210293
- Can be turned off in code for a selected WHSWorkExecuteDisplay* class, if needed
- This is a great change ensuring we do not commit any data unless all went well, but might hypothetically impact your new/modified WMDP flows, if you handle your exceptions incorrectly today. If you do find issues with them, please let me know, I am curious to know your specific examples.
- Various minor enhancements, that ensure WMDP performs well under load
- Can also be downloaded individually as KB3210293
- This includes improvements to enable better concurrency in various WMDP scenarios, better error handling on user entry, etc.
Again, install these, try them out, and provide feedback!
There are a lot more enhancements and bug fixes that went into this release, you can read the full list by following the link below:
Thanks!
Thursday, January 19, 2017
Warehouse Mobile Devices Portal - Now as an App for your mobile device
Our team has been working on an application that would eventually replace the existing web-site based Warehouse Mobile Devices Portal (WMDP), as we see the trend of warehouses relying more and more on phone-based devices with added scanner capabilities (Honeywell Dolphin 75e, for example).
We are happy to announce that the app is now publicly available.
Installation and configuration instructions, as well as download links, can be found on the Dynamics 365 for Operations wiki website:
https://ax.help.dynamics.com/en/wiki/install-and-configure-dynamics-365-for-operations-warehousing/
The app works on Windows 10 devices, as well as Android devices. iOS is not supported, since such devices are generally not used in warehouses due to high cost and some technical limitations.
The app only works with Dynamics 365 for Operations, so older releases like AX 2012 R3 can only use the old WMDP web site.
The app is an alternative front-end to all the business logic and screen generation logic in X++, so does not contain any business logic inside, similar to the old WMDP.
As you will see, we have re-worked the user interface, focusing on showing as few controls as possible at once, adding cards for showing grouped data like on-hand info, work list, etc. A special keyboard to entering quantities, support for scanning, etc.
Here is how the app looks on a Windows Phone:
We are very excited to get this out into your hands and are looking for feedback. So don't be shy :)
Update 2017-01-20: Read a much more detailed description from Markus on the SCM blog:
https://blogs.msdn.microsoft.com/dynamicsaxscm/2017/01/20/announcing-dynamics-365-for-operations-warehousing/
We are happy to announce that the app is now publicly available.
Installation and configuration instructions, as well as download links, can be found on the Dynamics 365 for Operations wiki website:
https://ax.help.dynamics.com/en/wiki/install-and-configure-dynamics-365-for-operations-warehousing/
The app works on Windows 10 devices, as well as Android devices. iOS is not supported, since such devices are generally not used in warehouses due to high cost and some technical limitations.
The app only works with Dynamics 365 for Operations, so older releases like AX 2012 R3 can only use the old WMDP web site.
The app is an alternative front-end to all the business logic and screen generation logic in X++, so does not contain any business logic inside, similar to the old WMDP.
As you will see, we have re-worked the user interface, focusing on showing as few controls as possible at once, adding cards for showing grouped data like on-hand info, work list, etc. A special keyboard to entering quantities, support for scanning, etc.
Here is how the app looks on a Windows Phone:
![]() |
Log in screen for new WMDP app |
We are very excited to get this out into your hands and are looking for feedback. So don't be shy :)
Update 2017-01-20: Read a much more detailed description from Markus on the SCM blog:
https://blogs.msdn.microsoft.com/dynamicsaxscm/2017/01/20/announcing-dynamics-365-for-operations-warehousing/
Wednesday, December 28, 2016
Configuration tip: Warehouse mobile devices portal Native application in Azure Active Directory
Setting up the Warehouse mobile devices portal is a relatively simple process, and is described in detail on the corresponding wiki:
https://ax.help.dynamics.com/en/wiki/warehouse-mobile-devices-portal-for-microsoft-dynamics-ax/
However, now and again I would get complaints around the authorization process not working properly, or asking for interactive login, both of which shouldn't be necessary for the authorization method used by WMDP.
So in this post I would like to give a small configuration tip that prevents the below error message:
https://ax.help.dynamics.com/en/wiki/warehouse-mobile-devices-portal-for-microsoft-dynamics-ax/
However, now and again I would get complaints around the authorization process not working properly, or asking for interactive login, both of which shouldn't be necessary for the authorization method used by WMDP.
So in this post I would like to give a small configuration tip that prevents the below error message:
Error: "The user or administrator
has not consented to use the application with ID ''. Send an
interactive authorization request for this user and resource.
The reason this error is shown is because the Native application setup in Azure for WMDP has access to resources that require the Azure admin to consent to that first.
![]() |
WMDP app is configured to allow access to AAD resources |
As you can see, some of the resources WMDP app has access to require prior Admin consent.
Recommendation:
When configuring the Native application for WMDP in Azure, only give it permissions for the Microsoft Dynamics ERP resources.
This will ensure you don't get unexpected errors when trying to connect to WMDP.
Happy Holidays to all of you!
Stay tuned for more posts next year and subscribe if you haven't already to get updates on the latest tips and tutorials for Dynamics 365 for Operations aka Dynamics AX aka Axapta :)
Thursday, November 24, 2016
Tutorial Link: Handling exceptions the right way in X++
Michael and I have been working the last couple of weeks to uncover some of the difficult to repro bugs in Warehouse management code, and one of the things we discovered is a pattern which can lead to very unpredictable behavior when used incorrectly.
I encourage all of you to read it and make sure all of your code is up to standard.
https://blogs.msdn.microsoft.com/mfp/2016/11/24/x-the-catch/
Thanks!
I encourage all of you to read it and make sure all of your code is up to standard.
https://blogs.msdn.microsoft.com/mfp/2016/11/24/x-the-catch/
Thanks!
Saturday, October 01, 2016
Tutorial: Label printing in Microsoft Dynamics AX 7
A while back I posted a tutorial on how to configure and use the label printing functionality in Microsoft Dynamics AX 2012 R3:
http://kashperuk.blogspot.dk/2014/09/printing-labels-with-new-warehouse.html
With the release of Microsoft Dynamics AX 7 and the move to the Cloud, printing has become a bit more complicated than before, since the printers are not on the same domain / network as it used to be when everything was installed on-premise.
The major change that I will talk about in this post is the way we set up printers now.
http://kashperuk.blogspot.dk/2014/09/printing-labels-with-new-warehouse.html
With the release of Microsoft Dynamics AX 7 and the move to the Cloud, printing has become a bit more complicated than before, since the printers are not on the same domain / network as it used to be when everything was installed on-premise.
The major change that I will talk about in this post is the way we set up printers now.
Installing & configuring the Document Routing Agent
The wiki article describing the installation and configuration of the Document routing agent is very well written and contains a lot of details about the restrictions and requirements for this to work, so I will not repeat it here. Here is the link:
For example, one of the unexpected requirements is that Adobe Acrobat Reader is installed.
Note, that with a recent update of the AX platform, the Document Routing Agent can now be run in the background as a Windows service, which adds a number of benefits. Read more about that in the below wiki article:
Now that the document routing agent application / service is installed and can sign in to AX, you can select the printers you want to expose, activate them in the Network printers form, as described in the above wiki article.
After that, they will show up in the Printer name lookup on the Document Routing form as before.
Everything else is pretty much the same from a user standpoint, nothing changed in terms of document routing configuration or the WMDP configuration.
So when a label needs to be printed, here's what happens now:
- The label is generated in the ZPL code, as before, containing all the replaced variables from the document routing layout
- It is then saved in a file in the Azure Blob Storage (since the AOS does not have access to the client machine, we cannot just go and do something with it) in a pre-configured folder, including all the relevant settings, specifically, which printer to use for this label
- The Document Routing Agent application / service on the network printer server or just as a local application one of the network PCs will periodically query if there are any pending files to be printed, downloads them from the Azure Blob storage and, depending on the printer settings defined for the specific file, re-routes the file to be printed, whether that is to a Zebra printer, or, in the case of regular SSRS reports, to a PDF document, or a regular printer.
Note that before Platform Update 2 there was an unpleasant bug in this framework, which prevented printing of labels from the Warehouse Mobile Devices Portal. That has since been fixed, and you should be able to print labels without any problems (Workaround for people on earlier installations is to use the WMDP enumlator form from AX web client)
Give it a try and report back here in case you find some of the instructions unclear, or if something is not working according to your expectations.
Thanks!
Saturday, September 24, 2016
Tool: Dynamics AX 7 browser power & Table browser add-in for Google Chrome
Microsoft Dynamics AX "7" is, as you all know, a Cloud release, which means that the one and only client available for AX "7" is the web browser.
Nowadays browsers are pretty advanced, meaning that you get pretty much the same look and feel, as in a "rich" Win32 client. It has its drawback as well, of course, but we are not here to talk about those.
On the positive side, it now allows for a number of entry points that will take you directly into the flow or form you want to execute, because most of the information about where you want to go is provided through the URL itself.
I have already previously posted about the Warehouse Mobile Devices Portal emulator form and how you can access it. Here it is again:
https://usnconeboxax1aos.cloud.onebox.dynamics.com/?cmp=USMF&mi=action:WHSWorkExecute
You basically specify your Dynamics AX URL, followed by which company you want to connect to, and which menu item to open - in this case, an Action menu item WHSWorkExecute. Easy, right?
Well, you can do the same trick to open other menu items, and that is what this blog post is about - Table Browser.
As some of my old readers know, I'm a big fan. If you are not one of those, and are running previous versions of AX, check out the blog post below, it's awesome!
http://kashperuk.blogspot.dk/2007/09/devsystablebrowser-version-20-is-out.html
Well, Dynamics AX "7" also has a little something to help you browse tables now.
Here is a cool little add-in for Google Chrome, which allows you to open the table browser for a selected table in a selected company (settings are persisted, so you don't need to enter the company name each time):
https://chrome.google.com/webstore/detail/ax-table-browser-caller/nahbldacmaibopfiiaoboloegpobpccn
I've just tried it out and it's pretty neat, so take it for a spin and let me know what you think!
To finish off, let's just take a quick look at what the add-in actually does, which is - opens a pre-defined URL similar to WMDP link above:
https://usnconeboxax1aos.cloud.onebox.dynamics.com/?mi=SysTableBrowser&TableName=WHSWorkTable&cmp=USMF&limitednav=true&lng=en-us
We specified that we want to open the Display (which is the default) menu item SysTableBrowser, passed in an argument TableName WHSWorkTable. We also specified the company, as before, as as well the display language. We've also added in the limitednav=true flag, which removes some of the navigation panels and buttons, so you cannot navigate away from this page to another form or menu.
Technical Note. Check out UrlUtility.getQueryParamValue('TableName'); This could potentially be used in some of your customizations
Friday, August 12, 2016
Tutorial: Anchoring and Dock management profiles in Warehouse management in Dynamics AX
Scenario introduction
Today I wanted to talk about some of the less known features we have in the Warehouse management module, namely the Anchoring functionality and the Dock management profiles.
Let's start with just describing a scenario where this might be useful.
A company might be reselling goods in an environment, where deliveries are frequent, and there is no time at the dock door to sort out situations where the goods are spread out across multiple staging locations. The trucks need to pick up everything already packed nicely and be off fast. Very often, the truck driver himself would load the goods on the truck, without waiting for warehouse crew (in which case he'd have a WMDP scanner hooked in to our system). Sounds like a typical day for any distributor.
In order to achieve efficiency in the above scenario, multiple things need to come together:
- In case of multiple picks for the same delivery, they need to all be assembled in the same place so it takes less time then to load them into the truck
- Since the number of staging / loading lanes is limited, we need to restrict how many deliveries are placed in each one, so there is no confusion later about what goes where
- Dock scheduling needs to be in place, so there are no hold ups due to unavailability of dock doors upon truck arrival (outside the scope of this blog post)
Anchoring
This feature gives you the ability to "anchor" multiple work order lines together, so that items picked all follow the same path in the warehouse. You can choose if you want the work to be grouped together based on the shipment they belong to, or the load they are on.The setup is very simple, and you only need to choose if you want to anchor by shipment or by load.
It is done on the Mobile device menu items form for any menu items that are of type "Existing work" (apart from Cycle count grouping and Handle by License plate). First you tick the Anchor checkbox, and that will allow you to select what to Anchor by, as shown in the screenshot below:
![]() |
Anchoring on Sales Picking mobile device menu item |
And that's it. Now, when any of the work lines from the shipment/load is put down into a specific location, whether that is for staging or at the final shipping location, all other related work lines will be updated with the same location.
All the proper validation, such as checking for mixing rules, batch mixing, status mixing, etc. are performed, of course, along with the check for dock management rules, which we'll talk about below.
This feature is also useful when a worker is to put items for order 1 in a staging location by Dock 1, but can’t because a previous load hasn’t cleared the location. Rather than waiting for the Dock 1 staging location to become available, the worker decides to use the staging location for Dock 2 instead, and overrides the suggested staging location. The put location for all remaining items for the related work orders is updated to the Dock 2 staging location automatically.
Note
If you subsequently override the location when executing one of the anchored puts, that will be allowed, and will not update the other locations, treating this put as a 'special case'. If you do not want that to happen, you could consider not allowing your workers to override Put location (That is set up on the Worker).Technical details
- Work is anchored inside the WHSWorkExecuteDisplay.processWork() method, that is, during work execution, more specifically, when executing the Put step.
- This is done by invoking WHSWorkExecute.anchorWork(), which in turn invokes depending on the setup one of the two methods:
- WHSWorkTable::anchorWorkByShipment()
- WHSWorkTable::anchorWorkByLoad()
- Work lines that were anchored are stamped accordingly through the IsAnchored field
Dock management profiles
This feature extends the restrictions you can put in place on where goods can be placed in the warehouse, e.g., not allowing to have more than 1 item or batch, or inventory status, in a location.Through dock management profiles you can restrict that items are not placed into a location, if they belong to a different order, or a different load, or even a different work order type. You configure this through the Dock management profiles form, as shown below:
![]() |
Dock management profiles |
These rules are validated both when work is only being created (as in, when evaluating the locations found through the Location directives), as well as when executing the Put, as in the above example with anchoring. It is also triggerred when changing the work location for a shipment or load (By clicking on Change work location button in the corresponding form).
Note, that no validation will be performed (including the general mixing rules and stocking limits) when determining the location to Put, if the Assume empty location for new wave is set on the dock management profile.
As the name implies, these restrictions only apply to staging locations and final shipping locations.
You configure this by specifying a dock managment profile on the selected location profile, as shown in the screenshot below:
![]() |
Dock management profile Id on STAGE location profile |
Note, that even though you can specify a dock management profile for any location profile, including inbound, it will not have any effect.
Technical details
- Class WHSDockManagement is responsible for all the validation ensuring we do not mixed inappropriately in the location.
- Static method validateDockMgmtMixing is the entry point
Scenario walk-through
Note
I have highlighted in bold the 3 points I want to make in the walk-through.
I have created the following 3 sales orders for the demo:
- SO 000779, part of Load USMF-000007
- 10 pcs of item M9200 from WH 51
- 20 pcs of item M9201 from WH 51
- SO 000780, part of Load USMF-000007 (added after the first order was released to warehouse)
- 7 pcs of item M9200 from WH 51
- SO 000781, part of Load USMF-000008
- 3 pcs of item M9201 from WH 51
I have released them to the warehouse, as a result getting three work orders:
- Work USMF-000017
- Pick 10 pcs of M9200 from BULK-001
- Pick 20 pcs of M9201 from BULK-002
- Put 30 pcs to STAGE
- Pick 30 pcs from STAGE
- Put 30 pcs to BAYDOOR
- Work USMF-000018
- Pick 7 pcs of M9200 from BULK-001
- Put 7 pcs of M9200 to STAGE
- Pick 7 pcs of M9200 from STAGE
- Put 7 pcs of M9200 to BAYDOOR
- Work USMF-000019
- Pick 3 pcs of M9201 from BULK-003
- Put 3 pcs of M9201 to STAGE2
- Pick 3 pcs of M9201 from STAGE2
- Put 3 pcs of M9201 to BAYDOOR
As you can see, the third work was directed to a different staging location, STAGE2, because I have set up the dock management profile to prevent mixing of items not belonging to the same Load. The first two work orders are both going to STAGE, since they belong to the same load.
Now, we will execute the second work and attempt to override the Put location, and put it to STAGE2 instead of the suggested STAGE:
![]() |
Put step for Work USMF-000018 |
![]() |
Specify reason for Override Location |
![]() |
Specify new location |
![]() |
Error message |
As you can see, we have received a message "Failed to change location due to dock management rules.". That is as we expected, because we have work 3 already on its way to STAGE2, and it belongs to a different Load, so cannot be mixed.
Let's now specify a valid location, STAGE3, which is empty and has no incoming work:
![]() |
Confirm Put to location STAGE3 |
After confirming the Put, we get the standard "Work completed" message. Let's now review the work:
![]() |
Work USMF-000018 |
As expected, the second work was updated to reflect the overridden location. This has nothing to do with anchoring, just standard "Override Loc" behavior. But we know that the first work, Work USMF-000017 should also have been updated, because it is anchored by Load. Let's take a look:
![]() |
Work USMF-000017 |
As you can see, it was also updated to now point to STAGE3, both on the Put and the following Pick step (as this is a staging location, so we know there are subsequent steps). Trying to execute this work now would suggest STAGE3 as the location to put the item into.
The same can happen for loading work, updating the final shipping location on all relevant work lines, if the Sales Loading mobile device menu item was set up accordingly.
Pretty simple, but with great flow control for the warehouse managers out there.
Conclusion
Let me know if you find these features useful, and if you use them in an alternative way in your company / have modifications on top.Thanks
Friday, June 10, 2016
Tutorial: Moving inventory out of a location to complete a put away inbound operation
Introduction
As some of you have probably already read in this blog post, we have recently made some improvements for the inbound flow in Warehouse management, and I wanted to do a quick recording demoing an example which uses some of these capabilities.For some additional information about the different types of movement flows currently supported please follow to another blog post we've recently published.
Another reason for publishing this particular scenario recording is that we are currently working on another improvement, this time focusing on adding more flexibility for inventory movement operations, where there are work reservations blocking the items in the location from being moved anywhere else. This is a known pain point for a number of customers, and if all goes well, we'll have it addressed in the Fall release of the new Dynamics AX.
The scenario recording is covering one such flow, except for the fact of existing work reservations - in my example there will be none.
I am trying out uploading this to Office Mix, as well as YouTube. Let me know if you like the Office Mix approach - I think it's pretty cool as it makes it possible to browse the recording to a specific point more easily.
Demo
YouTube video:
https://www.youtube.com/watch?v=P7W2Th43-Fo
Question for you
As you can see from the above video, the approach John took is to cancel out of the Put, complete the movement, and then continue the Put.An alternative could be to complete the put, even though physically the goods are not yet placed into the location, and then create the movement, but in this case we are for a period of time out of sync with the app.
Please leave a comment if the above approach is not a good match for your company, and explain what approach you use instead and why.
Thanks!
Monday, May 16, 2016
Announcement: Links to Technical Conference session recordings available on Learning Portal
As I mentioned in one of my previous posts (http://kashperuk.blogspot.dk/2016/02/announcement-technical-conference-2016.html), I presented a number of things at the recent Tech Conference around the new version of Microsoft Dynamics AX.
If you are interested in learning about AX "7" and have missed the Tech Conf, you can watch recordings and view session content online now.
All of the recordings from Tech Conf 2016 are available on Learning Portal
More specifically, if you are interested in one of the sessions I advertised earlier, here are direct links:
(Copy/pasting my original session descriptions below)
Good content in all of these and detailed descriptions throughout, so take a look and let me know what you think.
Thanks!
If you are interested in learning about AX "7" and have missed the Tech Conf, you can watch recordings and view session content online now.
All of the recordings from Tech Conf 2016 are available on Learning Portal
More specifically, if you are interested in one of the sessions I advertised earlier, here are direct links:
(Copy/pasting my original session descriptions below)
- An instructor led lab on building workspaces, a new concept in the latest version of Dynamics AX. This comes in two parts, 1 hour long each, and as a result you will have built a fully functional workspace with Tiles, Lists and Charts.
- Part 1, Step-by-Step guide
- Part 1, PowerPoint Slides
- Part 1, AX project contents, Baseline (missing from Learning Portal)
- Part 2, Step-by-Step guide
- Part 2, PowerPoint Slides
- Part 2, AX project contents, After Lab 1
- Part 2, AX project contents, After Lab 2
- An instructor led lab on integrating with the OData endpoint exposed by Dynamics AX with the help of the Data Entities. This is the future of many integration scenarios for AX, so don't miss your chance to learn how it's done.
- A breakout session talking about a highly discussed topic of what kind of skillset is required for AX developers with the move to the latest AX version.
- A breakout session talking about Warehouse management functionality in AX, more specifically, installing, configuring and using the Warehouse Mobile Devices Portal with the cloud release of Dynamics AX.
Good content in all of these and detailed descriptions throughout, so take a look and let me know what you think.
Thanks!
Friday, February 05, 2016
Tips: Configuring Warehouse Mobile Devices Portal after installation on CTP7 and CTP8 builds of the latest Dynamics AX release
Introduction
Over the last couple of months we have had a number of customers go live on the latest version of Microsoft Dynamics AX, and some of them have decided to use the Advanced Warehousing solution including the Warehouse Mobile Devices Portal (WMDP) that is shipped together with AX.In my last post I provided links for how to install and use the portal:
http://kashperuk.blogspot.dk/2016/01/tutorial-warehouse-mobile-devices.html
Here I would like to focus on a few aspects we've learnt based on interaction with the Go-Live customers, that will hopefully help some of you to avoid the same problems.
Tip 1
In CTP7 and CTP8 (in case you don't know what CTP stands for, read wiki) WMDP was not strongly signed. That means that on your environment after installation, you could receive an error like below (In Event Log):
Exception
information:
Exception type: ConfigurationErrorsException
Exception message: Could not load file or assembly 'Microsoft.Dynamics.AX.Whs.Web,
Version=7.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of
its dependencies. Strong name signature could
not be verified. The assembly may have been tampered with, or it
was delay signed but not fully signed with the correct private key. (Exception
from HRESULT: 0x80131045)
In the final (RTW) release of Microsoft Dynamics AX the assembly is strongly signed.
But if you are on CTP7 or CTP8, you can refer to one of the below solutions:
Solution 1
One thing you can do to resolve this is sign the assembly, using the strong name tool in a command like the following:
C:\Program Files (x86)\Warehouse Mobile
Devices Portal\DEFAULT\bin> sn -Vr .\Microsoft.Dynamics.AX.Whs.Web.dll
This is the preferred approach.
For test environments, you could also just go with Solution 2
Solution 2
You can also just disable strong name verification on the machine you are testing out the portal on, by modifying the registry with commands below (for x86 and x64):
reg
DELETE HKLM\Software\Microsoft\StrongName\Verification /f
reg ADD HKLM\Software\Microsoft\StrongName\Verification\*,* /f
reg DELETE HKLM\Software\Wow6432Node\Microsoft\StrongName\Verification /f
reg ADD HKLM\Software\Wow6432Node\Microsoft\StrongName\Verification\*,* /f
reg ADD HKLM\Software\Microsoft\StrongName\Verification\*,* /f
reg DELETE HKLM\Software\Wow6432Node\Microsoft\StrongName\Verification /f
reg ADD HKLM\Software\Wow6432Node\Microsoft\StrongName\Verification\*,* /f
Or, if you want to limit the scope of allowed non-signed assemblies, you can restrict it to just the WMDP dll in the above ADD commands like below:
reg ADD HKLM\SOFTWARE\Microsoft\StrongName\Verification\Microsoft.Dynamics.AX.Whs.Web,31bf3856ad364e35
reg ADD HKLM\SOFTWARE\Microsoft\StrongName\Verification\Microsoft.Dynamics.AX.Whs.Web,31bf3856ad364e35
reg ADD HKLM\SOFTWARE\Wow6432Node\Microsoft\StrongName\Verification\Microsoft.Dynamics.AX.Whs.Web,31bf3856ad364e35
If you want to learn a bit more (or get a ready PowerShell function for the above), refer to this blog post.
Tip 2
WMDP is an ASP.NET MVC based web site and has a number of important configuration options in its web.config file. You can read more about the configuration options on MSDN.
One particular setting is important to note, since it is believed that it has an "incorrect" value by default after installation in AX 2012 CU8 build.
The setting is customErrors, and you can read all about it on MSDN
In production environments, this setting should always be set to "On", as WMDP X++ code in some cases throws unhandled exceptions, which result in a complete meltdown of the web site, if not redirected correctly to a user-friendly error page.
The "Off" setting can be used on test environments when debugging the site, as it will provide call stack information for what happened.
Hope this helps!
And let me know if you have additional tips to add here about WMDP, I will gladly add them here
Thursday, January 28, 2016
Tutorial: Warehouse Mobile Devices Portal for the latest version of Microsoft Dynamics AX
A lot of people have been trying to use the Warehouse Mobile Devices Portal (WMDP in short) on the latest version of AX (on various CTP builds we've released), and have been having a lot of trouble with that.
We've finally published the wiki article on installing the portal on a clean environment, that contains step by step instructions on how to download the installer, and how to configure it after installation to connect to the AOS. It's available here:
https://ax.help.dynamics.com/en/wiki/warehouse-mobile-devices-portal-for-microsoft-dynamics-ax/
Also, for those who just want to quickly execute some warehouse work and are used to the WMDP emulator form - that one is still available, and can be accessed very easily through the following link
https://usncax1aos.cloud.onebox.dynamics.com/?mi=action:WHSWorkExecute&cmp=usmf
(where you need to replace usncax1aos.cloud.onebox.dynamics.com with the URL of your AX)
Hope this helps!
And let us know if you have feedback on the installation instructions wiki page through whatever way you prefer.
Thanks!
We've finally published the wiki article on installing the portal on a clean environment, that contains step by step instructions on how to download the installer, and how to configure it after installation to connect to the AOS. It's available here:
https://ax.help.dynamics.com/en/wiki/warehouse-mobile-devices-portal-for-microsoft-dynamics-ax/
Also, for those who just want to quickly execute some warehouse work and are used to the WMDP emulator form - that one is still available, and can be accessed very easily through the following link
https://usncax1aos.cloud.onebox.dynamics.com/?mi=action:WHSWorkExecute&cmp=usmf
(where you need to replace usncax1aos.cloud.onebox.dynamics.com with the URL of your AX)
Hope this helps!
And let us know if you have feedback on the installation instructions wiki page through whatever way you prefer.
Thanks!
Wednesday, July 22, 2015
Tutorial: Short pick goods on the mobile device in Warehouse management module of Microsoft Dynamics AX 2012 R3
Introduction
In a typical warehouse things go out of sync from time to time. So the inventory on-hand information registered in the system becomes different from reality, or what is actually there physically. But warehouse operations need to keep being executed, and such discrepancies should not block orders from being picked. That's why in Warehouse management in AX 2012 R3 we provide a flexible way to set up work exceptions of type "Short Pick". The warehouse workers will select short pick exceptions on their mobile devices in these exceptional situations.
Business Case
HDMI cables 000147_202 and 000148_202 are very popular products and a lot of our customers buy them. On a particular day we have 3 orders for these items, and the sales department has confirmed and released 2 of them to warehouse, while for the third one they are still nailing down some details, so only reservation has been done to ensure we can promise the goods to the customer.
John the warehouse worker is going to location LP-002 to pick the first item, but finds that the cables are not there, even though that is what it says on his mobile device. He will need to do a short pick, and because there is nothing (0) items available, he is instructed by his warehouse manager to select Reason = "Items not there - Adjust out".
He then proceeds to the second location in the work order, LP-001, but the required pick quantity is also insufficient there. Only 2 cables are available in the location, instead of 10 that he needs to pick. He will need to do a short pick again. This time, he will select Reason = "Items not there - Count", as this seems to be right, the items were there, maybe they just got misplaced to a nearby location.
John then proceed with completing the picking route and delivering the picked items to the bay door.
Walkthrough
A complete walk-through of the scenario described above is available on my Youtube channel.
Brief summary
Here's a quick recap of what happens in the video for those who prefer reading. Screenshots of all the important steps are available on my OneDrive.
- 3 sales orders exist
- A sales order for customer 1101
- Sales line for 5 pcs of 000147_202, reserved physically
- Sales line for 10 pcs of 000148_202, reserved physically
- Order is released to warehouse, with work created as follows
- Pick 5 pcs of 000147_202 from LP-002
- Pick 10 pcs of 000148_202 from LP-001
- Put all to BAYDOOR
- A sales order for customer 1102
- Sales line for 10 pcs of 000147_202, reserved physically
- Sales line for 15 pcs of 000148_202, reserved physically
- Order is released to warehouse, with work created as follows
- Pick 10 pcs of 000147_202 from LP-002
- Pick 15 pcs of 000148_202 from LP-001
- Put all to BAYDOOR
- A sales order for customer 1103
- Sales line for 5 pcs of 000147_202, reserved physically (at level above location)
- John logs in to the warehouse mobile devices portal and executes work for first order
- As actual inventory in LP-002 is insufficient for 000147_202, he executes a Short pick
- Enters Pick qty = 0, Reason = "Items not there - Adjust out", does not enter License plate, and confirms the short pick.
- The pick line is now closed, work quantity on it adjusted to 0, along with subsequent impacted lines (in this case, the Put line)
- As a result of work exception setup "Adjust inventory", a new work order of type Inventory movement was created and is automatically executed and closed. It adjusted out 10 pcs of 000147_202 from LP-002.
- 5 pcs were adjusted as part of the current pick line
- 5 pcs were adjusted because of work exception setup ("Remove reservations" flag on Adjustment type used). This removed the reservation for sales order #3, as there is no on-hand available for this item anywhere else in the warehouse with the specified inventory status. If there was inventory available, the reservation would not get removed, as it does not matter which location the items are in on the sales line level.
- 10 pcs did not get adjusted, as they are physically reserved for an open work pick line, and we never touch open work. This work would now need to either be cancelled, or same as current one, short picked.
- Sales order is still in Released status. When inventory is available again, we will need to manually add the corresponding shipment to a new or existing wave and process it to create remaining picking work.
- John walks over to location LP-001 to pick item 000148_202, but inventory is insufficient there as well, so he executes another Short pick
- Enters Pick qty = 2, Reason = "Items not there - Count", enters the LP to pick from, and confirms the short pick.
- John will now enter the Target license plate, and then deliver the 2 items picked to the bay door.
- The entire work order is now Closed, as all operations have been completed for it.
- A new Open work order of type Cycle counting was created for counting location LP-001. This is based on the work exception setup "Automatically create cycle counting".
- The corresponding load line quantity was reduced from 10 to 2, as a result of work exception setup "Automatically decrement shipment or load". This means this particular load line is now ready for shipping to the customer
- Sales order is now in Partially released status. When the inventory is available, the sales order will need to be released again to create work for the missing pieces.
Hotfixes
These are some of the hotfixes you should download. I believe all of them made it into CU9.
KB 3046556 - The short pick functionality ends in an unhandled state during cluster picking
KB 3031012 - "No conversion definition found from" when processing a short pick for a work
KB 3071198 - Quantity is updated incorrectly when doing short picking on transfer orders
KB 3069579 - Print line in work shows wrong quantity after a short pick
Wednesday, July 01, 2015
Tutorial: Custom work types and shipment notes on the mobile device in Warehouse management module in Dynamics AX 2012 R3
Business case
A customer requires that we upon request ship them HDMI cables packaged into special boxes that they have provided us with. The sales clerk taking the order over the phone puts in a Note whenever the goods need special packaging.The expectation is then, that the warehouse worker executing the picking will get notified of the customer requirement, so he can also pick up the special boxes and pack the goods into them. Since our company carries many different HDMI cables, the number of boxes required is different each time. The worker is then also required to print the necessary number of labels, so that each box is accurately labeled. Once all of this is done, the special boxes can be loaded onto the transportation vehicle and shipped to the customer.
Walk-through
A complete walk-through of the scenario described above is available on my YouTube channel.Brief summary
Here's a quick recap of what happens in the video for those who prefer reading. Screenshots of all the important steps are available on my OneDrive.
- A sales order for above customer, with Note (DocuRef) added on header level
- Sales line reserved physically, order released to warehouse
- On mobile device, execute the picking work
- An extra screen is shown before actual picks start, showing the shipment notes (telling the picker to use special boxes)
- After pick/put to stage, extra screens are shown
- How many boxes were used? This is a custom data input screen. This data is then saved on the work line for future use.
- Confirmation screen is shown with some information for work user. In this case, it's asking him to label all the boxes with the adhesive labels that were printed based on the above input of how many boxes he used, and press OK when he's finished.
- Now we can load the goods onto the truck.
- Review the completed work and related Custom data (No of boxes used).
- Review Warehouse management parameters
- Mobile device note type setting, which controls what type of DocuRef documents will be shown on the mobile device
- Review Work template setup. Two additional work template lines are added, both using Work type = Custom.
- A confirmation custom work type, that does not capture any data and only shows a message to the work user on the mobile device.
- A question (user interaction) custom work type, that captures data, asking for number of boxes used, as well as a custom method, which refers to a method on Classes\WHSWorkCustomData\ - in my example, this code would generate and print a specified number of labels.
- Review Document routing setup, where the label printer and layout are set up. Not of interest to this post. See my other post about label printing for more details.
Other possibilities
Here are a few other examples where it might make sense to rely on custom work types:- Capture the pallet type during picking. This data would be stored for later use.
- Optionally, capture number of pallets of the corresponding pallet type. Based on that, update the load for further calculations of shipping costs.
- Capture load seal number during loading (including update of the load with that info)
- Capture temperature/weight/other characteristics of the items during picking/receiving
- Print the Bill of Lading report as part of the picking flow. The picker would then be the one to pick up the printed report.
I'd be interested to hear of the way your company uses this feature!
Wednesday, March 04, 2015
Walkthrough: Fixing the error message "WorkGroupingId is not found in the map"
Introduction
Since the release of the new Warehouse management solution with Microsoft Dynamics AX 2012 R3, a number of people have reported a sporadic error that was difficult to reproduce, but it was happening consistently on their environments.The error message shown to the user on the mobile device was also not very helpful:
The value "WorkGroupingId" is not found in the map.The challenge for us is usually to reproduce the problem, so we can actually debug through the code and see the root cause. We have finally managed to reproduce the problem recently, and have produced a simple fix, that will prevent people from getting into this situation in the future.
I don't yet know if this will be released as a hotfix for 6.3, but I will make sure to update this post with the link if that happens.
You can also just get the code from this post below, but that means you will need to apply it yourself.
But the primary purpose of this blog post is to release a small job to update the data that was messed up. Since we will not update all consumers of the mobile device menu items impacted, but only prevent future setup like that.
Of course, please have your development team review the job and the fix before applying this on your environment, and make sure to run it on your test environment first.
Neither Microsoft nor I will be held accountable for any data loss you might experience as a result of incorrectly applying the fix.
Example of scenario that is broken
I have a purchase order for one of my vendors, for 1 item that is WHS-enabled, as shown below:
![]() |
Simple purchase order |
I now want to use the mobile device to receiving this purchase order in my WHS-enabled warehouse 42. That assumes that I have Location directives, Work templates, Work users, etc. set up already. If you are not familiar with the inbound flow in Warehouse management, please look at some my other posts, where this is described. For this post, I only will include the configuration screen for the Mobile device menu items.
In my company, we used to normally receive small inbound orders, so we configured the mobile device to allow first grouping multiple incoming orders to put them away all at once, and then grouping the puts into one once you are at the location (assuming, of course, that the put-away location is the same for multiple orders). The following menu item configuration corresponds to that:
![]() |
Mobile device menu items - User grouping |
But then, since we got more and more deliveries that were much larger in size, where grouping them for put away on one pallet was no longer an option, we decided to change the menu item setup to just order by order, as shown below:
![]() |
Mobile device menu items - User directed |
But suddenly, when processing putaway for incoming orders, our workers started getting the above error about "WorkGroupingID not found in map":
![]() |
Warehouse mobile device portal flow |
Product bug fix
The fix, as I mentioned above, will only address the part, that touches the configuration of the mobile device menu items, as that is where the root cause of the issue is. When you change the "Directed By" to something other than "User grouping" or "System grouping", the "Group putaway" gets hidden, but still contains the value it had before. Then the mobile device code relies only on this value (in some flows), and does not check that the "Directed by" is also appropriate.
Here's the fix. I am inserting it as an image so it's more difficult to copy to make sure you don't overwrite whatever changes you have in that method already.
![]() |
Code changes required to fix "WorkGroupingId" bug |
Data fix
The above fix means that people who have invalid setup will still be hitting the exact same issue when doing putaway. So below is a small job that fixes the invalid data by unchecking the "Group putaway" check-box for menu items where it was set incorrectly.
static void dataFix_WHSRFMenuItemTable_WorkGroupId(Args _args) { WHSRFMenuItemTable menuItemTable; ttsBegin; update_recordSet menuItemTable setting GroupPutaway = NoYes::No where menuItemTable.MenuItemDirectedBy != WHSMenuItemDirectedBy::SystemGrouping && menuItemTable.MenuItemDirectedBy != WHSMenuItemDirectedBy::UserGrouping && menuItemTable.GroupPutaway == NoYes::Yes; ttsCommit; info(strfmt('Fixed %1 menu item(s).', menuItemTable.RowCount())); }
When you run the above job, you'll at the end get an infolog message informing you how many records were fixed.
Result
After applying the above fix and running the above data fix job, you should be able to successfully complete the putaway.
Wednesday, December 03, 2014
Tip: Connecting the Warehouse management device portal to a different company or partition in Dynamics AX
As a follow up to my blog post about fixing an annoying error with the warehouse mobile device portal (see original post here), I got a number of people asking the following question:
The Warehouse mobile device portal (WMDP) as of today only supports connecting to a single company account in a single partition. This is driven by the Active directory account used as the identity for the IIS application pool that is used to run the WMDP.
Which means that in order to access another company, we need to:
"How do I install/configure the mobile portal to work in more than one company/partition?"This is possible, and relatively easy, even though it might not be the most intuitive thing to do. Here's a quick walk-through of allowing work users to access another company account portal.
The Warehouse mobile device portal (WMDP) as of today only supports connecting to a single company account in a single partition. This is driven by the Active directory account used as the identity for the IIS application pool that is used to run the WMDP.
Which means that in order to access another company, we need to:
- Create another Active directory account
- Install another instance of the WMDP
- Use a different port number than the ones already installed
- Use the above AD user as the identity for the app pool
- Add a user in AX for the above Active directory account
- Do it in the partition you want to connect to
- Set the default company to the one you want to connect to
- Don't forget to assign the correct security role
- Hint: You can also set the default user language, which will impact the WMDP site as well
- Create all the necessary Warehouse management data in the new partition/company. That includes the Display settings, Warehouse workers and mobile device users, warehouses, etc.
Note, that you should avoid having the same AD user (used for WMDP) be part of multiple partitions. Only the first partition (alphabetically) will be connected to, but it becomes confusing for people looking at the data.
Once these steps are complete, you should be able to use the new link (with the new port) to connect to the mobile device portal and log in as a work user from the new company account.
Saturday, July 12, 2014
Walkthrough: Cancelling put-away work in Microsoft Dynamics AX 2012 R3
In the new Warehouse management solution shipped with Microsoft Dynamics AX 2012 R3, any movement of inventory in the warehouse would normally have a corresponding piece of work registered together with work lines detailing where the warehouse workers should pick the goods from and where they should put them.
Therefore, it is no surprise, that when you receive a purchase order (or any other inbound order, like a transfer or a return) through the new mobile device portal, work will be created to put away the goods into a storage location (or QA or whatever you set up in your location directives). The closest analogy for those who know the existing WMS II solution that I have is the pallet transports used in conjunction with arrival journals, where goods get physically registered at the inbound dock, and a pallet transport is created to move the pallet to the location found based on the put-away rules selected on the arrival journal line (Check picking/bulk locations). The new solution allows a much better level of control over all the warehouse operations.
What I want to talk about today is the cases where the created work is not satisfactory and needs to be modified / canceled.
There are three scenarios I would like to mention:
Therefore, it is no surprise, that when you receive a purchase order (or any other inbound order, like a transfer or a return) through the new mobile device portal, work will be created to put away the goods into a storage location (or QA or whatever you set up in your location directives). The closest analogy for those who know the existing WMS II solution that I have is the pallet transports used in conjunction with arrival journals, where goods get physically registered at the inbound dock, and a pallet transport is created to move the pallet to the location found based on the put-away rules selected on the arrival journal line (Check picking/bulk locations). The new solution allows a much better level of control over all the warehouse operations.
What I want to talk about today is the cases where the created work is not satisfactory and needs to be modified / canceled.
There are three scenarios I would like to mention:
- The put-away location needs to be changed, because the suggested location is unavailable or another location is simply preferable.
- The put-away work needs to be canceled, where a decision about the put-away location will be taken later
- The put-away work needs to be canceled, because the receipt was incorrect to start with
1. If the warehouse worker doing the put-away is an experienced user who is allowed to make on the spot decisions about modifying the suggested flow of inventory, he can override the put location, storing the goods away into a different location at the warehouse.
This is controlled by a policy on the setup of warehouse workers, accessible through Warehouse management \ Setup \ Work users \ Worker, as shown in the below screenshot:
![]() |
Allow work user to override put location when executing work |
2. Another way to achieve this would be to cancel the pending put-away work, ensuring that workers do not see it on their mobile devices as something they should execute now, and creating a manual movement to a location of choice when the decision where to move the goods is made. This would be a decision done by a receiving clerk / warehouse manager.
It could also be due to some extra paperwork or inspection being done on the items, where it's yet unclear if the system-selected put-away location is OK. (If it is, the warehouse manager could simply block the work until a decision is made, which would prevent workers from executing on it)
In order to cancel the work, simply press the "Cancel work" button on the Work details form (or corresponding list page). See a step-by-step walk-through below.
3. Now, sometimes, due to input errors or other factors, you would want to not only cancel work, but also make sure the goods are not physically at the warehouse either, reverting the entire receipt as if it never happened (you'll still have a trace of it happening). This could, for example, be useful if the receiving clerk was logged in to a different warehouse and accidentally received a purchase order to that warehouse instead of the one the user was actually at (Note: Not possible in RTM, need a corresponding hotfix installed).
This additional step of unregistering the items is controlled by a policy on the Warehouse management parameters, called "Unregister receipt when canceling work".
![]() |
Warehouse policy - Unregister receipt when canceling work |
Here is a step-by-step description of the cancel workflow:
- Create a new purchase order for a WHS-enabled item to a WHS-enabled warehouse
![]() |
Purchase order with one line for a WHS-enabled item to a WHS-enabled warehouse |
- Using the mobile device portal, register the receipt of the above purchase order (Hint: use a mobile device menu item with Mode = Work and Work creation process = Purchase order item receiving)
![]() |
Purchase order receipt on Mobile Device Portal |
- View the inventory transactions for the above purchase order, and confirm that they are registered at the default receiving location at the selected warehouse (Note: It is the warehouse the user was logged in to when doing the PO receipt from the mobile device)
![]() |
Purchase order inventory transaction with Receipt status = Registered |
- Open the created put-away work (Hint: You can navigate directly to the new piece of work from the purchase order details form, by clicking on Work details button in the Lines section), and click on Cancel work.
![]() |
Canceling put-away work |
- Confirm that Work status of the work header and lines has changed to Canceled, and (depending on the above warehouse management policy) the purchase order line inventory transaction is back in Ordered receipt status.
Note: This policy is currently implemented only for Purchase orders and Transfer order receipts. It will not come into play when registering the receipt of a return order or any other inbound order types.
I would also be interested in hearing your scenarios, which require canceling put-away work, and the reasons behind them. So if you use this functionality for reasons other than described above, please leave a comment below.
Thanks
Labels:
cancel work,
Dynamics AX 2012,
Microsoft Dynamics AX 2012 R3,
Mobile Device,
purchase,
putaway,
receipt,
registration,
transfer,
Walkthrough,
Warehouse management,
WHS,
WMDP,
work
Subscribe to:
Posts (Atom)