Hi,

This is my first weblog post, ever. I am usually a private person who doesn’t post much…even on Facebook and LinkedIn, I don’t like to post many status updates. So publishing something public is something somewhat uncomfortable for me to do. However frightening it is, its also somewhat exciting to be able to share some Adesso application development tips, tricks, how-to’s, and new features. Over the course of 2010 I will post various topics on how to build Adesso applications quickly, how to design forms with button controls to do cool things, and how to basically improve Adesso applications. Hopefully these post will actually be read by some people and through sheer curiosity, those people will try these tips out on their own. Perhaps some people that don’t even know what Adesso is might even give it a spin.
Some History
My name is James (Jim) Young, and I am a Principal and founder of Terraine, Inc, a small environmental firm that was started in September 1991. I have been using Adesso since early 2003 to build small footprint applications that run in offline mode on Pocket PC and PC devices. Initially we purchased a few Adesso licenses to build internal applications that were used to streamline field data collection processes that used to be conducted using clipboards and paper. Over the years, we began using Adesso more and more, until Adesso Systems (former owners of Adesso) asked us if we would be interested in a partnership, wherein we would market the software within our area of expertise (environmental services). We agreed to do as much, and had some limited success.

n December 2007, Adesso Systems filed for Chapter 7 bankruptcy protection. Their focus changed into developing and marketing an application developed in Adesso called Tubes, which was targeted to the consumer market. Venture capital ran out, and that was that. In May 2008, Terraine, Inc. purchased the intellectual property of Adesso. By August 2008 our build environment was up and running, churning out new versions of Adesso executables.

It is now January 2010, and we have succeeded in building many applications for various clients in several markets. The source code is continually improving, and features we had never thought about and which were suggested by our clients are slowly being added. We are about to kick off a true web client for our software…code named Project Mermaid. With this new functionality, users of Adesso will be able to build an application in Adesso that works offline on PPC and PC, and out-of-the-box, the entire system will automatically work using a standard web browser in online mode. Validation control, expressions, and forms will have virtually the same look and feel as the Adesso Client experience. We are very excited about this new enhancement to our product. Barring any unforseen problems, expect to see Version 1 of Mermaid sometime in March 2010.

About Adesso (very brief)
For those of you not familiar with Adesso, I will provide a very brief explanation in this first post, and this post only. Adesso is a client/server database system that runs on small Windows devices (Windows Mobile) and Windows PCs, Netbooks, and Tablet PCs (Windows XP/Vista/Win7). It consists of the Adesso Client and the Adesso Server. The Client uses the .NET Framework to function and stores the data locally using SQL CE, while the Server requires Microsoft IIS and some flavor of SQL Server (SQL Server Express, Standard, or Enterprise). Basically, the data are stored in SQL Server, and Adesso handles the permissions, sync rules, and conflict resolution through an easy-to-use web interface. When a user clicks the sync button on his device, the local database on the device is compared to the server database. Updates are made according to the latest sync rules and permissions. Everything is controlled in near real-time and over-the-air, including updates to Adesso Client iteself. Once the data are on the server, those data are available to other databases and applications via an ODBC Driver and also via web services. In a nutshell, you can develop an application very quickly (hours and days, not months and years) in Adesso, deploy it to thousands of PPCs, and analyze data via Google Maps, bar charts, graphs, tables, etc in almost real-time once the data are synced from the remote PPCs to the Adesso Server. It is a very cool system. I have played around with other competing products, especially when Adesso Systems went under, but have yet to find a development platform that can beat Adesso in this niche.

The Adesso Application Designer – Part 1 (Tables & Fields)

Ok, now that that is finally done, I can move on to the good stuff…examples of cool things you can do with this stuff. However, in order to show you the cool stuff, you must first have a basic understanding of the Design Environment. For purposes of this Blog, I will assume that most everyone has already downloaded the Adesso Client application and is somewhat familiar with it. If you haven’t, go here to download it: http://navfac.net (u: adessouser; p: adesso). It’s a free download.

In this first part of describing the Adesso Application Designer environment, I will first go over the most basic elements of the Designer environment.

To create an application, go to File>New Application and enter a name and path to store the app. After that, your first screen will look like this:

It’s an OFFLINE System, So Keep that in Mind
As with most standard client/server database development systems, Adesso contains elements to build your tables, fields within your tables, views, forms, and filtersets. What one needs to keep in mind when developing in Adesso is that this is an OFFLINE system, and as such, certain things common in typical client/server systems are difficult to handle with an offline system because of the nature of being offline. For example, if you want to build an order taking system where each client request pings the server to obtain a new incremental order number, it is not possible with an offline system because the server doesn’t know who is requesting a new number. There is no record-locking per se. Therefore, you need to design your Adesso system to build a unique identifier without needing to ping the server for a unique incremental number. In order to do this, you can use the RECORDID() function as an expression within your primary key in Adesso, or you build your own unique identifier by using an expression that utilizes several fields in your table, such as date, time, etc.

Another thing to keep in mind when building an Adesso database is that you need to consider the target devices or devices that will be used. If your target device is PPC only, then you have to try to build your app in a way that is nimble, with a small footprint. After all, PPCs are small and don’t have much memory. The easiest way to fail is to build a large database with more than 25 tables, dozens of large plugins, and a large number of big graphic files. It is much better to build a few small applications than one large one. Adesso contains an instantiation/data propagation feature on the server side that allows sharing of schema and records for common elements, so it is easy to build very small apps that run very efficiently on small devices without losing a lot of features. In the case of Adesso, small and nimble is better than big and feature-rich. The more you program with Adesso, the more you will see that you can build a small efficient application that is also very feature rich.

Another thing to keep in mind when building an Adesso database is that you need to consider the target devices or devices that will be used. If your target device is PPC only, then you have to try to build your app in a way that is nimble, with a small footprint. After all, PPCs are small and don’t have much memory. The easiest way to fail is to build a large database with more than 25 tables, dozens of large plugins, and a large number of big graphic files. It is much better to build a few small applications than one large one. Adesso contains an instantiation/data propagation feature on the server side that allows sharing of schema and records for common elements, so it is easy to build very small apps that run very efficiently on small devices without losing a lot of features. In the case of Adesso, small and nimble is better than big and feature-rich. The more you program with Adesso, the more you will see that you can build a small efficient application that is also very feature rich.

Tables and Fields
To create a new table, click on the New button, enter a name, and select Standard Table. I will explain the other types of tables in a future post.

Once you create your table, you will be presented with a new screen to enter fields for this new table, similar to the one below.

To create a new field, click on the new button. Once you click on the new button, you will then be presented with the field designer window, similar to the one below.

From this screen, you will be able to enter a fieldname, a default field label, a field type (text, integer, float, boolean, date/time, binary), and settings for each type of field. You will also have the option of not allowing a user to save a record without entering something into that field (Is not NULL), indexing the field, is a unique field (on the local database only, since this is an offline system), and a local field. Local fields are used for instances when you don’t want to sync the value in the field back to the server. A typical use for this field are date ranges used for printing Crystal Reports. You don’t really care what the actual value in the field is because its going to be unique for each user. I will explain more about using local fields in a future blog.

I will stop here for now, and the next blog I will use a generic inspection form as the basis for building a simple application using Adesso. We will cover all the field types available in Adesso next.