Object class properties
An Object Class represents the entity or the table, whereas Object Class Properties represents the table columns. The rows in this table are referred to as Objects, whereas the columns and the Object properties.
The description of the table columns is the Object Class Properties. Some examples are Name
, Quantity
or Created Date
. Every object class has some built-in properties and you can add your own properties.
To add a property to an object class you can either:
Right-click on an object class, in either the table or diagram view of the data model designer and select Add property
Click the Add property button when an object class is expanded in the table view of the data model designer.
Each property has a Data Type, which determines the format of the value allowed in the database. Data types include
Simple data types: Boolean, String, Integer, Float, Datetime, Duration, Internet URL, Image URL, and Rich Text
References to Object Classes. For example, the property
Contact.Company
may have Data TypeCompany
. In this case, the reference to aCompany
(theid
of theCompany
) will be saved into the database forContact.Company
.References to Enums. For example, you may define an Enum
Order Status
. The propertyOrder.Status
may have Data TypeOrder Status
. In this case, thevalue
of the Enum-entry will be saved into the database forOrder.Status
.
Each property has a Property Type as either Value or Function. Most properties are values.
Values are stored in the database
Functions are calculated runtime and never stored in the database. For example, you may define a property
Full name
for the Person Object Class, with a Functionreturn Firstname + " " + Lastname
.
Additionally, if the Data Type is a reference to another Object Class or Enum, you may define the Cardinality as either One or Many.
One: This is the default. Only a single ID (for Object Class references) or Value (for Enum references) may be stored in the database for this object class property. This is used for One-to-Many or One-to-One relationships.
Many: Allows storing many IDs (or Values, for Enums references) in this Object Class Property. An array of IDs (or Values) will be stored in the database. You may treat this property as a many-cardinality data source in your Apps or Services in the business logic or UI: You may add or remove references from the array of IDs/Values using Update Object Action Node, and iterate the Object Class Property in a Foreach Action Node or a Iterating Container or Table in your UI. Cardinality Many is used for Many-to-Many relationships.
Many-cardinality: Example of a good use case: Person.Tags
may be a Many-cardinality Object Class Property, referencing the Tag
object class. You only need to store the fact that a person has a set of Tags or not - not e.g. when the Tag was added to the Person. You may add or remove Tag
IDs from Person.Tags
property using the Update Object action node, and you may iterate Person.Tags
in a Foreach action node (similar to a data source with cardinality Many).
Many-cardinality: Example of a not-so-good use case: Project.Members may be a Many-cardinality Object Class Property
Warning
Once you have data stored in an object class, it is not recommended to change Node Name, Data Type, Cardinality or Property Type. Doing so can cause inconsistency in your data.
Built-in properties
These properties are added to each object class and the values are populated when an object is created or updated.
Property | Description |
---|---|
ID | |
Created Date | A read-only datetime property containing the date and time an object was created. When you create a new runtime object the Created Date (and Created By) properties will be set client-side. When the object is persisted these values will be overwritten server-side and the client will be updated to reflect the actual values stored in the database. A database-connected object will be persisted immediately, so the difference between the client-side Created Date and the server-side Created Date should be negligible. After a refresh of the object the server-side Created Date will be visible in the client. |
Update Date | A read-only Datetime property containing the date and time an object was last updated. |
Built-in properties for file object classes
There are additional built-in properties for objects created in a file object class to store file metadata. These are populated automatically when you use the Create file object action node or other action nodes that create objects in file object classes.
Property | Description |
---|---|
File Content URL | A read-only internet URL property containing the URL of the file. Unless the file has been set as Public upon creation, a File Content URL will expire 12 hours after first being loaded into an app. If a file has been set as Public, the URL will not expire. |
File Size | A read-only integer property containing the size of the file in bytes. |
Is Public | |
Mime Type | A read-only string property containing the MIME type (external link) of the file. |
Original File Name | |
Upload Complete | A read-only boolean property indicating if the file has been uploaded in full. A file created in a runtime data source is not considered uploaded until it has been persisted. |
Upload Progress | A read-only float property indicating the progress of the file upload as a percentage. A file created in a runtime data source is not considered uploaded until it has been persisted. |
General properties
Property | Description |
---|---|
Property Name | The name used throughout Appfarm Create to refer to this property. This name can be changed at any time without technical consequences. |
Node Name | The name used by the database to store data for this property. This name should consist only of letters or digits. Warning: Once you have data stored in an object class, it is not recommended to change this value. Doing so can cause inconsistency in your data. |
Description | A longer description of the property. For your own reference. |
Data Type | |
Cardinality | One: This is the default. Only a single ID (for Object Class references) or Value (for Enum references) may be stored in the database for this object class property. This is used for One-to-Many or One-to-One relationships. Many: Allows storing many IDs (or Values, for Enums references) in this Object Class Property. An array of IDs (or Values) will be stored in the database. Cardinality Many is used for Many-to-Many relationships. |
Property Type | A property can be either a primitive value or a function.
|
Value on Create | Available for Value property type. A default value to set for the property when a new object is created. |
Enable Advanced Search | The database will index this property and enable server side search with the Advanced search Action Node. Enabling this will lead to some extra storage space consumption. Advanced search can be enabled for String and Rich Text properties. Note: generating database indices can take 5-15 minutes after enabling advanced search. |
Function |
Data types
All properties must be assigned a data type, defining what kind of data they store.
Data type | Description |
---|---|
Boolean | A truth value |
String | Text with support for all types of characters. |
Integer | A whole number. |
Float | A floating point number with a decimal point. |
Datetime | A timestamp in ISO 8601 format:
|
Duration | |
Internet URL | A website URL. |
Image URL | An image URL. |
Rich Text | |
Enum | |
Reference | A reference to another object class. This creates a one-to-many relationship between the property's object class and the reference object class. |
Boolean labels
Available for Boolean data type. For boolean properties you can define text labels for the true, false, and undefined/null values. You can then bind the property in a Text, Select, or Table component and the appropriate label will be displayed based on the value. Boolean labels can help reduce complexity in the UI designer and can replace the use of enums in some cases.
Property | Description |
---|---|
Label True | A text label to display when the value is true. |
Label False | A text label to display when the value is false. |
Label Undefined | A text label to display when the value is undefined (empty) or null. |
Example
You have an object class Event
with a boolean property Open for registration
. You want to display text in the UI based on the value of that property for each event.
Assign the following boolean labels:
Label True: Open for registration
Label False: Closed for registration
Label Undefined: Not yet open for registration
Then, bind the property to a Text component on an Event details
view in the Ul. The appropriate label will be displayed based on the property's value for that event.
Data validation
You can apply data validation checks to a property. These checks are run when data is persisted. If a check fails, an exception will be thrown. In order to handle this scenario you should use the catch exception action node.
We also recommend enforcing the same validation in your UI in order to provide the best possible user experience.
Property | Description |
---|---|
Read Only | |
Required | A value must always be provided for this property. |
Unique | The value provided must be unique across all objects of this object class. |
Maximum Length | Available for String data type. The maximum number of characters allowed. |
Regular Expression | Available for String data type. A regular expression that the string must match. |
Minimum Value | Available for Integer and Float data types. The minimum value allowed. |
Maximum Value | Available for Integer and Float data types. The maximum value allowed. |
Delete Rule | Available for Reference data type. Control the effect of objects deleted in the referenced object class. The options are:
|
Best practices
The Delete Rule Cascade Delete
can remove complexity from your logic and ensure data consistency, but it should be used with caution. When an object is deleted and the rule is triggered, it will automatically delete all objects that reference the deleted object.
It is typically used when you have a structure with a parent object class and a child object class. When the parent is deleted, you also want to delete all the children. For example, you have two object classes Order and Order Line. Each order line object has a reference to an order object, its parent. In this case Cascade Delete
will ensure that when an order is deleted, all the associated order lines are deleted.
Not all parent-child relationships warrant the use of Cascade Delete
though, particularly when you want to retain history. For example, an Employee may be referenced by many Project objects as the Project owner. If the employee leaves the company and their associated object is deleted, you probably don't want to also delete all their projects which are important company records.
If you're unsure about the which rule to use, keep it set to Delete Constraint
. You can always begin by using action nodes to first delete the child objects and then delete the parent. Then, when you are confident in your data model, you can switch to deleting only the parent and using Cascade Delete
.
GDPR
GDPR settings may be configured per Object class property. Also, see the GDPR section of the Object classes article.
Property | Description |
---|---|
GDPR Classification | A privacy classification for the data stored in this property. The options are:
|
GDPR Details | A description of why this information is collected and stored and how it is used. For your own reference. |
Last updated