Welcome!

Apache Authors: Elizabeth White, Pat Romanski, John Mertic, Liz McMillan, Janakiram MSV

Blog Feed Post

Tutorial: Building a Mobile App With Orchestrate Database and Appery.io Development Platform

Originally published by Dmitry Zaytsev on the Appery.io blog. 

Appery.io and Orchestrate have collaborated to create this easy-to-follow tutorial on how to build a mobile app. The app is built in the Appery.io visual development platform, connected to an Orchestrate database via REST APIs, tested, and deployed.

Gone are the days when you could afford to take months to build an enterprise mobile app. In today’s fast market, you need to be able to prototype the app in a few days (or even hours), release the first version in a few weeks, get feedback, fix bugs, release the second version. Repeat.

This tutorial shows how fast it is to build a real mobile app connected to an API back end when using powerful cloud tooling: Appery.io and Orchestrate.

Register for the Appery.io and Orchestrate joint webinar on September 11, 2014 at 10:00 AM PT

Building Enterprise Mobile Apps Fast with the Orchestrate Database and Appery.io Development Platform

Register now

Orchestrate – database as a service

Orchestrate is a managed service that exposes the querying capabilities of NoSQL databases like ElasticSearch, HBase and Hadoop, allowing developers to add full-text search, events, graph, and key/value to applications with a simple REST API. Orchestrate handles security, monitoring, and daily backups with no licenses, no software, and no lock-in.

Appery.io – mobile development as a service

Appery.io is a cloud-based platform with visual development tools and integrated backend services. Appery.io provides a drag and drop visual app builder for creating app UI, connecting and visually binding to any REST APIs, testing the app, and packing the app for native (iOS, Android, and Windows Phone).

What we are going to build

In this tutorial we will show you how to build a cross-platform mobile app for a food truck that sells burgers. We will call our truck Burgerio. The app allows to place a burger order ahead of time, and when the truck arrives, you’ll simply pick up the order.

What you will learn

After completing this tutorial you will learn:

  • Building mobile app in Appery.io
  • Creating and using Orchestrate database
  • Connecting for Orchestrate database from Appery.io app using REST APIs
  • Publishing the app as HTML5, or PhoneGap

Before you begin

Before you begin, you need to have an Appery.io account and an Orchestrate account. That’s pretty simple to do; just follow the links below to sign up:

Sign up for an Appery.io Starter (free) plan

Sign up for an Orchestrate (free) plan

Building the mobile app

You will perform the following steps to build the app:

  1. Create a new app
  2. Build app UI
    1. Orders page
    2. AddOrder page
    3. DeleteConfirmation popup
  3. Test the UI
  4. Create a database (in Orchestrate)
  5. Define and bind REST API services
  6. Test
  7. Deployment options
    1. Appery.io HTML5 hosting
    2. Package as binary

Creating a new app

To begin, you are going to create a new app. Click the “Create new app” button, name the app: Burgerio, and click “Create.”

When the new app loads, you will see the Start page (this page has links to documentation, tutorials, events, etc).

Open the first page: Pages > startScreen.

Let’s quickly pick a different theme for our app. Go to Project > App settings > General, for Theme, select flat-ui.

Go back to the startScreen page, and you will see this:

Building the Orders page

Okay, lets build the UI for the Orders page:

1. The first step is to rename the page. With the page name selected (use breadcrumbs to select startScreen), rename the page to Orders in Properties.

2. Select the Header and change its Text property in the Properties panel to Burgerio.

3. By using the drag and drop place the Button component on the page (drag it on the Header component right to the Burgerio title). Change its Text property to New order and its Name to navigate_to_add_order_button. Also choose the “plus” icon by clicking “Icon” in Properties panel:

new_order

This button will navigate the user to a page where a food order can be made.

4. Now place the List component on the page. This list will display all the orders. Change its Name to records_list. Because the List items will be generated dynamically based on the retrieved data, you should leave only one item. Change the Items property to 1 and click “Apply”.

5. We will use Counter property of the List item to show how many burgers of each type were ordered. Select the List item (use breadcrumbs for simpler navigation) and check the “Counter Visible” property in the Properties panel. Also change its Name to records_item.

6. We’re almost done with this List- we just need to place two labels inside of it. Drag two Label components directly into the List item.

7. Select the first label and change its Text property to Burger and its Name to burger_label. Burger name will be displayed using this label.

8. The second label will be used to keep the ID of the current order (retrieved from Orchestrate backend, we will come back to this later). Select it and change its Name to order_number. Uncheck the “Visible” checkbox.

The final Orders page looks like this:

orchestrate_orders_page_finished

Building the AddOrder page

The second page will allow you to place an order.

1. To create a new page select Create New > Page. Type AddOrder and click “Create Page.”

2. Select the Header and change its Text property in the Properties panel to Add Order. Check the “Back Button” checkbox.

3. Place a Select component into the AddOrder page. This component will be used to select the burger that you want to order. Change its Name property to hamburger_select. In the Properties panel, click “Change” to the right of the Options label. Configure the Select component Options as following:

aio_select_data

To add new values, enter new label/value pairs and click the “Add” button.

4. Now lets add a Slider component to a page and configure it. By using this component, the user will choose the amount of ordered burgers. Drag the Slider component to a page below the Select. Change its Max value to 10, Value (default value) to 1 and Min value to 1. Also, change its Name property to qty_slider.

5. You just need to place a Button component that will save the order into the Orchestrate backend. Add a Button component to the page and change its Text property to Place order. Also, change its Name to place_order_button, and check the “Inline” option.

The final AddOrder page looks like this:

aio_addorder_page_finished

Okay, you are almost done with the UI. The last page (dialog) you need to create is when deleting an order.

Building the DeleteConfirmation dialog

  1. Click Create New > Dialog. TypeDeleteConfirmation and click “Create Dialog.” The dialog similar to the classic page, but it can be opened as dialog (like a popup).
  2. Select the Header and change its Text property in the Properties panel to Delete?
  3. Next, add the Label component and change its Text property to Are you sure you want to remove this order?
  4. Add the Grid component. The Grid will serve as convenient container to place other components. Change its Rows count to 1 in the Properties panel:
  5. Place the Label component in the first Grid column. Change its Text property to Burger name and its Name to burger_name.
  6. Place a Button below the Label and change its Text property to Yes. Also change its Name property to yes_button.
  7. Place the Label component in the second Grid column. Change its Text property to Burgers quantity and its Name to burgers_qty.
  8. And place the last Button below the burgers_qty label and change its Text property to No. Also change its Name property to no_button.

The final DeleteConfirmation dialog looks like this:

delete_confirmation_dialog

Adding navigation

Now, when the greater part of the UI is ready, we need the ability to navigate between the pages. By adding a single event, the user will be able to navigate from the Orders to AddOrder page. Go to the Orders page and select “New order.” Expand the Events tab and add the following event:

navigate_to_add_order_button > Click > Navigate to page > AddOrder. Click “Add event”:

orchestrate_navigate_to_addorders_event

Testing the UI

Burgerio doesn’t have all the functionality now, but you can test the UI and see how it looks. Click “Test” in the top right corner of the screen. Once the page loads, you will see your app in mobile frame.

For instance, here is how the AddOrder page looks:

orchestrate_add_order_page

Creating a database

Now that we are done with the app UI, you are going to create the app backend in Orchestrate.

  1. Sign in with your Orchestrate credentials at http://orchestrate.io/. Click “+ NEW APPLICATION” to create a new application. Name the application: Burgerio_db, then click the green icon to create it.
  2. Once the application is created, you will see the dashboard and your API key. Let’s create a new collection by clicking “+NEW COLLECTION.” Name the collection: Orders, and click the green icon to create it.

We will upload all data from the app side, for now  just copy the API key.

This is how the Orchestrate dashboard with the database you just created should look:

oio_dashboard

Everything created in Orchestrate is instantly exposed via REST APIs. Connecting to any RESTful API in an Appery.io app is super easy- and that’s exactly what we are going to do next.

Defining and binding REST API services

When you have more than one API service, it’s a good idea to keep the API key (and other common properties) in a single place and then simply reference it from the services.

1. Switch to the Appery.io app builder and select Create New > Service. Choose Settings (REST settings) and click “Create Service”:

2. Add two parameters and their values:

  • orders_collectionOrders.
  • api_key – paste your API key from the Orchestrate dashboard:

orchestrate_settings

Adding the PlaceOrder service

Now lets add a PlaceOrder service that will send the order to Orchestrate.

1. Select Create New > Service > REST Service. Type PlaceOrder and click “Create Service.” Configure the REST service as following:

  • Type the following string for the URL field:
    https:[email protected]/v0/{orders_collection}/{key}

    As you can see, the URL contains values in braces – those values will be taken from the specified Settings file.

  • Choose put as Method.
  • Select Settings (that was created in a previous step) for Settings.
  • Click “New channel” to create a new Appery.io Proxy channel, type OrchestrateProxy and click “Create.” This Proxy channel will be used with all further REST Services.

Here is how PlaceOrder REST Service Settings should look:

orchestrate_place_order_settings

3. Open the Request tab and add two parameters – key and json.

4. Open the Test tab. Specify a key value as number sequence. For example – 3681236897512. And value for json as:

{"burgerName":"Hamburger","burgersQty":"2"}

5. Click “Test.” If you’ll see the Test successful message then order was placed.

Congratulations, you just ordered 2 hamburgers!

orchestrate_test_place

6. You can also ensure that order was placed by checking the collection on the Orchestrate side. Go to Orchestrate.io, select the Burgerio_db app and then the Orders collection. The Key/Value tab will open. You shouldn’t type anything here, just click the red square button with small white arrow to make a GET request:

orchestrate_check_order

As you can see, 2 hamburgers are there.

Next you are going to add the service to the page:

1. Open the AddOrder page and switch to Data view. Choose Service as datasource, select PlaceOrder and click “Add.” Rename the service instance to place_order:

2. Click “Edit Mapping” to bind the service to the page. Mapping (binding) allows you to take values from the page and use them as values for service input parameters, and take data from the service and map it to the page for display.

3. Request mapping for PlaceOrder service requires a unique value for the key. Click the “Add JS” button for the key parameter. Instead of mapping a value from the page (usually entered by the user), we are going to generate the unique value in JavaScript. Orchestrate stores values under a unique key. This key can used further to retrieve or delete data that was stored under this key. We will show you how to use a simple UUID generator to automatically generate a key.

Add the following JavaScript and click “Save & Return”:

return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
    var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
    return v.toString(16);
});

Any time the PlaceOrder service triggers, this code will be executed and will generate a unique key.

4. As the actual data needs to be in JSON format, the actual order payload also needs to be created in JavaScript. Click “Add JS” to the right of the JSON parameter. Add the following JavaScript code and click “Save & Return”:

return JSON.parse('{"burgerName":"' + Apperyio("hamburger_select").val() + '","burgersQty":"' + Apperyio("qty_slider").val() + '"}');

This code will take values from UI components and wrap it in JSON format.

Switch to Design view, select the place_order_button and expand the Events tab. Add the following event:

place_order_button > Click > Invoke Service > place_order.

Adding the GetAllOrders service

Let’s create a service that will retrieve all the orders.

1. Go to the Orders page and select Create New > Service > Rest Service. Type GetAllOrders and click “Create Service.” Configure the REST service as following:

  • Type the following string as URL:
    http:[email protected]/v0/{orders_collection}/
  • Select the Settings and Proxy:

orchestrate_get_all_orders_settings

2. Open the Test tab and click “Test.” You should see one order that you created. Click “Automatically Create Service Response.” This automatically creates the service response structure based on the test data.

3. Open the Orders page and switch to Data view. Add the GetAllOrders service instance. Name it get_records.

4. Click “Edit Mapping.” There is nothing to map for the input. Open the Response tab and create the following mapping:

orchestrate_get_all_orders_response_mapping

Okay, now switch to Design view and add the event that will trigger the get_records service when page loads:

Orders > Page show > Invoke Service > get_records.

Now you can test the app! Click “Test” button in top right of the screen and you’ll see your orders when the page loads:

orchestrate_get_all_orders_preview

Try to add some orders by navigating to the AddOrder page. Cool, isn’t it?

Setting an event to open the delete dialog

Do you remember that we created a DeleteConfirmation dialog? The user should have the ability to cancel an order, so let’s work on that.

Select the records_item and add the following events:

  • records_item > Click > Set local storage variable > selected_order. Check “Bind to component” select the Target component – order_number and Property name  – Text.
  • records_item > Click > Open as dialog > deleteConfirmation.

This will open up the delete confirmation dialog.

Adding the GetOrder service

Go to to the deleteConfirmation dialog and follow the steps to add a GetOrder service. It needs to retrieve information about the selected order (on which the user clicked):

1. Select Create New > Service > Rest Service. Type GetOrder and click “Create Service.” Configure the REST service as following:

  • Type the following string as URL:
    http:[email protected]/v0/{orders_collection}/{key}
  • Select the Settings and Proxy:

orchestrate_get_order_settings

2. Open the Request tab and add the key parameter:

orchestrate_get_order_request

3. Open the Response tab and add the JSON parameter with two nested parameters – burgerName and burgersQty:

orchestrate_get_order_response

4. Add the service instance to the page at the Data tab, and name it get_order.

5. Click “Edit Mapping” for the get_order service and create the following mapping for Request:

orchestrate_get_order_request_mapping

6. Switch to Response tab and create following mapping:

orchestrate_get_order_response_mapping

Now we need an event that will invoke GetOrder service on page Load event. Switch to Design view and open Events tab. Add the following event:
deleteConfirmation > Load > Invoke Service > get_order.

Adding the DeleteOrder service

1. Select Create New > Service > Rest Service. Type DeleteOrder and click “Create Service.” Configure the REST service as following:

  • Type the following string as URL:
    http:[email protected]/v0/{orders_collection}/{key}
  • Select get for Method.
  • Select the Settings and Proxy.

orchestrate_delete_order_settings

2. Open the Request tab and add the key parameter:

orchestrate_delete_order_request

3. Open the deleteConfirmation dialog and switch to Data view.

4. Add the service instance to the page and name it delete_order.

5. Click “Edit Mapping” for the delete_order service.

Create the following mapping for the Request tab:

orchestrate_delete_order_request_mapping

Now we just need to add events to invoke the services. Switch to Design view and select the yes_button. Add the following events:

  • yes_button > Click > Invoke service > delete_order.
  • yes_button > Click > Close dialog > DeleteConfirmation:

Select the no_button.  Add the following events:

  • no_button > Click > Set local storage variable. Type selected_order as Variable name and leave the Value field empty.
  • no_button > Click > Close dialog > DeleteConfirmation:

Test the app again and try to remove an order by clicking on it. Here you go- now users can order some tasty burgers and cancel the order if they change their mind.

Publishing the app

Once the app is done, you can publish the app as an HTML5 mobile app, or package it as binary for iOS, Android, or a Windows Phone.

Publishing as an HTML5 app

For instance, you can try our hosting to publish your app. Go to the Appery.io dashboard, select your app (don’t open, just select) and scroll down the page to see the Hosting section. Type burgerio in Appery.io domain and click “Publish.” Once the app will published you’ll see its publishing date:

orchestrate_publishing_appery_hosting

You can now access your app via the following URL:

http://burgerio.app.appery.io/

Packaging for native

You can build a binary to install this app on real devices.

Here is how you can do that for Google Play and iOS AppStore:

To export the app for a specific platform, click “Export”:

orchestrate_publishing

Sometimes it’s much faster to use the Appery.io Mobile Tester instead of building and installing the binary each time you need to test your app on the device.


Read the original blog entry...

More Stories By Max Katz

Max Katz heads Developer Relations for Appery.io, a cloud-based mobile app platform. He loves trying out new and cool REST APIs in mobile apps. Max is the author of two books “Practical RichFaces” (Apress 2008, 2011), DZone MVB (Most Valuable Blogger), and is a frequent speaker at developer conferences. You can find out what Max is up to on his blog: http://maxkatz.org and Twitter: @maxkatz.

@ThingsExpo Stories
Whether your IoT service is connecting cars, homes, appliances, wearable, cameras or other devices, one question hangs in the balance – how do you actually make money from this service? The ability to turn your IoT service into profit requires the ability to create a monetization strategy that is flexible, scalable and working for you in real-time. It must be a transparent, smoothly implemented strategy that all stakeholders – from customers to the board – will be able to understand and comprehe...
What happens when the different parts of a vehicle become smarter than the vehicle itself? As we move toward the era of smart everything, hundreds of entities in a vehicle that communicate with each other, the vehicle and external systems create a need for identity orchestration so that all entities work as a conglomerate. Much like an orchestra without a conductor, without the ability to secure, control, and connect the link between a vehicle’s head unit, devices, and systems and to manage the ...
SYS-CON Events has announced today that Roger Strukhoff has been named conference chair of Cloud Expo and @ThingsExpo 2017 New York. The 20th Cloud Expo and 7th @ThingsExpo will take place on June 6-8, 2017, at the Javits Center in New York City, NY. "The Internet of Things brings trillions of dollars of opportunity to developers and enterprise IT, no matter how you measure it," stated Roger Strukhoff. "More importantly, it leverages the power of devices and the Internet to enable us all to im...
The Internet of Things (IoT) promises to simplify and streamline our lives by automating routine tasks that distract us from our goals. This promise is based on the ubiquitous deployment of smart, connected devices that link everything from industrial control systems to automobiles to refrigerators. Unfortunately, comparatively few of the devices currently deployed have been developed with an eye toward security, and as the DDoS attacks of late October 2016 have demonstrated, this oversight can ...
You have great SaaS business app ideas. You want to turn your idea quickly into a functional and engaging proof of concept. You need to be able to modify it to meet customers' needs, and you need to deliver a complete and secure SaaS application. How could you achieve all the above and yet avoid unforeseen IT requirements that add unnecessary cost and complexity? You also want your app to be responsive in any device at any time. In his session at 19th Cloud Expo, Mark Allen, General Manager of...
More and more brands have jumped on the IoT bandwagon. We have an excess of wearables – activity trackers, smartwatches, smart glasses and sneakers, and more that track seemingly endless datapoints. However, most consumers have no idea what “IoT” means. Creating more wearables that track data shouldn't be the aim of brands; delivering meaningful, tangible relevance to their users should be. We're in a period in which the IoT pendulum is still swinging. Initially, it swung toward "smart for smar...
"ReadyTalk is an audio and web video conferencing provider. We've really come to embrace WebRTC as the platform for our future of technology," explained Dan Cunningham, CTO of ReadyTalk, in this SYS-CON.tv interview at WebRTC Summit at 19th Cloud Expo, held November 1-3, 2016, at the Santa Clara Convention Center in Santa Clara, CA.
Bert Loomis was a visionary. This general session will highlight how Bert Loomis and people like him inspire us to build great things with small inventions. In their general session at 19th Cloud Expo, Harold Hannon, Architect at IBM Bluemix, and Michael O'Neill, Strategic Business Development at Nvidia, discussed the accelerating pace of AI development and how IBM Cloud and NVIDIA are partnering to bring AI capabilities to "every day," on-demand. They also reviewed two "free infrastructure" pr...
Financial Technology has become a topic of intense interest throughout the cloud developer and enterprise IT communities. Accordingly, attendees at the upcoming 20th Cloud Expo at the Javits Center in New York, June 6-8, 2017, will find fresh new content in a new track called FinTech.
WebRTC is the future of browser-to-browser communications, and continues to make inroads into the traditional, difficult, plug-in web communications world. The 6th WebRTC Summit continues our tradition of delivering the latest and greatest presentations within the world of WebRTC. Topics include voice calling, video chat, P2P file sharing, and use cases that have already leveraged the power and convenience of WebRTC.
As data explodes in quantity, importance and from new sources, the need for managing and protecting data residing across physical, virtual, and cloud environments grow with it. Managing data includes protecting it, indexing and classifying it for true, long-term management, compliance and E-Discovery. Commvault can ensure this with a single pane of glass solution – whether in a private cloud, a Service Provider delivered public cloud or a hybrid cloud environment – across the heterogeneous enter...
"At ROHA we develop an app called Catcha. It was developed after we spent a year meeting with, talking to, interacting with senior citizens watching them use their smartphones and talking to them about how they use their smartphones so we could get to know their smartphone behavior," explained Dave Woods, Chief Innovation Officer at ROHA, in this SYS-CON.tv interview at 19th Cloud Expo, held November 1-3, 2016, at the Santa Clara Convention Center in Santa Clara, CA.
SYS-CON Events announced today that Fusion, a leading provider of cloud services, will exhibit at SYS-CON's 20th International Cloud Expo®, which will take place on June 6-8, 2017, at the Javits Center in New York City, NY. Fusion, a leading provider of integrated cloud solutions to small, medium and large businesses, is the industry’s single source for the cloud. Fusion’s advanced, proprietary cloud service platform enables the integration of leading edge solutions in the cloud, including cloud...
Video experiences should be unique and exciting! But that doesn’t mean you need to patch all the pieces yourself. Users demand rich and engaging experiences and new ways to connect with you. But creating robust video applications at scale can be complicated, time-consuming and expensive. In his session at @ThingsExpo, Zohar Babin, Vice President of Platform, Ecosystem and Community at Kaltura, discussed how VPaaS enables you to move fast, creating scalable video experiences that reach your aud...
With major technology companies and startups seriously embracing IoT strategies, now is the perfect time to attend @ThingsExpo 2016 in New York. Learn what is going on, contribute to the discussions, and ensure that your enterprise is as "IoT-Ready" as it can be! Internet of @ThingsExpo, taking place June 6-8, 2017, at the Javits Center in New York City, New York, is co-located with 20th Cloud Expo and will feature technical sessions from a rock star conference faculty and the leading industry p...
In his keynote at 18th Cloud Expo, Andrew Keys, Co-Founder of ConsenSys Enterprise, provided an overview of the evolution of the Internet and the Database and the future of their combination – the Blockchain. Andrew Keys is Co-Founder of ConsenSys Enterprise. He comes to ConsenSys Enterprise with capital markets, technology and entrepreneurial experience. Previously, he worked for UBS investment bank in equities analysis. Later, he was responsible for the creation and distribution of life sett...
The 20th International Cloud Expo has announced that its Call for Papers is open. Cloud Expo, to be held June 6-8, 2017, at the Javits Center in New York City, brings together Cloud Computing, Big Data, Internet of Things, DevOps, Containers, Microservices and WebRTC to one location. With cloud computing driving a higher percentage of enterprise IT budgets every year, it becomes increasingly important to plant your flag in this fast-expanding business opportunity. Submit your speaking proposal ...
20th Cloud Expo, taking place June 6-8, 2017, at the Javits Center in New York City, NY, will feature technical sessions from a rock star conference faculty and the leading industry players in the world. Cloud computing is now being embraced by a majority of enterprises of all sizes. Yesterday's debate about public vs. private has transformed into the reality of hybrid cloud: a recent survey shows that 74% of enterprises have a hybrid cloud strategy.
DevOps is being widely accepted (if not fully adopted) as essential in enterprise IT. But as Enterprise DevOps gains maturity, expands scope, and increases velocity, the need for data-driven decisions across teams becomes more acute. DevOps teams in any modern business must wrangle the ‘digital exhaust’ from the delivery toolchain, "pervasive" and "cognitive" computing, APIs and services, mobile devices and applications, the Internet of Things, and now even blockchain. In this power panel at @...
20th Cloud Expo, taking place June 6-8, 2017, at the Javits Center in New York City, NY, will feature technical sessions from a rock star conference faculty and the leading industry players in the world. Cloud computing is now being embraced by a majority of enterprises of all sizes. Yesterday's debate about public vs. private has transformed into the reality of hybrid cloud: a recent survey shows that 74% of enterprises have a hybrid cloud strategy.