Open source address validation of Nordic addresses for Infor M3

As part of the open source address validation project for Infor M3, I just uploaded to the GitHub repository two sample scripts for Infor Smart Office to do address validation in Nordic countries: Sweden (eniro.se), Denmark (krak.dk), and Norway (gulesider.no). I provide the scripts as proof-of-concept for the interested reader to complete to suit their needs.

Eniro Geocode

The script TestEniroGeocode.js uses the Eniro geocode API. This API seems to be best for address validation, and you don’t need an account for it. But it seems to be deprecated, and I was only able to find an old copy of the documentation.
EniroGeocode
TestEniroGeocode_

Eniro API

The script TestEniroAPI.js uses the Eniro API. This API seems to be for searching places only, like “restaurants in Stockholm”, and doesn’t seem usable for address validation for M3. Also, you will need an account with Eniro, and you will need to sign in to api.eniro.com to see your account profile, key, and documentation.
EniroAPI
TestEniroAPI_

 

Those were two quick proof-of-concepts scripts for Infor Smart Office to illustrate how to use Eniro to do address validation for Infor M3.

That’s it! Please comment, like, share, follow, author, contribute to the project, donate your source code. Thank you.

How to get an item image from Document Archive

Today I will illustrate how to get an item image from Infor Document Archive.

For that, I will use Document Archive Client to add an item image with the item number (ITNO) as an attribute, and I will retrieve the item image using the Document Archive REST API. I will do the illustration with two servers on different version numbers, one server running Document Archive version 10.0.2.4.28 and the other server running version 10.1.0.0.93.

I will later use these steps for my Google Glass project to display in Glass the item image of each picking line.

Document Archive Client in Smart Office

If you have Document Archive installed in your Grid, you will find the Document Archive Client in the Smart Office Navigator widget:
3_

Document Archive web interface

Document Archive has a web interface at /ca/index.html.

Document Archive 10.0.x will simply return the version number:
1

Document Archive 10.1.x has a much richer web interface with a web client, an admin client, a mobile client, a Ming.le part, management pages, and an API overview:
0.10.2

The path /ca/impl/connection/information will return the API version number:
2

How to add an item image

To add an item image to Document Archive:

  1. Select Add Document > Item Image
  2. Drop an image file
  3. Set Status to Approved
  4. Enter an Item Number (ITNO)
  5. Click Save

4

How to search for an item image

To search for an Item Image by item number (ITNO):

  1. Select Attribute Search
  2. Set Document Type to Item Image
  3. Set Attribute to Item Number
  4. Set Operator to =
  5. Enter the item number in Value
  6. Click Search

5

Document Archive Client will return a list of possible matches, and for each match it will return the image converted into different sizes like original, preview, and thumbnail.

HTTP Requests and query

When I intercept those steps in Fiddler, I see four HTTP Requests, starting with the query:
10

The server with Document Archive 10.0.x used the query /ESA_ItemImage[@ESA_ItemNumber = “ACME”], and the other server with Document Archive 10.1.x used the query /M3_ITEM_IMAGE[@M3_ITNO = “ACME”]. I’m not fully familiar with how Document Archive is configured, so I don’t know if the query is based on the version number or if somebody did a manual configuration. So check what the query is on your server.

From the query, the server returns a list of matches, and for each match it gives the PID of the document and a list of resources with URLs to the item image in various sizes: original, preview, and thumbnail.

I’m only interested in the original item image, that’s entityName=ICMBASE. The PID would be given by the following XPath on the API response:

//res[entityName='ICMBASE']/pid/text()

Document Archive REST API

Document Archive has a REST API that we can access from http://host:port/ca .

The path /ca/application.wadl will return the Web Application Description Language (WADL) of the API:
6

Also, Document Archive 10.1.x has a richer API, and a really well polished award-winning documentation and playground:
5_

Search an item image with the REST API

There are several API available to get the item image.

To determine which API accepts query as an input parameter, use the following XPath on the application.wadl:

//param[contains(@name, 'query')]

To determine which API returns binary data (image bytes) as output, use the following XPath:

//representation[contains(@mediaType, 'application/octet-stream')]

By trial and error, I determined I could get the item image in only one request with the following API, the parameter $query properly URL-encoded, and HTTP Basic Authentication:

/ca/api/items/search/item/resource/stream?$query=...

3.3

Errors

It wasn’t easy. I ran into a lot of errors which I still don’t understand and which I didn’t fully document. Here are a few bits and pieces I noted:

  • Unfortunately, the WADL doesn’t mention the input parameter QK_xquery for the searchItems.jsp API, therefore there may be more undocumented API that also accept QK_xquery as an input parameter; to be tested.
  • In some of my tests the server threw HTTP 401 Unauthorized which led me to believe the user/password was wrong. It turns out the Grid session provider didn’t allow HTTP and only allowed HTTPS. Very misleading error message.
  • I got a lot of cryptic prolog errors: “Parsing error: Invalid input data: Content is not allowed in prolog. org.xml.sax.SAXParseException”. It seems to be a bug in Document Archive for POST methods and the workaround is to manually change the HTTP Request header to Content-Type: text/plain.
  • I got a lot of inexplicable java.lang.NullPointerException even with the correct input parameters.
  • I got a lot of inexplicable HTTP/1.1 500 Internal Server Error even with the correct input parameters.

 

That was quick overview of how to add an item image by item number (ITNO) in Document Archive, and how to retrieve it with the REST API.

That’s it! Please comment, like, share, follow, enjoy, author. Thank you.

Augmented Reality for M3 – Hello World with Metaio Creator

Here is a Hello World illustration of Augmented Reality (AR) for Infor M3 using Metaio Creator and the Junaio Browser on my iPad. The demo shows a 3D warehouse with aisles, racks, and levels, where I highlighted one of the boxes in red. This new result complements my previous demo of AR for M3 which was implemented programmatically in JavaScript. This time I am using Metaio Creator.

Why it matters

The idea is to highlight the stock location of the the next item to pick in a picking list so the picker can quickly identify where to go in the warehouse. This scenario is specially useful for temporary workers that are hired for campaigns on short notice and are not yet familiar with the warehouse thus saving costs in training and picking time.

Also, Augmented Reality is predicted to be one of the next multi-billion dollar industries in five years from now, so this is one of the learning steps I am taking in that direction.

Preview the demo

To preview the demo on your device (PC, Mac, iPad, Android) follow these instructions:

  1. Print the following satellite picture in full page or bigger, and place it on a flat surface; that will be the trackable AR marker:
    GEI142
  2. Install the Junaio Augmented Reality Browser app on your device (from junaio.com for PC/Mac, from the App Store for iPad, or from the Google Play Store for Android).
  3. Open the app and click Scan.
  4. Scan the following QR code; Junaio Browser will identify the QR code, and will download the resources from my channel ThibaudWarehouse3D:
    QRcode
  5. Point your device’s camera towards the printed satellite picture. Junaio Browser will track the satellite picture and will register the warehouse 3D accordingly. Here is a screenshot of the result:
    vlcsnap-2014-07-01-02h18m04s68

How I built it

The creation process is simple.

I used my previous 3D model of a warehouse with racks, aisles, levels, and boxes that I had created in SketchUp for a demo three years ago. I removed the walls and roof. I removed unnecessary 3D elements that slow down the 3D rendering pipeline on iPad. And I hard-coded an arbitrary box in red.

Here is a screenshot of the trackable and 3D model in Metaio Creator:
vlcsnap-2014-07-01-02h31m15s41

Here is a screenshot of the channel creation:
Channel

Here is a video of the entire creation process and preview:

Summary

That was how to create a simple Hello World demo of Augmented Reality for M3 using a 3D warehouse and Metaio Creator to highlight the stock location of the next item to pick in a picking list to save training time and picking time.

Future version

In a future version, I will un-hard-code the red box, and I will highlight it programmatically using Metaio SDK.

That’s it! Like. Comment. Subscribe. Share. Author.

Thank you.