Lianja Cloud Server

From Lianjapedia
Jump to: navigation, search

The Lianja Cloud Server is a modern, fast, and flexible cross-platform cloud database Application Server that enables you to share Apps and Data in the Cloud or on premises running on either Linux, Windows or MacOS. Lianja Cloud Server provides an enterprise-class solution for both SMEs and large enterprises.

This article provides a functional overview of the Lianja Cloud Server.


The "Lianja Platform" consists of the following products.

The Lianja Platform consists of:

The Lianja Cloud Server provides a variety of features that are grouped by functionality.

App Deployment Services

The Lianja Web Client is a pure HTML5 JavaScript client that runs Apps developed in the Lianja App Builder using best practices in any HTML5 compatible desktop browser. It uses best of breed technologies to provide a rich and responsive user experience.

Lianja HTML5 JavaScript Web Client

Lianja HTML5 JavaScript Mobile Client

The Lianja Mobile Client is a pure HTML5 JavaScript client that runs Apps developed in the Lianja App Builder using best practices on mobile devices. The Lianja Mobile Client is implemented as a responsive UI and will automatically adjust its appearance on iPhone, iPad, Android Phones and Android Tablets. It incorporates the PhoneGap JavaScript APIs and can be packaged up as a self contained App using the Adobe PhoneGap Build Service that can be submitted to the Apple App Store or Google Play. See pages in the PhoneGap Apps Category for more information.

Data Services

Lianja ODBC data access

Open Database Connectivity (ODBC) is an industry standard interface for accessing data in a heterogeneous environment of relational and non- relational database management systems. Based on the Call Level Interface specification of the SQL Access Group, ODBC provides an open, vendor- neutral way of accessing data. Using the Lianja ODBC Driver in conjunction with the Lianja SQL Server, third party ODBC-aware products have full CRUD (Create, Read, Update, and Delete) access to Lianja data no matter where it resides.

Lianja OData Server

OData is a standardized protocol for creating and consuming data APIs. OData builds on core protocols like HTTP and commonly accepted methodologies like REST. The result is a uniform way to expose full-featured data APIs. The Lianja Cloud Server has built-in support for OData. There is no need to write any custom code to use this functionality, you just point at an OData URI and the Cloud Server will perform the requested OData operation returning data in industry standard JSON format. See this article for details.

Lianja WebSockets Server

WebSockets is an advanced technology that makes it possible to open an interactive communication session between the user's browser and a server. With this API, you can send messages to a server and receive event-driven responses without having to poll the server for a reply. The Lianja Cloud Server has built-in support for writing WebSocket servers in both Visual FoxPro compatible scripting or JavaScript on all supported platforms.

Dynamic Page Services

Dynamic pages contain HTML and page processing directives in the same way as a PHP page does. You use page processing directives to generate HTML code dynamically. Page processing directives are typically enclosed in <% and %> in both Visual FoxPro Server Pages (.rsp files), JavaScript Server Pages (.jssp files) and Python Server Pages (.pysp files).

Visual FoxPro Server Pages (.rsp files)

JavaScript Server Pages (.jssp files)

Python Server Pages (.pysp files)

Server side procedures

Remember that when invoking server side procedures in the web/mobile client, the server knows nothing about the UI or the data state: it is "stateless". What this means is that any required UI information should be passed as arguments to the server side procedure and that the procedure should open the database and tables that it needs. When testing on the desktop, the situation is different as the desktop App is stateful: it has access to the UI, the database is open and the tables may be in an active state.

So, as a best practice you should write any server side procedures that work with data to include not isserver() conditional code with push and pop datasession.

e.g. (Lianja/VFP example)

proc getBalance(database, table, args)
   local result  = 0
   if not isServer()
       push datasession
   open database &database
   use &table   
   // Insert your code here to do what you need to do
   close database
   if not isServer()
         pop datasession
   return result

The following methods can be used to call server side procedures (JavaScript or Lianja/VFP).


A function can be called directly if it is declared in exports.conf.

var result = myfunc();

See also: Server Side Procedures - Parameter Passing Examples


The Lianja.evaluate() method can be used to call a Lianja/VFP function/procedure.

var result = Lianja.evaluate("myproc()");

To call a procedure in a library, prefix the procedure name with the library name and '::'.

var result = Lianja.evaluate("mylib::mylibproc()");

See also: Server Side Procedures - Parameter Passing Examples


The Lianja.evaluateJavascript() method can be used to call a JavaScript function.

var result = Lianja.evaluateJavascript("myfunc()");

The file 'myfunc.js' should be in the app or library directory and contain a function with the same name as the file. If the 'myfunc.js' file does not exist in the app or library directory and the file 'server_functions.js' exists then the function 'myfunc' is assumed to be defined in the 'server_functions.js' file.

To call a function in a library, prefix the function name with the library name and '::'.

var result = Lianja.evaluateJavascript("myjslib::mylibfunc()");

An alternative syntax using the Lianja.evaluate() method is also available:

var result = Lianja.evaluate("javascript:myfunc()");
var result = Lianja.evaluate("javascript:myjslib::mylibfunc()");