I wanted to share with you how I have enabled the rich functionality of Dynamics AX 2012 to be run on a wireless device. What I show you here is 100% based on AX 2012 feature Pack, and everything is created in AX 2012. I decided also to have no changes on std. AX elements, and only use existing available functionality of AX 2012.
The wireless communication can be achieved either through the customer’s wireless infrastructure or a cellular network. To speed up the data mining process, the device must support touch screen and either barcode scanning or radio frequency reading.
Each wireless device can connect to an individual session through Remote Desktop Services of Microsoft Server 2008.
The key benefits of this setup:
• The build in communication and security features of Windows are utilized.
• Maintenance and deployment tasks are centralized, because all logic are located and run on one server and not on each device.
• The customer’s own IT department can set up new devices, because only the communication information is to be set up on the device.
• No business critical data is stored or executed on the device.
Wireless device
· Microsoft Windows Mobile 6.1 or later
· Remote Desktop Service client 7.0 (build into Windows Mobile 6.1)
· VGA (640 X 480) color touch panel (Other resolutions is just a configuration)
· Wireless network adaptor or cellular adaptor (EDGE or better)
· Barcode scanner or RF-tag reader
Due to past experience with several hardware vendors, and the requirements of the PDA solution, I have can recommend the Motorola MC75 wireless device. The MC75 is available in different configurations and can fulfill the specific needs of a typical customer.
General properties of a PDA form
All forms in a PDA solution should have the same generic properties, and what I have done is the following.
In addition, it is recommended to have a visual confirmation to the user. Like a flash green, if the input is accepted, and red permanent background if the scanned/entered data is not accepted.
Item barcodes required
To efficiently use a PDA, all items should have an item barcode associated to each item. The main reason for this, is that the item barcode will contain the unique reference to item and the product dimensions like configuration, size, color and style. If it is not a possibility to have item barcodes on the products, than use the item number as the item barcode.
To generate item barcodes, it is possible to automate this with a set of jobs than can be ran to periodically generate standard item barcodes.
Main menu and setup
The main menu, if the first screen that the user will access. I can recommend to implement a command line parameter, to automatically start the PDA. This means that when the user logs into the RDP, an auto startup command with AX32.exe –startupCmd=PDA, that will start the PDA menu automatically.
In addition it is recommended that the Exit button do a log-out of the user from the RDP session. If the user just wants to exit the PDA menu, then press “ESC” to exit, and the RDP sessions is closed.
The PDA screens should also be configured per user in a setup.
In the setup, the user can set up a default “current warehouse”, so that lookups and scanning is limited to the specified warehouse. In addition the worker can enable/disable functional areas that are not applicable to the workers normal operations, and therefore also reduce the number of options on the main menu.
Then the user is keeping his finger down on the screen, the current selected menu.
The menu items are also attached to configuration keys, so if a configuration is disabled (like project or production), then the menu will not be visible.
Generic and common forms
In several places a magnifier glass will appear like this:
This is a menu button to drill further based on the information that is filled in. In general there are 4 main types for generic forms. Item information, dimension specification, lists and picture.
Item information
The item information form will show primary information, like item barcode, item number, item name, standard purchase and sales price. In addition there are a editable field under the “location”. This is the warehouse. Normally the default warehouse will be filled in here, but the user can change this. This will affect the display of the primary picking location, and the fields for on hand, like available physical, Physical and ordered.
In the bottom, the item barcodes product dimensions, in addition to the item description.
The default product image is also seen here. By clicking on the image, the system will bring up a full size picture of the product.
Item and dimension specification
The item dimension specification form, is typical used when there is not enough space in the form to specify all dimensions. Then a separate form will popup, where the user must specify/rescan item barcode, and also specify additional dimensions like pallet ID, Batch or Serial number.
This form is mainly used in picking situations, and what fields/dimensions that should be visible is dependent on the storage and tracking dimension group of the item.
Product picture
The product picture form is a very simple form, that just gives the user a full size picture of the product. In addition, item bar code, item number, item name and product dimensions will be shown.
Lists
In some cases the magnifier will bring up lists to give the worker an overview. This could be an overview of all purchase lines, all items on a location, all lines on a journal etc.
The list contains a list with different information, a reminder and a quantity. The list changes based on from where it is called, and what it is supposed to show.
In this example it will show open purchase lines, showing item, reminder and line quantity. In the bottom the item bar code and product description is shown.
In the bottom section all dimensions from the line will be shown. Both product, storage and tracking dimensions will be shown here.
The default product picture is clickable, and will show the picture in full format.
Summary
To have these generic and common forms and framework, the development of the functional forms become very easy, and I could focus on the actual functionality. Drop by my blog in the weeks to follow, and I’ll show you how the functionality actually works.
Hi, Kurt. Nice article.
Can you give info about what devices are supported for Dynamics AX R3 mobile warehouse?
Do I need to install some software on device?
LikeLike
Hi Mike. To use the standard AX mobile warehouse, you only need a device that have a browser. There should not be any need of any additional software. Take care and happy DAX’ing.
LikeLike
Hi, I have tried this by modified short cut of AX client:
AX32.exe –startupCmd=PDA
in AX 2012 R2 but the PDA GUI do not appear as I run client.
I tried on a normal remote desktop session from my laptop. Will this feature requires a remote session from PDA device? Or running this requires to purchase any other 3rd party add-on/solution?
LikeLike
The PDA solution is a 3rd party add-on. http://www.to-increase.com/cross-industry-solutions/supply-chain-solutions/data-collection-2014/
LikeLike
Kurt,
You mention that a set of jobs could be used to automatically create barcodes based on the item numbers of products. Do you have an example of this? This is something I’m struggling with in AX 2012R2.
LikeLike
Hi Jared. There are solutions in AX 2012 R2 in the Retail module for automatically creating itembarcodes. But it can be a bit tricky, and not nessesarayly
static void PDA_CreateCode39ItemBarCodes(Args _args)
{
InventDimCombination combination;
InventItemBarcode barcodeTable;
InventItemBarcode barcodeTable2;
InventDim inventDimTable;
InventTable inventTable;
int NoOfRecordsRead = 0, NoOfRecordsInserted = 0;
RetailVendTable tVendTable;
RetailBarcodeMask mask;
RetailBarcodeManagement rboBarcodeManagement = new RetailBarcodeManagement();
ItemBarCode wrkBarCode;
Str numberSeq;
ttsbegin;
// First, try to create barcode for items with dimensions
// If the item uses standard dimension, then create barcode for the item itself.
while select combination
{
NoOfRecordsRead++;
select firstonly barcodeTable
where barcodeTable.itemId == combination.itemId
&& barcodeTable.RetailVariantId == combination.RetailVariantId
&& barcodeTable.UnitID == combination.inventTable().inventTableModuleSales().UnitId;
if (barcodeTable)
{
continue;
}
else
{
barcodeTable.clear();
barcodeTable.itemBarCode = combination.ItemId + "00" + int2str(NoOfRecordsRead);
barcodeTable.itemId = combination.ItemId;
barcodeTable.useForPrinting = NoYes::Yes;
barcodeTable.description = combination.defaultProductName();
barcodeTable.RetailVariantId = combination.RetailVariantId;
EcoResProductDimGroupSetup::copyProductDimensionsForItem(combination.ItemId, combination.inventDim(), inventDimTable);
barcodeTable.inventDimId = InventDim::findOrCreate(inventDimTable).inventDimId;
barcodeTable.UnitID = combination.inventTable().inventTableModuleSales().UnitId;
barcodeTable.barcodeSetupId = "Internal";
if(barcodeTable.validateWrite())
{
barcodeTable.insert();
NoOfRecordsInserted++;
}
}
}
while select inventTable
notexists join barcodeTable2
where barcodeTable2.itemId == inventTable.ItemId
{
NoOfRecordsRead++;
// Then find the barcode for the item
select firstonly barcodeTable
where barcodeTable.itemId == inventTable.ItemId
&& barcodeTable.UnitID == InventTable.inventTableModuleSales().UnitId;
// Only create barcode if none exists
if (!barcodeTable)
{
wrkBarCode = inventTable.ItemId;
barcodeTable.clear();
barcodeTable.itemBarCode = wrkBarCode;
barcodeTable.itemId = inventTable.ItemId;
barcodeTable.description = inventTable.defaultProductName();
barcodeTable.useForPrinting = NoYes::Yes;
barcodeTable.RetailVariantId = '';
inventDimTable.initFromInventTable(inventTable);
barcodeTable.inventDimId = InventDim::findOrCreate(inventDimTable).inventDimId;
barcodeTable.UnitID = InventTable.inventTableModuleSales().UnitId;
barcodeTable.barcodeSetupId = "Internal";
// Check barcode length and check digit
if(barcodeTable.validateWrite())
{
barcodeTable.insert();
NoOfRecordsInserted++;
}
}
}
ttscommit;
if (NoOfRecordsRead > 0)
info(strfmt("@RET4182",NoOfRecordsRead,NoOfRecordsInserted));
}
LikeLike
Kurt, great post! Just a quick question as this is an online solution do you know of any products that offer both sales order entry, sales confirmation printing and warehouse/retail stocktake capabilities for AX 2012 in an offline capability for working international gift fairs?
LikeLike
Hi. There do exists offline solutions in the marked, but often the functionallity is very Limited, and also often made as a customization. I don’t have any recommendations, except advice to find a online solutions 🙂
LikeLike
It’s cool… Do I need to do any setups for using the PDA with AX2012?
LikeLike
The PDA shown here is a product available from Columbus, so that must be installed/purchased first. But the installation is done in 10 minutes, and is ready to be used without any setup in Dax 2012.
LikeLike
Hi Kurt,
We are implementing AX2012 for a leading retail company in Qatar. We would like to know more about your product. Can i have the full details. Please give me the contact details and if possible please share the details into sathishkkmca@gmail.com ASAP.
LikeLike
Pingback: New Mobile Warehouse App for Microsoft Dynamics AX 2012 Highlights Benefits of Model Driven Architecture - MSDynamicsWorld.com AX Community Full Articles - AX Non-Technical Blogs - Microsoft Dynamics Community
Very cool. I can’t wait to try this myself.
LikeLike
Great post! How were you able to use the scanner’s built-in barcode reader…AFAIK you need to use some DLL’s to enable it…
LikeLike
It is easy. I only needed to have 100% controll of where the cursor is. So when scanning with the barcode reader, it is just like typing in a barcode. So no need for any special DLL. Just making sure that the handheld device can scan the barcode, and return the characters.
LikeLike
Just the last part that does not work for me since my handheld won’t enable the beam when inside Remote Desktop Connection, only inside specific applications that make use of symbol/motorola DLL’s . Thanks for your help =)
LikeLike
Kurt, really nice!!! How did you enable though the PDA’s barcode reader? AFAIK you need to load some symbol DLL’s…
LikeLike
Pingback: Kurt Hatlevik's post on Enabling wireless PDA Capabilities in Dynamics AX 2012 - Dilip's blog on MICROSOFT DYNAMICS AX - AX Technical Blogs - Microsoft Dynamics Community
Kurt, This is very interesting concept. I will try it out. Thanks for sharing the good work.
LikeLike