I thought I would share my experiences with the community from when I created my first application and the hints and tips which I picked up from the internet and from colleagues. Hopefully the information below may help others who want to take the step to creating their first "Hello World" SB1 application. In this guide I will show how I have completed it using a Windows 7 machine, however it is just as simple to do using Linux and I have included links for that too.

 

The simple idea I wanted to do was to scan a barcode on the SB1 and then search a database on a server, find the product, return the data and show the data on the SB1. A basic price check application, which is a common use of the SB1.

 

Now being a native developer, this was one of the first time I had done a web based application. So the first thing I needed to do was get an environment set up. This was where I had the most issues and annoyances! The main problems were interference with other services which already ran on my machine (IIS, Soti, FileZilla) which all used port 80 or other ports which the webserver used.

 

Installation Tips:

 

 

Develop a Simple Application

 

As I mentioned earlier I wanted to create a demo price check application. I started by using the developer toolkit applications as a base http://support.symbol.com/support/search.do?cmd=displayKC&docType=kc&externalId=13880&sliceId=&dialogID=481754905&stateId=1%200%20481746650

 

The application I used was the Price Check App found here TSDxc60AenDT000700\Sample UserDrives\Full Sample User Drive\UserDrive\apps\PriceCheck

 

This does exactly the scenario which I wanted to do but does it locally on the device. I need to move it to be hosted by a webserver and the data be stored on the database rather than in the application.

 

Checking the WAMP Server installation

 

When you run the WAMP server if all is working as expected you should see a green "W" in the taskbar, this indicates all is working fine. If for some reason the icon is orange it may be that one of the services is not running. Always worth a reboot of the PC if thats happening. Else click on the "W" and this will bring up a pop-up. Here you can choose the Application, Service and see if they are running, if you are seeing problems, it maybe that something is already running on port 80 (which is what WAMP uses). You can check this by using CMD as using the command netstat -aon, this will list the services running and on what ports. However with a clean installation as suggested you should not see any issues :-)

 

Setup MySQL Database

 

Here is where we want to put the data in order to search for it.

  1. Load up the MySQL Workbench, this is what you should see

MySQL1.png

2. Now select the database in the left column. This will bring up an editor

3. Here choose New Schema and add the scheme name of product

4. Create a table with the name stock and then add the columns :- code, info1, info2, item, description, image - Set Code as the primary key, and set them all as VARCHAR(45), bar image which will need to be bigger to include the image data. Try VARCHAR(1000)

5. Save and apply that and this will create the database

6. Here if you right click on the table stock, and then choose "Edit Table Data" it will allow you to input the data.

7. Here is used the data from the Product Info HTML page

 

 

                                        {
                                                  info1: '$5.75',
                                                  info2: '',
                                                  image: 'data:image/png;base64,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',
                                                  code: '294491310254',
                                                  item: 'Cheese',
                                                  description: 'Jasper Hill Cabot Cloth Bound Cheddar'
                                        }

 

 

Enter that data into the table and it should be as shown here (NB I only entered two records)

MySQL1.png

 

 

Webpage Development

 

With the data inserted into the table now we can get on with coding the HTML page in order to sync the data. Using the Price Check application I am going to modify it to firstly remove the Database from within it and then hook it up to the database via a PHP script. The first thing I needed to do was in the DecodeEvent fucntion which handles the decoding of the barcode, now rather than doing the searching through the internal database, I send that data to my PHP page. In that PHP page, I can then search the database.

 

Here are the changes I made

 

                             function decodeEvent(str)
                              {
                                         str= str.data;

                              if (window.XMLHttpRequest)
                                {// code for IE7+, Firefox, Chrome, Opera, Safari
                                          xmlhttp=new XMLHttpRequest();
                                }
                              else
                                {// code for IE6, IE5
                                          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
                                }

                                        xmlhttp.onreadystatechange=function()
                                {
                                if (xmlhttp.readyState==4 && xmlhttp.status==200)
                                        {
                                                  UpdateScreen();
                                        }
                                }
                              xmlhttp.open("POST","getuser.php",true);
                              xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
                              xmlhttp.send("q=" + str);
}

 

 

You will notice a few things in this code:

  1. Firstly I create a HTTP request in order to send the data
  2. I then have a callback which waits on the object to be returned and then it will update the screen with that data - this is this snippet - 200 means that the xmlhttp return is "OK" and the ready state of "4" means "Completed"
 if (xmlhttp.readyState==4 && xmlhttp.status==200)
{                                   
     UpdateScreen();
}

 

More states can be looked for such as error responses etc - they can be seen here - http://msdn.microsoft.com/en-us/library/windows/desktop/ms767625(v=vs.85).aspx,and the ready states -   http://msdn.microsoft.com/en-us/library/windows/desktop/ms753702(v=vs.85).aspx

 

Then I "POST" the request to my PHP page. This is where the data from this page will be interpreted and returned to the page. I used POST rather than GET as it is described as more secure. Theres quite a few documents describing the differences.

 

The Update screen function then updates the screen with the data returned. As you can see it is returned as XML and you can get the data from the XML file as shown below.

 

function UpdateScreen()
{
          document.getElementById('info1').innerHTML = xmlhttp.responseXML.getElementsByTagName("info1")[0].firstChild.data;
          document.getElementById('info2').innerHTML = xmlhttp.responseXML.getElementsByTagName("info2")[0].firstChild.data;
          document.getElementById('image').src = xmlhttp.responseXML.getElementsByTagName("image")[0].firstChild.data;
          document.getElementById('code').innerHTML = xmlhttp.responseXML.getElementsByTagName("code")[0].firstChild.data;
          document.getElementById('item').innerHTML = xmlhttp.responseXML.getElementsByTagName("item")[0].firstChild.data;
          document.getElementById('description').innerHTML = xmlhttp.responseXML.getElementsByTagName("description")[0].firstChild.data;
          document.getElementById('priceLookup').className = '';
          document.getElementById('information').className = 'hidden';
          setTimeout(function(){document.getElementById('details').style.maxWidth = 320 - document.getElementById('image_div').clientWidth;},300);
          asl.back(function()
          {
                    document.getElementById('priceLookup').className = 'hidden';
                    document.getElementById('information').className = '';


                    asl.back(exit);
          });

 

PHP Page

 

This page is used to receive the data which was sent from the HTML page. Here the data which has been sent as 'q' is recieved (Line 2), then we connect to the MySQL database which we previously created with Database name "Product" and username "root" and the password is blank.

 

Then using a simple SQL Select from the Table stock where the code equals the data we have received. Here we set variables for all of the data which has been received and then outputted as XML at the bottom of this page

 

You can test this by just using the PHP command window. If you navigate to the directory where php is located and then run php.exe and then the file you want to run, this will execute it and test that page (just incase your HTML page is broken). Simply change the SQL query to be a number you know exists!

 

<?php
header("Content-type: text/xml");
$q=$_POST["q"];


$con = mysqli_connect('localhost','root','','Product');
if (!$con)
  {
  die('Could not connect: ' . mysqli_error($con));
  }


mysqli_select_db($con,"product");
$sql="SELECT * FROM stock WHERE code = '".$q."'";
$result = mysqli_query($con,$sql);


while($row = mysqli_fetch_array($result))
{
          $info1 = $row['info1'];
          $info2 = $row['info2'];
          $code = $row['code'] ;
          $description  = $row['description'];
          $image  = $row['image'];
          $item  = $row['item'];
}
mysqli_close($con);
?>
<xmlresponse>
<info1><?= $info1 ?></info1>
<info2><?= $info2 ?></info2>
<code><?= $code ?></code>
<description><?= $description ?></description>
<item><?= $item ?></item>
<image><?= $image ?></image>
</xmlresponse>

 

Getting the page set up on the webserver

 

Now you have the pages, we need to make sure they work on the webserver and on the SB1. First lets check them on the PC which you are using. Drop them into your webserver folder, normally C:\wamp\www

 

As we are wanting to use these on the SB1 we will need to also include in this folder the "asl.css" and the "asl.js" so also drop them in. Due to this we need to edit the HTML file to update the path from

 

 

<script type="text/javascript" src="../src/asl.js"></script> 

to

<script type="text/javascript" src="/asl.js"></script>

 

so that the asl.js is found on the server. With these 4 files on the server we can now view the site.

 

If you load Chrome up and then navigate to http://localhost:8080/index.html,this should then show you the SB1 page. It should look similar to below

 

If you have issues, check the Chrome Developer options (F12) and this will bring up a console, from here you can see the HTML/Javascript Errors, if no errors are shown, it may be your php, test as documented above

 

MySQL1.png

Obviously you cant scan a barcode to test but you could insert a button and send that data to the DecodeEvent function to test the return values to the database

 

Add this to the information body at the bottom of the page

 

 

<a href="javascript:void();" onclick="DecodeEvent("12345")" data-role="button">Submit Details</a>

 

 

Setting Up Your SB1

 

So your application works with your webrowser and you can access data from the database, now we need to get this on your SB1, and this is the simplest thing so far :-)

 

On your SB1 connect your device to the same wireless network as your webserver is connected to

 

Take your SB1, and if you have one, connect your developer backhouse. If you do not have this you will need to use MSP staging server or equivalent to do the next parts.

 

When the SB1 is connected you will see the UserDrive as an external drive. Navigate their and then create a folder called "Config". Navigate into there.

 

In here we need to place a file called apps.json. This will link your SB1 to your webserver

 

On your webserver get your IP Address- CMD->IpConfig

 

Using this we need to create an apps.json

 

{
"name": "Price Check Web Demo",
"url": "http://192.168.4.184:80/index5.html",
"icon":"http://192.168.4.159:8080/price_check_icon.png",
"login": false,
"canOverwriteBadge": true
}

Here the IP Address on my server is 192.168.4.184 and i have been using port 80. Also I have put an icon on my webserver which is for the application icon on the device's screen.

 

With that saved onto the device, reboot the unit, using the Scan and Home key and then the application icon should show on the device.

 

Click the icon and your scan demo should be there, scan a barcode from the demo scan sheet and it should show the data.

Untitled.png

NB: The image may not show as they are too large to send over the webserver, create a smaller image and convert it to base64 via a online tool