In This Chapter
Servoy is unique in that it is both a Rapid Application Development (RAD) tool and a production deployment platform. Written entirely in Java, using industry standard components and protocols, Servoy offers the scalability of an enterprise-level computing platform, while at the same time providing unparalleled developer productivity.
As is the promise of Java, applications developed in Servoy can be deployed to all modern operating systems, including Windows, Mac, Linux, Solaris, etc. without the need to rewrite or recompile code.
Applications written in Servoy can also be deployed to any modern browser, including IE, Firefox, Safari, Opera, Chrome, etc. There is no need to rewrite or tweak an application to ensure a consistent experience across all browsers and no proprietary protocols or browser plug-ins are ever used.
Servoy offers two main client options and any application developed in Servoy can be deployed to either client without the need for any rewrite.
The Smart Client provides a Client-Server setup, where applications assume the native look and feel of the client operating system.
Servoy is NOT a database. There are plenty great databases out there and Servoy can connect any modern RDBMS (and even some that aren't so modern).
Servoy provides a powerful Application Server which brokers connections between clients and back-end resources. This architecture is far more favorable to the 2-tier architecture used by most 4GL tools, where clients connect directly to back-end databases. An application server offers the following advantages over a 2-tier setup.
Servoy applications never have to be installed on the client machine.
Smart Client applications will download and install automatically using Java WebStart technology. In fact, developers can easily roll out new changes to users, with a single click to export a new build to the Application Server. The Application Server does NOT have to be restarted and connected clients do NOT have to be shutdown. Moreover, the Application Server supports versioning for roll-back, roll-forward capability.
Simply put: No Installation. No Maintenance.
A solution is a single application containing forms, methods, variables, and other items built in Servoy Developer.
Solutions can stand alone, or they may also be a module. A module is a solution that is part of another solution. A solution can be specified to be a module, but it is not required to use a solution as a module.
Solutions can be built for a specific purpose or a specific client technology. In Servoy there are 3 client technologies to choose from:
-NG client, which runs in a modern browser and uses angularjs and websockets
-Webclient, which runs in a browser and uses ajax (this client technology is available for backward compatability only)
-Smart client, which runs on computers using java runtime edition and uses an RMI connection
-Servoy mobile, which runs in a browser or embed in phonagap/Cordova, and works with local offline data
Choosing the right type depends on: requirement for online/offline and requirement for access to local hardware (on a computer)
A form is the Servoy object that is used to edit, view, modify, insert, find and delete data. Forms can contain fields, labels, graphics, tabpanels, lines, buttons, portals and shapes - each of which has its own set of design time commands, events and properties.
Forms are normally based on a single database table, which means the data from that table is tied to the form. Forms can also not be linked to any table, meaning data will not be tied to the form.
Forms can also have methods and variables attributed to them, making form a unit of scope in Servoy programming. This means forms can have methods and variables that are within the scope of the form only. Inherited forms can also have methods and variables that are inherited from the parent form as well.
A form element is a Servoy object that can be placed on a form for a purpose. Form elements include:
A dataprovider manages information. Dataproviders are not only database columns, but also include calculations, aggregations, global variables, and form variables.
All of the methods written in Servoy will begin with the word function in the actual
.js page they are written in.
A plugin extends the functionality of Servoy by using the Java programming language. Written in Java, they can be accessed in a solution through scripting. Plugins can add additional functions available to the Servoy programmer and can link to resources outside of Servoy. An API is available to write plugins for Servoy.
The following concepts are related to data management in Servoy.
A table is a preset format of rows (records) and columns (fields) that defines a store of information in a relational database. Data from created or pre-existing tables can be used by one or more forms in a Servoy solution.
A column is an attribute of a database table.
A record is mapped to a single row in a SQL database table.
A foundset is a Servoy object that represents a query from a single database table. Foundsets handle the caching of data for display, but do not need to requery the database to do so.
Any form based on a table in Servoy has a underlying foundset managing the data for it. Forms based on the same table will share a foundset unless they are directed differently through scripting or design time property.
Foundsets can be created, accessed, altered, controlled, and applied through scripting.
relation is a Servoy object used to define the key relationship between two database tables. A standard relationship is defined by the primary key of one table being linked to a foreign key of another. Some features of a relation include:
A dataset is a Servoy object that can hold row and column data. Datasets can be created via scripting, or can be returned by a custom SQL query as well. Unlike foundsets, datasets do not represent a live link to a database resource.
Calculations come in two variants: Stored Calculations and Unstored Calculations: Stored calculation are actual database columns, while unstored calculation only live in memory when the solution is running.
Calculations are calculated when their value is requested, for example when it is displayed in the UI or used in scripting or in another calculation and the value was not calculated yet or has been flagged as invalid. A calculation is flagged as invalidated when a change occurs in one of the dataproviders on which the calculation depends.
If there are UI elements that display the calculation, they will be notified to update themselves and the calculation is executed to calculate the new value.
If the calculation is a stored calculation, the record it is part of will be marked as changed (thus it'll be in the list of edited records) and will be part of next save action.
An aggregation is a value derived from a set of records in a table, they are computed based on a set of values in a column. Similar to calculations, aggregation metadata is stored with the solution, but are based on a table. Aggregations can count, sum, maximum, minimum, and average.
A variable can be defined and holds data at runtime, but is not tied to any database column. Variables can be used as a dataprovider on a form, and can be created in either form scope or global scope.