Latest Articles

RAD Android is Our Cool App Winner for October

Written by Jim McKeeth on . Posted in Articles

rad & androidI hope everyone had a nice Thanksgiving, and survived the Black Friday/Cyber Monday marketing deluge. I was so busy catching up with family and eating too much that I’m just now announcing Embarcadero’s October Cool App contest winner is RAD Android, an app that makes it easy for people to develop mobile programs.

RAD Android, created by talented developer Abdalkader, is a tiny programming language for the Android operating system that allows anyone to write simple programs for Android devices from an Android device. These apps leverage wireless capabilities such as Bluetooth, SMS and Wi-Fi so people can create a wide variety of useful smartphone tools. They can also communicate with the Arduino open source electronics platform to enable makers and tinkerers of all levels to develop an array of imaginative tools and projects such as digital scientific instruments or home tools like an automatic guitar tuner.

Using Delphi to create an application development solution, even a tiny one, is a significant undertaking. RAD Android is an amazing example of how native development can unlock the power of the Android platform, given a dedicated and talented developer with the right skills and tools for the job.


This video shows RAD Android in action:

Or visit the Google Play store and install this free app for yourself!
Interested in submitting for the Embarcadero’s Cool App contest? It’s open to any business or consumer application built with RAD Studio, Delphi or C++Builder. Embarcadero awards Cool App contest winners a $500 Amazon gift card and winning submissions are also highlighted on the company’s YouTube channel. For more information on the contest and a link to the submission form, click here.


Server Maintenance and Future Enhancements

Written by Jim McKeeth on . Posted in Articles

Please note that our online Docwiki, Embarcadero Forums, EDN Member Services and some of our support systems are currently not accessible. These systems were taken down for maintenance over the weekend when we identified some additional issues that we are resolving promptly. We apologize for any inconvenience this has caused, and hope to have these systems back online soon.


We wanted to also take this opportunity to talk about some of the planned customer portal enhancements over the next six months. As you are probably aware, our EDN site is quite dated as it has been in use for many years. It has a lot of functionality that we know many customers like, but some that are no longer used extensively. We have started an effort to migrate to more modern platforms, such as the one used by our Community Portal. That initiative has been hugely successful and we want to migrate the rest of the functionality.


Over the coming months, we will start to introduce some of these changes. Some of these are specifically aimed to increase the value for customers on active Update Subscription. We are committed to providing ample communications for any significant changes. For example, Code Central has a long history of downloads. The way we assign these also has made tracking Code Central IDs to specific downloads difficult and resulted in many obsolete IDs. Legacy downloads will likely be folded into a new Update Subscription customer-only section of the Customer Portal. We also plan on making it easier for customers to track cases they have logged, access current and previous version downloads, view licenses and more. 


We don’t expect those changes in the coming months to result in any system downtime, but if they do, we'll make sure to promptly notify you.


As always, serving the community very important to us and we appreciate any feedback. We are always looking to do better. Thanks!


Hotfix 1 for InterBase 2017 Update 1

Written by Marco Cantu, RAD PM on . Posted in Articles

Applies to Product

InterBase (InterBase 2017 Update 1) which was available for download between dates  September 19th 2017 and October 23rd 2017.  


The reason for this hotfix is a crash bug with no workaround in InterBase 2017 Update 1 ( A description of the resolved defects in this hotfix has been added to the Udpate 1 release page at:

Recommended Action

If you have deployed to customers or are using for development InterBase 2017 Update 1, please install this critical update as soon as possible.

How to Get the Hotfix

You can download a patch kit for Windows from

For all platforms, see InterBase registered users download page at

For InterBase 2017 Developer Edition and ToGo Edition: Please install via GetIt in RAD Studio (after uninstalling a previous version of InterBase 2017, if you installed it). This applies both to IBLite/IBToGo and the InterBase Developer Server.

The new version is build

What if I have InterBase 2017

but have not applied Update 1?  Skip InterBase version and install the new build (Update 1 with Hotfix 1).


Advanced ETL Processor Named Embarcadero July Cool App Winner

Written by Jim McKeeth on . Posted in Articles

Somehow I forgot to post that the winner of our Cool App contest for July 2017 was Advanced ETL Processor Enterprise. The extract, transform and load software helps large organizations build data warehouses and automate complicated business processes with ease. Here is an excerpt from our press release about the Advanced ETL Processor Enterprise. It is a great tool, go check it out!

ETL Tools

Built with Embarcadero’s Delphi development tool, Advanced ETL Processor Enterprise ensures data is processed the fastest way possible and tested and profiled constantly. While most ETL tools use hundreds of different connectors, Advanced ETL Processor uses a Universal Data Reader and Writer concept that transforms data based on data definition, regardless of the underlying content. These components are highly configurable and allow customers to reuse their integration mappings again and again as their business data changes.

“One of the most powerful features of Delphi is the ability to work with a variety of databases, data sources and data types,” said Jim McKeeth, chief developer advocate and engineer at Embarcadero. “Advanced ETL Processor Enterprise wraps those features into a powerful application that makes the extraction, transformation, and loading of data simple and easy to manage without writing a single line of code. This is a great example of a Cool App that turns complex data integration into an automated process that doesn’t require training or technical expertise.”

Advanced ETL Processor Enterprise includes a built-in scheduler, business rules designer, package designer, report designer and data browser. The application works with a wide range of data sources, including XML, Access, Paradox, ODBC, Oracle, SQLite, Salesforce, and InterBase. Additionally, it includes support for automation, validations, and transformations on the data as it moves it between data sources.

“Delphi's advanced data access is the key to making a robust tool like Advanced ETL Processor,” said developer Mike Rewnick of DB Software Laboratory LTD. “Embarcadero does the same thing we do: make the complicated simple and empower users.”

Our Cool App contest is open to any business or consumer application built with RAD Studio, Delphi or C++Builder. Qualifying apps can use VCL, FireMonkey, DataSnap, EMS, FireDAC, InterBase and any other components, libraries, services, sites, infrastructures, APIs or devices. Embarcadero awards Cool App contest winners a $500 Amazon gift card and winning submissions are also highlighted on the company’s YouTube channel

CodeRage XII

Written by Jim McKeeth on . Posted in Articles

CodeRage XIICatch the CodeRage Replays! We have saved all the sessions for you. This year included more than 75 sessions and featured Robert C. "Uncle Bob" Martin of Clean Coders and Steven McConnell, author of "Code Complete".

Learn More


Out of the 76 sessions and 58 speakers scheduled for CodeRage XII for 2017, a few notable standouts:

  • Robert C. “Uncle Bob” Martin, author of "Clean Code: A Handbook of Agile Software Craftsmanship", is speaking on “The Clean Coder - An Introduction to Software Professionalism”
  • Steven McConnell, author of “Code Complete”, is speaking on “Managing Technical Debt”. 
  • Marco Cantu, author of the Mastering Delphi series, is speaking on “Introduction to ExtJS for Delphi Developers “
  • Ray Konopka, author of “Developing Custom Delphi Components”, shares his “IDE Productivity Tips & Tricks”
  • Cary Jensen, author of “Delphi in Depth: FireDAC”, speaks on “FireDAC in Depth: Creating and Using Indexes”

Which sessions are you looking forward to the most?

  • [Watch] On-Demand - Working with TlistView - raouf rahiche
  • [Watch] On-Demand - Some code to start building C++ applications - Francisco Muro A.
  • [Watch] On-Demand - Using templates in IntraWeb - Alexandre Machado
  • [Watch] On-Demand - OpenAPI/Swagger: Document and Test your REST API Server - Wagner Landgraf
  • [Watch] On-Demand - Deep Dive: Hospitality Survey App Template Developer Guide - Eli M
  • [Watch] On-Demand - How to develop a simple recommender system - Daniele Spinetti
  • [Watch] On-Demand - All you need know to developer for Windows 10 - Ricardo Boaro
  • [Watch] On-Demand - CAD with RAD, master your OOP skills for multi-plat development - Vsevolod Leonov (Seva)
  • [Watch] On-Demand - Free SSL certificates with Let's Encrypt - Wagner Landgraf
  • [Watch] On-Demand - Customising DataSnap Method Output - Bob Swart
  • [Watch] Tue Nov 7th at 6:00 AM CT - Integrating with Amazon DynamoDB using Delphi Enterprise CDATA Connector - Paweł Głowacki
  • [Watch] Tue Nov 7th at 7:00 AM CT - The Clean Coder - Robert C. "Uncle Bob" Martin
  • [Watch] Tue Nov 7th at 9:00 AM CT - InterBase 2017 ToGo Cross-Platform Development and Deployment - Al Mannarino
  • [Watch] Tue Nov 7th at 9:00 AM CT - Product Address - Sarina DuPont
  • [Watch] Tue Nov 7th at 10:00 AM CT - Storing Data in Amazon S3 with Delphi - Paweł Głowacki
  • [Watch] Tue Nov 7th at 10:00 AM CT - Zen and the Art of Software Extensibility - Bob Calco
  • [Watch] Tue Nov 7th at 11:00 AM CT - Introduction to Ext JS for Delphi Developers - Marco Cantu
  • [Watch] Tue Nov 7th at 12:00 PM CT - VCL Layout Techniques - Ray Konopka
  • [Watch] Tue Nov 7th at 12:00 PM CT - Migrating your C++Builder Projects to Unicode - Al Mannarino
  • [Watch] Tue Nov 7th at 1:00 PM CT - IDE Productivity Tips and Tricks - Ray Konopka
  • [Watch] Tue Nov 7th at 1:00 PM CT - Accessing AWS S3 platform from C++ Builder - Luca Zoller
  • [Watch] Tue Nov 7th at 2:00 PM CT - FMX Animations - Ray Konopka
  • [Watch] Tue Nov 7th at 2:00 PM CT - C++ Builder as a REST server, easy way to comunicate with Apps and SCB's - Dion Mai
  • [Watch] Tue Nov 7th at 3:00 PM CT - Directly Using the Android API - Brian Long
  • [Watch] Tue Nov 7th at 3:00 PM CT - InterBase 2017 Update - Sriram Balasubramanian
  • [Watch] Tue Nov 7th at 4:00 PM CT - FireDAC in Depth: Creating and Using Indexes - Cary Jensen
  • [Watch] Tue Nov 7th at 4:00 PM CT - Docker 101: Introduction to Docker - Jenny Fong, Docker
  • [Watch] Tue Nov 7th at 5:00 PM CT - Preventing and Fixing Coupled Code - Cary Jensen
  • [Watch] Tue Nov 7th at 5:00 PM CT - Matlab/Scilab scripting engine - Janez Makovsek
  • [Watch] Wed Nov 8th at 6:00 AM CT - FmxLinux - FireMonkey for Linux - Eugene Kryukov and Vsevolod Leonov (Seva)
  • [Watch] Wed Nov 8th at 6:00 AM CT - Simplify and speed-up application development with ORM for Delphi - Devart
  • [Watch] Wed Nov 8th at 7:00 AM CT - Creating JSON Wrapper Classes in Delphi - Andrew Sovtsov
  • [Watch] Wed Nov 8th at 7:00 AM CT - Programming Mazes in C++ and Delphi - David Millington
  • [Watch] Wed Nov 8th at 8:00 AM CT - CrossVcl (VCL for Linux and osX) Review - Eugene Kryukov and Vsevolod Leonov (Seva)
  • [Watch] Wed Nov 8th at 8:00 AM CT - Introducing FMXRTL-bringing Right To Left to FireMonkey - Ruhollah Akbarzadeh
  • [Watch] Wed Nov 8th at 9:00 AM CT - TMS Business Showcase: REST Server and ORM (XData and Aurelius) - Wagner Landgraf
  • [Watch] Wed Nov 8th at 9:00 AM CT - Getting Started with Linux using Ubuntu 16.10 , Installing Packages, and Connecting to Servers - Tom Lawrence, Lawrence Systems / PC Pickup
  • [Watch] Wed Nov 8th at 10:00 AM CT - Using PDF Forms as Data Entry User Interfaces in your Delphi Applications - Girish Patil
  • [Watch] Wed Nov 8th at 10:00 AM CT - Bash on Ubuntu on Windows - Kevin Remde
  • [Watch] Wed Nov 8th at 11:00 AM CT - Building mobile apps that connects to Salesforce and SAP/R3 - Fernando Rizzato
  • [Watch] Wed Nov 8th at 11:00 AM CT - Panel: Artificial Intelligence (Davos) - Moderated by Robert F. Smith
  • [Watch] Wed Nov 8th at 12:00 PM CT - Introduction to Sencha Products - Ext JS, Tools, Test, ExtReact, GXT - Sandeep Adwankar
  • [Watch] Wed Nov 8th at 12:00 PM CT - Managing Technical Debt - Steve McConnell
  • [Watch] Wed Nov 8th at 1:00 PM CT - Introduction to Linux Command Line - Steven Gordon
  • [Watch] Wed Nov 8th at 2:00 PM CT - Create SCADA Modbus Industrial Control applications, and Devices with ControlLab, and Visuino Pro - Boian Mitov
  • [Watch] Wed Nov 8th at 3:00 PM CT - Developing Your Own Visuino Components with Delphi - Boian Mitov
  • [Watch] Wed Nov 8th at 4:00 PM CT - Embedding a Chromium browser in a Delphi application - Alex Ruiz
  • [Watch] Wed Nov 8th at 4:00 PM CT - Learning Linux multitasking at the command-line - Tutorials and Training
  • [Watch] Wed Nov 8th at 5:00 PM CT - Integrating the Google Places API into a Delphi application - Alex Ruiz
  • [Watch] Wed Nov 8th at 5:00 PM CT - Create a Business Intelligence (BI) Web Site RAD Style with FireDAC, IntraWeb and UniGUI - Miguel Angel Moreno
  • [Watch] Thu Nov 9th at 6:00 AM CT - Delphi Application Migration  - Al Mannarino
  • [Watch] Thu Nov 9th at 7:00 AM CT - Modernizing your VCL application - Danny Wind
  • [Watch] Thu Nov 9th at 7:00 AM CT - IntraWeb 17 - The Webolution Begins - Chad Hower
  • [Watch] Thu Nov 9th at 8:00 AM CT - CrossTalk - Connecting Delphi and C++ to .NET - Chad Hower
  • [Watch] Thu Nov 9th at 8:00 AM CT - Implementing 2-Step Authentication - Nirav Kaku
  • [Watch] Thu Nov 9th at 9:00 AM CT - Demystifying OOP with RAD Studio and ORMBr - Juliomar Marchetti
  • [Watch] Thu Nov 9th at 9:00 AM CT - Unit Testing and User Interface - Ruhollah Akbarzadeh
  • [Watch] Thu Nov 9th at 10:00 AM CT - FixInsight: Finding Bugs with Static Code Analysis - Roman Yankovsky
  • [Watch] Thu Nov 9th at 10:00 AM CT - GitHub and Git Foundations - GitHub
  • [Watch] Thu Nov 9th at 11:00 AM CT - The Delphi Parser - Automatic Migration Tool - Oren Aviram
  • [Watch] Thu Nov 9th at 11:00 AM CT - Docker for Windows and Windows Containers - Michael Friis and Elton Stoneman, Docker
  • [Watch] Thu Nov 9th at 12:00 PM CT - New feature of Delphi's reporting with FastReport VCL 6 - Denis
  • [Watch] Thu Nov 9th at 12:00 PM CT - Panel: The Internet of Things Is Here (Davos) - Moderated by Robert F. Smith
  • [Watch] Thu Nov 9th at 1:00 PM CT - Single Sign-On and Two-Factor Authentication with Facebook and Google Authenticator - Olaf Monien
  • [Watch] Thu Nov 9th at 1:00 PM CT - Multi-thread CFD example in C++ Builder - Yilmaz Yoru
  • [Watch] Thu Nov 9th at 2:00 PM CT - Plurals, Genders and Abbreviated Numbers with Delphi - Jaakko Salmenius
  • [Watch] Thu Nov 9th at 2:00 PM CT - Microservices with RAD Server - Andrew Sovtsov
  • [Watch] Thu Nov 9th at 3:00 PM CT - C++ and Physics - Mary Kelly
  • [Watch] Thu Nov 9th at 3:00 PM CT - Design Consideration for Multi-Platform Applications - Sarina DuPont
  • [Watch] Thu Nov 9th at 4:00 PM CT - Fast and Furious IDE Tips and Tricks - Alister Christie
  • [Watch] Thu Nov 9th at 4:00 PM CT - InterBase Tips and Tricks - Mary Kelly
  • [Watch] Thu Nov 9th at 5:00 PM CT - Working with Linux Libraries in Delphi - Craig Chapman
  • [Watch] Thu Nov 9th at 5:00 PM CT - Understanding the BlockChain - Jim McKeeth
  • [Watch] Thu Nov 9th at 6:00 PM CT - OpenGL on Linux - Craig Chapman


Replay from last year's CodeRage XI

CodeRage XI



InterBase 2017 Update 1 Is Now Available

Written by Marco Cantu, RAD PM on . Posted in Articles

We are pleased to announce general availability of InterBase 2017 Update 1.

This update expands on the InterBase 2017 version we release earlier this year and introduced many new features as discussed at

InterBase 2017 Update 1 New Features

A highlighted summary of InterBase 2017 Update 1 new features includes:

  • Developer and Server Editions are now available for MacOS Universal build, in both 32-bit and 64-bit platforms
  • Server Edition includes bug fixes for Windows and Linux as well as performance enhancements
  • Support for Windows 10 Creator’s Update
  • SQL features support for Expression Indices, ORDER BY and GROUP BY Expression, as described below

Expression Indices

Expression indices optimize queries based on expressions. By defining the index below, based on an expression referring to multiple fields:

CREATE INDEX idx_expr_t1_udf ON t1
COMPUTED BY (UPPER(first_name) || UPPER(last_name));

a query based on that same expression is going to be much faster:


WHERE (UPPER(first_name) || UPPER(last_name)) = 'THREE MUSKETEERS';

SQL GROUP BY Expression and ORDER BY Expression

The GROUP BY statement can be used with expressions COUNT, MAX, MIN, SUM, and AVG to group the result-set by one or more columns. Similarly the ORDER BY statement can be used with these expressions to sort a resulting dataset. 

/* Following sample queries are optimized to use the expression index, if available; SET PLAN ON to see the plan. Otherwise, the ORDER BY and GROUP BY <expr> will execute by sorting the result set as needed. */

CREATE INDEX idx_expr_t1_mul ON t1 COMPUTED BY (f1 * f2); 

/* ORDER BY */

-- by expression
SELECT f1, f2, f1 * f2 FROM t1 ORDER BY (f1 * f2);

-- by ordinal position
SELECT (f1 * f2), (f1 + f2) FROM t1 WHERE f1 * f2 = 100 ORDER BY 1, 2;

 /* GROUP BY */

-- by ordinal position
SELECT f1 * f2, COUNT(*) FROM t1 GROUP BY 1;

-- by expression
SELECT (f1 * f2), COUNT(*) FROM t1 GROUP BY (f1 * f2);

More Information on Update 1

For a complete list of updates in InterBase 2017 Update 1, please visit our docwiki at

InterBase is the Future for Your Data Layer Needs

Consider these new features along with the current, easily configurable InterBase features like column-level data encryption, field-level change tracking (Change Views), user-specific data visibility, journaling, and point-in-time recovery. InterBase 2017 is a lightweight embeddable database solution that is ideal for distributed systems.

Tips for choosing the best ISV database for you?

If you are looking to choose an ISV database, visit the ISV database comparison on the InterBase pages. Here you will discover a number of questions to help you choose the right database for you.

Download InterBase 2017 Update 1 today!

The Windows and Linux Server Edition updates are provided as a patch install kit for InterBase 2017 customers, while InterBase ToGo and MacOS versions are provided as full install kits. 

Existing Users download the update here:

New to InterBase? 

Learn more at

Buy a license on or from your local Embarcadero reseller parnter

Notice that the trial and developer edition updates will be made available in the coming weeks following final certification, and at the same time we'll refresh the IB 2017 versions distributed via GetIt to the RAD Studio Tokyo customers.


Focus on your product, and stop worrying about your data layer.


InterBase 2017: Embed, Deploy, Relax!



A Busy Summer!

Written by Atanas on . Posted in Articles

It was a busy summer. There has been so much happening lately that it is difficult to decide where to start.

A Busy Summer

Earlier this year we launched the milestone RAD Studio 10.2 (aka Tokyo). This August we released Update 10.2.1 that provided a number of highly anticipated quality and feature updates. So, what happened with the BIG September release? As stated before, we are no longer looking for the next BIG release. We want to provide customers the functionality that they need when it is ready and continue to constantly evolve the product ALL the time. We did 10.2.1 in August, but this week you should be looking for the iOS 11 update. We want to make it easier to stay on the latest release and deliver value more often.


We do have more work to remove the re-installation requirement altogether, but that is not a small task with almost 70K files involved. The good news is that upgrades today are more seamless and our Product and R&D teams received a lot of acolytes for that. The Linux support is a huge milestone and there is a lot more in 10.2.1 for both mobile and Windows.


Our marketing published an awesome magazine to celebrate the progress made with Delphi over the last 22 years I encouraged many of our developers to share this with their supervisors, who think that Delphi is a thing of the past, many were pleasantly surprised. We are running a nice promo for September that goes with the “22” theme, so check-out the site or speak with your partner. It is a great time to upgrade or expand.


The VCL framework continues to evolve. I think that with all the technologies out there, we sometimes forget how good it is, and it is only getting better. High DPI support and improved icons make your apps truly stand-out, and we have plenty of more awesome updates in the works. Lately, we’ve spoken a lot with C++ developers, as we try to increase the awareness for C++Builder. It is amazing how much Delphi developers take for granted. While there are OK visual frameworks that support C++, almost nothing comes close to VCL. I am really excited to continue to educate our C++ community on what we can deliver and of course continue to improve the C++ language support.


At the end of August, we released Enterprise Connectors. These make integration of applications built with RAD Studio to the most common enterprise applications, such as SAP, Salesforce, Facebook, and many more, very easy. They use a combination of FireDAC, REST, and CData technologies to make user adoption seamless. I think that these give an incredible competitive edge to our developer community, especially considering the speed of development. It is fast development indeed.


Just last week we launched the Embarcadero Academy! Making our products more easily accessible for education and making learning easier is a top priority. I feel that a dedicated education site together with a FREE Starter edition that is available for Education purposes are important steps in this direction. I benefit personally… My thirteen-year-old son is learning Delphi and the Academy is making it easy (and inexpensive)! Visit and find out for yourself.


Most importantly, last month we acquired Sencha. This demonstrates again our broader commitment to Developer Tools. Sencha is the home of Ext JS, which is the premier Enterprise framework for JavaScript development. I am super excited for the Ext JS community. Today there are few independent IT organizations with our resources committed to developers. There are also a lot of immediate benefits for our existing Delphi and C++ developers. Over the years RAD Studio provided many Web development options, but none has had the robustness of our core VCL and FMX frameworks. As Web usage exploded, this has contributed for some in the decline of popularity for Delphi. The Ext JS framework is a match to VCL in terms of sophistication and scalability. There are already several good ways to bridge the technologies. As always, we have really smart partners in our technology ecosystems that have developed deeply integrated solutions (e.g. UniGui, Kitto). Developers can also use Ext JS through the REST API connectivity enabled by RAD Server. We will work with our technology partners to make the integration even more seamless.


The product team also just published a roadmap updated for September 2017. It includes plans for the upcoming 10.2.2 and 10.3 releases. There are also details on some research areas R&D is exploring. All of this as we continue our commitment to developers in keeping Delphi, C++Builder, and RAD Studio the premier choice for expert developers everywhere.


After a busy summer, we are all preparing for a busier fall. The community is full of ideas, Block Chains, more IoT support options, better TFS integration, and as always many ideas for language features. Our PMs are busy evaluating ideas and working with R&D on specs. We are open to technology partners and MVPs to participate and introduce products that expand our capabilities, Woll2Wall made an awesome Beacon Editor with FMX, the much anticipated FMX Linux Clients are out, there are cool FMX designer ideas, so much more to come. We’ll demonstrate a lot of these during CodeRage coming November 7th.


This is going to be a productive fall. Get on 10.2.1 and build some awesome apps!

RAD Studioロードマップ(2017年9月付)

Written by Hitoshi Fujii on . Posted in News

この記事は、Marco CantuによるRAD Studio Roadmap September 2017の抄訳です。

RAD Studioの現在と将来に関する2017年9月付のロードマップをご覧ください。

RAD Studio / Delphi / C++Builderのアップデートは、製品を購入すると標準で1年間有効なアップデートサブスクリプションサービスによって提供されます。

RAD Studio Roadmap September 2017

Written by Marco Cantu, RAD PM on . Posted in Articles

Check out the latest RAD Studio Roadmap, September 2017 update, to learn where RAD Studio is now, and where it is going.


the RAD Studio PM team (Sarina DuPont, David Millington, Marco Cantu)



Deep Dive: Hospitality Survey App Template For RAD Studio 10.2.1 ...

Written by Eli M on . Posted in Articles

The Hospitality Survey App template can be downloaded through Embarcadero's GetIt which is built into the RAD Studio IDE. It consists of four different projects that interconnect with each other. The projects are:

  • Hospitality Survey Setup
  • Hospitality Survey EMS
  • Hospitality Survey Admin
  • Hospitality Survey Client

You should deploy and run the projects in the following order:

1) The Hospitality Survey Setup app will help you set up your database, the tables and data, and your EMS user accounts.

2) The Hospitality Survey EMS is the RAD Server side REST resource which both the Hospitality Survey Client and the Hospitality Survey Admin interface with. It should be deployable on Windows and Linux through IIS, Apache, or the stand alone EMS server.

3) The Hospitality Survey Client is a RAD Studio client application for Android, iOS, macOS and Windows. The client application should allow you to select a tenant from your RAD Server and then log in as a user. Once logged in it will download the survey data for your current tenant and allow the survey to be filled out. Once the survey is complete it can be submitted back to the server and a new survey can be started.

4) The Hospitality Survey Admin app is an AngularJS application for the web. You should be able to log into the application with your Tenant ID and RAD Server user ID. The web app should allow you to view statistics and graphs about the results of the survey questions and each individual question and answer. You can also export a list of emails collected from the surveys.


In Depth Developer Guide Webinar


Hospitality Survey Setup

Start: Your EMS Server should already be setup and running.

Step 1: Set a path for your stores database. Set the path to the EMSServer database.

The stores database is created, used, and populated with data in Step 4.

The EMSServer database link is used to populate the drop down of Tenant IDs in Step 3.

Step 2: Setup the demo users on the EMS Server using the EMS API.

You will need your EMSServer Host, Port, and Tenant IDs in this step. The Setup will connect to your EMSServer and create groups and users for the template.

You can create Tenant IDs using this tutorial:

Step 3: Customize the questions to be asked in the survey for each tenant. A blank tenant_id will be asked to all tenants.

You can customize the questions in your survey on Step 3. The fields are:

  • ID - An ID for the question.
  • name - A short name for the question with no spaces.
  • title - The text of the question as it will appear in the survey.
  • type - The type of question controls which question template is loaded on the client. The existing types are: rating, yesno, edit, options
  • options - If the type of the question is set to options this field is used to populate the options. It's value is a JSON array of options.
  • value - The value is where the user submitted data is stored. It can be left blank but could be used to provide a default answer.
  • category - The category of the question. This field is provided for expandability.
  • tenant_id - The tenant ID of the question. If the tenant_id field is blank all tenants will get the question. If it is set to a tenant only that tenant will get the question.


Be sure to update the tenant IDs to to match your tenant IDs.

Pressing the Re-Generate button will create new INSERT queries on Step 4.

Step 4: Create the tables and insert the questions data into your stores database with the Initialize All button.

This step contains the SQL setup queries for the stores database. There are three tables which will be set up which are: SURVEYS, QUESTIONS, RESULTS

Each table will be dropped and re-created when the queries are run (any existing data in the tables will be lost). In the third TMemo field the SQL queries from your questions defined in Step 3 will appear.

Pressing the Initialize All button will execute the SQL queries against your defined stores database from Step 1.

Complete: After step 4 the databases and users should be setup and ready for you to use the client and admin areas.

Your EMS database and users should be setup at this point. You should be able to connect the Hospitality Survey EMS package to your new stores database and compile the package.

Once your Hospitality Survey EMS package is running in the EMS Development Server you should be able to open and compile the Hospitality Survey Client.

After you submit some survey results via the Hospitality Survey Client you should be able to log into the Hospitality Survey Admin and see your results.


Hospitality Survey EMS

The Hospitality Survey EMS is the RAD Server module for the Hospitality Survey Client and the Hospitality Survey Admin to interface with.

The end points mainly return the FireDAC JSON format which can be easily loaded in to a RAD Studio client or access via standard JSON in a non-RAD Studio environment.



GET /survey/ - Download the survey questions in FireDAC JSON format.

POST /survey/complete - Upload the survey questions and answers.

GET /survey/results/* - Download the survey results in a paged fashion in FireDAC JSON format. The page number is placed where the * is.

GET /survey/stats/all - Download various stats about the survey results in FireDAC JSON format.

GET /survey/details/* - Download the questions and answers from a specific survey ID in FireDAC JSON format. The survey ID is placed where the * is.

GET /survey/emails/csv - Download a list of all of the email addresses from completed surveys in CSV format.


GET /tenants/ - Download a list of the server Tenants which are active in FireDAC JSON format.



The endpoints are defined like this in code:

// SurveyModule.pas



procedure Get(const AContext: TEndpointContext; const ARequest: TEndpointRequest; const AResponse: TEndpointResponse);



procedure GetData(const AContext: TEndpointContext; const ARequest: TEndpointRequest; const AResponse: TEndpointResponse);



procedure PostData(const AContext: TEndpointContext; const ARequest: TEndpointRequest; const AResponse: TEndpointResponse);



if ARequest.Params.Values['query'] = 'results' then

if ARequest.Params.Values['query'] = 'stats' then

if ARequest.Params.Values['query'] = 'details' then

if ARequest.Params.Values['query'] = 'emails' then



// TenantModule.pas


procedure Get(const AContext: TEndpointContext; const ARequest: TEndpointRequest; const AResponse: TEndpointResponse);


The variable in the /survey/results/* and /survey/details/* endpoints is accessed via ARequest.Segments object like below:


  if ASegments.Count = 3 then // first segment is "survey" second is "results or "details" third segment is the variable


    SurveyId := ASegments.Items[2];


User permissions:

User permissions are governed by the {$DEFINE GROUPPERMISSIONS}. You can comment or uncomment this line for dev and live deployments. User permissions are ignored when {$DEFINE GROUPPERMISSIONS} is commented out.


Hospitality Survey Admin

The Hospitality Survey Admin dashboard project which was built in AngularJS. The Admin Dashboard connects to RAD Server on the backend via a REST API. The stats that are displayed are for data that has been collected in the Hospitality Survey Client. AngularJS is a popular framework for building web applications. It uses straight Javascript and HTML as it's template language. The data binding functionality that it offers eliminates a lot of the CRUD code you would normally have to build. AngularJS uses HTML as it's View and Javascript as it's Controller. You can quickly consume JSON from REST end points and display it using AngularJS. 

You should be able to log into the Admin area using a Tenant ID and Tenant Secret plus the login and password for a user in the Managers Group. For this template the default user is Manager1.

Note: You must log in with your Tenant ID as the Store ID and not the Tenant Name.


Copy index.html and the img, js, and styles subdirectories to your web server. Optimally you should place them on the same web server as your RAD Server DLL or Shared Object file. They could be placed in an admin subdirectory. You can place them on a different web server than RAD Server but you will need to make sure that your CORS Access-Control-Allow-Origin is set up correctly.

Within the js/admin.js file you should configure the $scope.ServerURL variable to point to the host where you RAD Server install is located. The default is: http://localhost:8080/


CORS Accept permissions:

Within the js/admin.js file you can configure the CORS settings for dev and live versions within the $scope.getHeader function. By default it is setup for development. When you want to switch to the live version (and enable user permissions) you can uncomment the line containing the X-Embarcadero-Session-Token and comment out the line without it. Switch back and forth between the two as needed.

There is a similar setting in the Hospitality Survey EMS server for configuring permissions for dev or live.


REST Endpoints & FireDAC

The Hospitality Survey EMS endpoint returns FireDAC tables as JSON. This allows interchangable compatibility between RAD Studio and clients like AngularJS. Here is an example of walking through the FireDAC table JSON tree to get to the records: data["FDBS"]["Manager"]["TableList"][0]["RowList"]

In addition to AngularJS the Admin Dashboard also utilizes Chart.js, BootStrap, and a custom Bootstrap style. The Bootstrap style is from and you should be able to go there and get other styles. If you replace the existing style in the project with one of the other styles on it should just drop it without any other effort and you will have an entirely new look (just like how FireMonkey styles work). Chart.js is available from which is a great Javascript library for displaying chart data dynamically in the browser. The Chart.js library has a special shim for AngularJS which facilitates the data exchange between AngularJS and Chart.js. Lastly, BootStrap is used which provides visual theming on HTML form elements (among other things). There is also a special shim for AngularJS which facilitates the easy integration with BootStrap.


Hospitality Survey Client

The Hospitality Survey Client connects to the Hospitality Survey EMS server on multiple end points for downloading and upload data. It is built to be cross platform on Android, iOS, macOS, and Windows using a single codebase and single UI.

The survey is dynamically generated based on the questions that are downloaded from the Hospitality Survey EMS server. Each question is assigned to a TFrame which displays that type of question.


The architecture of the app is built in a rapid application development style using TTabControl for handling pages and individual frames for each page. TActionList is used to consolidate much of the code in the MainForm.



uMainForm.pas - Contains the main form of the application including the TTabControl with the design time frames.

uTenantListForm.pas - Contains a separate form for selecting the active Tenant ID.



uTenantsDM.pas - Contains the non visual components for downloading the Tenant list.


Design Time Frames:

uStoreLoginFrame.pas - Contains the store login frame.

uLoginFrame.pas - Contains the user login frame.

uMenuFrame.pas - Contains the main menu of the application including the Take Survey button.

uFinishFrame.pas - Contains the final frame of the application including the Thank You button after a survey has been completed.

uBackendFrame.pas - Contains the non-visual components for downloading survey data and uploading the results.

uProgressFrame.pas - Contains the animated progress controls which are displayed when the application is doing work.


Dynamic Frames:

uComboBoxFrame.pas - Contains the combo box survey question type.

uCompleteFrame.pas - Contains the complete button for the survey.

uEditFrame.pas - Contains the edit survey question type.

uRatingBarFrame.pas - Contains the star rating track bar survey question type.

uSurveyHeaderFrame.pas - Contains the header for the top of the survey.

uYesNoFrame.pas - Contains the Yes/No survey question type.


If you want to make changes to the design time frames be sure to edit the frame itself and not the version of it that is embedded in the MainForm. This will keep your changes consolidated in one place. If you changes don't update in the MainForm you can delete the Frame from the MainForm and re-add it. Be sure to add it to the correct Tab and set to Align Client after you add the frame.

Note: You must log in with your Tenant ID as the Store ID and not the Tenant Name.


Restaurant Image:


Hospitality Survey Editor

There is also a Hospitality Survey Editor app which will connect to your existing Hospitality Survey database and allow you to customize the questions which are asked in the client. The questions are stored in a table in the database and then downloaded to the client as JSON through RAD Server. The Hospitality Survey Client app loads the JSON and then dynamically creates the input fields using TFrames.

The Hospitality Survey Editor app was created by stripping down the Hospitality Survey Setup app and connecting it directly to the Hospitality Survey database.

Download the full source code for the Hospitality Survey Editor in FireMonkey for Delphi 10.2 Tokyo.


Hospitality Survey Admin Client

There is also a Hospitality Survey Admin Client that is another version of the Hospitality Survey Admin dashboard. It is built in Delphi 10.2 Tokyo instead of AngularJS and can be deployed to Android, iOS, macOS, and Windows 10. The Admin Client interface is very similar to the one found in the AngularJS version. TeeChart Lite which comes with RAD Studio was used for the charts in the business Dashboard. The survey results for each completed survey are displayed using the dynamic form code from the original client as well. The Admin Client is based off the main client and just updated to make new REST calls to the needed endpoints for the admin data.

Download the full cross platform source code of the Hospitality Survey Admin Client for Delphi 10.2 Tokyo.


Check out more tips and tricks in this development video: