Embarcadero’s RAD Server Enterprise Mobility Server (EMS) is a turn-key application foundation for rapidly building and deploying services based applications.
RAD Server’s core offerings include automated Delphi and C++ REST/JSON API publishing and management, Enterprise database integration middleware, IoT Edgeware and an array of application services such as User Directory and Authentication services, Push Notifications, Indoor/Outdoor Geolocation and JSON data storage.
RAD Server enables developers to quickly build new application back-ends or migrate existing Delphi or C++ client/server business logic to a modern services based architecture that is open, stateless, secure and scalable. RAD Server is easy to develop, deploy and operate making it ideally suited for ISVs and OEMs building re-deployable solutions.
Two important and useful features included with RAD Server are:
1. It’s important to note that a RAD Server single site license (included in Enterprise Edition) still allows you to deploy a solution based on multiple instances of the RAD Server engine, on multiple physical or virtual servers, for fail-over and load balancing, as long as they are backed by a single instance of the RAD Server database (the included InterBase database instance) which manages the RAD Server license itself.
2. It’s also important to note that Data Storage for Users in the form of JSON name/value pairs is part of the core RAD Server offering. But the use of the included RAD Server InterBase database as a relational DB is subject to a separate license (and also the installation of a separate InterBase server instance).
This post focuses on how to use RAD Server to add JSON data storage, to create some Custom Fields to store additional JSON name-value information for your RAD Server Users.
The included RAD Server InterBase database creates a USERS table.
The RAD Server USERS Table allows you to manage the RAD Server Users data that are stored in your RAD Server Engine (EMS Server). The USERS Table stores information about RAD Server Users in the RAD Server Engine (EMS Server): The RAD Server USERS table columns are listed here:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
/* Table: USERS, Owner: SYSDBA */ CREATE TABLE USERS ( UID INTEGER NOT NULL, TID INTEGER NOT NULL, USERID CHAR(36) NOT NULL, USERNAME VARCHAR(32) NOT NULL, HPASSWORD CHAR(32), SALT CHAR(6), SESSIONID CHAR(32), SESSIONTIME TIMESTAMP, ISACTIVE BOOLEAN DEFAULT TRUE, CREATED TIMESTAMP, LASTMODIFIED TIMESTAMP, CREATOR CHAR(36), UNIQUE (USERID), PRIMARY KEY (UID), CONSTRAINT USERS_UNIQ UNIQUE (USERNAME, TID) ); ALTER TABLE USERS ADD CONSTRAINT TUSERS FOREIGN KEY (TID) REFERENCES TENANTS (TID); /* Meta data descriptions. This syntax requires InterBase 2020 or higher. Some tables require ODS18 and higher */ |
The UID is the USERID is a Unique identifier of a RAD Server User (UserID) in the RAD Server database. For example: “D5FA6E2F-AC92-479E-B917-FBBB7B4E0B45”
The USERNAME is RAD Server User name in the RAD Server database. For example: “Manager1”.
In addition to these default column data of the USERS table, a core RAD Server offering allows you to create Custom Fields for additional stored information for the RAD Server User. This included Data Storage is in the form of JSON name/value pairs.
Let’s now take a look at an example Use Case for needing to do this.
Here we have our sample User data in our RAD Server Users Table:
For our Tenant ID (TID) 1, we have Usernames Manager1, WaitStaff1, and WaitStaff2, each with its own unique USERID.
In our case, our RAD Server in Single-Tenant mode has these 3 users in our Users Table: localhost:8080/users
[{“username”:”Manager1″,”_id”:”D5FA6E2F-AC92-479E-B917-FBBB7B4E0B45″,,
{“username”:”Waitstaff1″,”_id”:”270B823B-2D81-4032-8FE8-6A81E8F9124A”,
{“username”:”Waitstaff2″,”_id”:”2127E78D-EDE1-49AA-8992-F4B8CBE0E1C3″,
For our example, let’s say we need to add Emergency Cell Phone Contact Information for User Manager1:
– Emergency Cell Number for Manager1. (Emergency_Cell)
This is one example of needing to create some Custom Fields to store additional JSON name-value information for the RAD Server User Manager1.
Here’s how we can do this with a Delphi or C++ Builder application.
The RAD Server database stores data about the registered users of your application. You can access this information by using the registered Users Resource as described here.
1. Retrieve the RAD Server Users
First, let’s use the TBackendQuery component to retrieve the RAD Server Users from the RAD Server Engine:
a. Drop a TBackendQuery component to your form.
b. In the Object Inspector, select Users as the BackendService property of the TBackendQuery:
c. Call BackendQuery1.Execute; to return your list of Users from the RAD Server Engine:
1 2 3 4 5 |
procedure TForm1.btnGetUsersClick(Sender: TObject); begin BackendQuery1.ClearResult; BackendQuery1.Execute; end; |
d. The BackendQuery1.JSONResult property collects the raw JSON data that we are querying via the BackendQuery component.
e. Next, you can connect any input control, such as a TMemo or TListView to the BackendQuery1.JSONResult property using the LiveBindings designer to display the JSON data of the RAD Server Users:
2. Adding Custom Fields and Custom Values for our RAD Server Users.
After selecting our User, in this case, we select Manager1, we can now create Custom Fields to store additional JSON name-value information for the RAD Server User Manager1.
We can use the RAD Server TBackendUser component to create our Custom Fields and Custom Values for our RAD Server Users. With the TBackendUser component, you can manage (create, update and delete) the RAD Server Users in the RAD Server Engine, plus also add new Custom Fields to store additional JSON name-value information for the RAD Server Users.
a. Drop a TBackendUsers component on the form.
b. We can use the RAD Server TBackendUsers component to create our Custom Fields and Custom Values for our RAD Server Users. Here is how we can add new Custom Field to store additional JSON name-value information for the RAD Server User, by using a TJSONObject and a TBackendEntityValue, coded like this:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
procedure TForm1.btnAddUpdateCustomFieldClick(Sender: TObject); var LValue: TJSONObject; LResult: TBackendEntityValue; begin LValue := TJSONObject.Create; try LValue.AddPair(EditName.Text, EditValue.Text); BackendUsers1.Users.UpdateUser( EditID.Text, LValue, LResult ); finally LValue.Free; end; end; |
With our Manager1 user selected, clicking the “Add or Update Custon Field / Value” button will add a new Custom Field called Emergency_Cell with Custom Value 212-555-1212 to the Manager1 user, or if the Custom Field Emergency_Cell already exists the Custom Value will be updated.
3. Retrieve Custom Field Values.
Now that we have a new Custom Field and Custom Value information for the RAD Server User Manager1, we can call BackendUsers1.Users.FindUser to retrieve the Custom Value for use in our applications:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
procedure TForm1.btnGetCustomValueClick(Sender: TObject); begin BackendUsers1.Users.FindUser(EditId.Text, procedure(const AObject: TBackendEntityValue; const AJSON: TJSONObject) var LValue: string; begin if AJSON.TryGetValue(EditName.Text, LValue) then EditValue.Text := LValue else ShowMessage(Format('%s not found', [EditName.Text])); end ) end; |
Clicking the “Get Custom Value” for our Custom Field Emergency_Cell, displays the Custom Value in the EditValue.Text:
4. Delete Custom Value
Lastly, let’s see how we can delete the Custom Value from our Custom Field.
a. Here we can also call BackendUsers1.Users.UpdateUser to delete the Custom Value for our Custom Field, by also using a TJSONObject and a TBackendEntityValue, after we set the Custom Value for the Custom Field := TJSONNull.Create, with this code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
procedure TForm1.btnDeleteCustomValueClick(Sender: TObject); var LValue: TJSONObject; LResult: TBackendEntityValue; begin LValue := TJSONObject.Create; try LValue.AddPair(EditName.Text, TJSONNull.Create); BackendUsers1.Users.UpdateUser( EditID.Text, LValue, LResult ); finally LValue.Free; end; end; |
The Delphi 10.4.1 source code for this RAD Server create some Custom Fields to store additional JSON name-value information for your RAD Server Users is here.
Data Storage for Users in the form of JSON name/value pairs is part of the core RAD Server offering!
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition