Enabling wireless PDA capabilities in AX 2012

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.

image

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.

image

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.

image

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.

image

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.

image

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:

image

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.

image

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.

image

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.

image

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.

image

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.

19 thoughts on “Enabling wireless PDA capabilities in AX 2012

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

      Like

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

    Like

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

    Like

    • 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));
      }

      Like

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

    Like

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

      Like

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

      Like

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

        Like

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

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

      Like

      • 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 =)

        Like

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

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.