Low Code configuration

Corteza provides a powerful Low-Code development platform allowing you to setup your application with ease. Corteza Low Code allows you to extend Corteza and support your business needs.

With Corteza Low Code we defines the logical data structure, how the data is displayed, and how it should be visualized. The second part is the automation process, which allows you to implement custom business logic and automate tasks.

If you wish to learn more about a specific topic, refer to the subsections under Integrator Guide  Low Code configuration.

App configuration

Create a new namespace

A namespace is a container for the configuration and the data specific to an application, such as a CRM. A namespace uses modules to define the data structure, pages to define how the data is displayed, and charts to visualize the data.

A namespace can not directly access data from another namespace. If this is needed, consider implementing this using automation to programmatically define the interaction.

To create a new namespace, navigate to your Corteza instance (for example http://latest.cortezaproject.org/) and click on the Low Code application.

app selector

A new screen with a list of all namespaces will appear.

ns create
From there you can:
  • create a new namespace by clicking on the Create new namespace button,

  • edit existing namespaces by clicking on the Edit icon next to the namespace,

  • manage global permissions by clicking on the Permissions button

Click on the Create new namespace button, insert the required parameters, and click on the Save or the Save and close button in the bottom right corner.

ns edit
Table 1. Available namespace parameters:

Name

The namespace name is the human-friendly label that is shown when identifying the namespace. The name should be short and descriptive.

Short name

The short name (slug) is a unique human-friendly system identifier for the namespace that can be used instead of the namespace ID when referencing the namespace.

The short name is usually a variation of the full name that must conform to the following constraints:
  1. start with a character,

  2. contain at most 64 characters,

  3. contain only characters, numbers, _ (underscore), - (dash) or . (dot),

  4. end with a character or a number.

Enable on namespace list

The enabled flag controls if the namespace is enabled and can be accessed. When disabled, the namespace is still visible, but can not be accessed.

Enable on application list

The enabled application flag controls if the namespace should be immediately treated as an application and shown on the app selector.

The namespace logo input allows you to upload a custom logo for the specific namespace. The default logo is the one defined in the theme.

Icon

The namespace icon input allows you to upload a custom icon to use alongside the namespace.

Subtitle

The subtitle is the subtitle of the namespace

Description

The description allows you to provide a more verbose description of the namespace, what it is for, and what kind of data does it contain.

After you’ve created the namespace, you can access it by clicking on the Visit namespace button. At this point, your namespace is empty and doesn’t have any modules, charts, or pages.

ns access ns empty

Create a new module

A module defines the shape of a record and provides a container for the records, such as an account or a contact. A module uses a series for module fields to define the records' structure and a record page to define how the record is presented to the user.

If you’re configuring a new namespace, you are presented with an onboarding screen from where you can click on the Create Module button to create your first module.

If you wish to add additional modules, or you are configuring an already configured namespace, navigate to Admin panel  Modules, and click on the New Module button.

module create
From the module editor screen you can:
  • edit the module metadata,

  • edit module fields for the given module,

  • manage permissions for the given module by clicking on the Permissions button,

  • manage module field permissions for the given module by clicking on the Field permissions button

Table 2. Available module parameters:

Name

The module name is the human friendly label that is shown when identifying the module. The name should be short and descriptive.

Handle

The short name (handle) is a unique human-friendly system identifier that can be used instead of the module ID when referencing the module.

The handle is usually a variation of the full name that must conform to the following constraints:
  1. start with a character,

  2. contain at most 64 characters,

  3. contain only characters, numbers, _ (underscore), - (dash) or . (dot),

  4. end with a character or a number.

Create record pages

A record page defines how the data is presented to the user when viewing, creating and editing records for that module. A record page consists of a series of page blocks that are defined with the page builder.

A record page is tied to the specified module, and to the record it is showing. This allows you to configure the page blocks to react to the currently viewed record for dynamic resource filtering.

If your module does not define a record page, you will not be able to create or update its records through the user interface.

You are still able to view its records, create the records using inline record lists, the API, or an automation.

The record page can be created directly from the module edit screen by clicking on the Create record page button, or from the module list screen by clicking on the Create record page next to a module.

create record page 1 create record page 2

Create charts

A chart defines how a specific modules' records are visualized. A chart is bound to your module and allows you to aggregate and transform the data which is then visualized on a chart.

One chart can only show records of one module.

If you’re configuring a new namespace, you are presented with an onboarding screen from where you can click on the Create Chart button to create your first chart.

If you wish to add additional charts, or you are configuring an already configured namespace, navigate to Admin panel  Charts, and click on the New Chart button.

chart create
Corteza defines three chart categories:

Refer to the chart specific sub-sections for more details

From the chart editor screen you can:
  • edit the chart metadata,

  • edit the charts' report configuration,

  • edit the charts' visual representation.

Create list pages

A list page defines how the application is presented to the user when interacting with it. A list page consists of a series of page blocks that are defined with the page builder.

In contrast to record pages, list pages are general and only bound to the namespace they are on. They are general purpure and used to provide access to different record pages via record lists, dashboards, and other layouts.

If you’re configuring a new namespace, you are presented with an onboarding screen from where you can click on the Build Page button to create your first page.

If you wish to add additional pages, or you are configuring an already configured namespace, navigate to Admin panel  Pages, and click on the New Page button. From there you can click on the Page builder button to enter the page builder

Table 3. Available page parameters:

Page title

The page title is a human-friendly label that is shown when viewing the page and when displaying the page navigation. The name should be short and descriptive.

Handle

The short name (handle) is a unique human-friendly system identifier for the module that can be used instead of the page ID when referencing the page.

The handle is usually a variation of the title that must conform to the following constraints:
  1. start with a character,

  2. contain at most 64 characters,

  3. contain only characters, numbers, _ (underscore), - (dash) or . (dot),

  4. end with a character or a number.

Structure the navigation

The page navigation of your application is generated based on your list pages and their position in the page tree. Navigate to the Admin panel  Pages to see your current pages and how they are structured.

To change the order of pages, drag and drop the page to the desired position.

page tree base page tree reorder page tree reorder view

To create a dropdown menu (a sub-page or a nested page), drag and drop the page inside another page.

page tree base page tree nest page tree nest view

Module fields

A module-field defines the shape of the modules' records (what parameters will we store), what data type specific parameters are, and additional settings to control how the field should behave. Each module can have multiple module fields.

To edit module fields, navigate to Admin panel  Modules, and click on the module you wish to edit. The module fields are listed in the "manage module fields" section bellow the module metadata.

Table 4. A detailed breakdown of module fields:

Name

A field name defines how the value is stored internally and what key is used when accessing the value from an automation.

Once the module is populated with at least one record, the name can not be changed.

The field name should be short and descriptive, limited to 64 characters.

The name field must conform tho the following constraints:
  1. start with a character,

  2. contain at most 64 characters,

  3. contain only characters, numbers, _ (underscore), - (dash) or . (dot),

  4. end with a character or a number.

Title

A field title defines what label is used when presenting the field and the value to the user.

The field name should be short, descriptive, and modeled after the field name. If you omit the title, the name is used instead.

Type

A field type defines what type of data the field will store. For example, if we wish to store the users' email, the field type will be Email.

Refer to the Field type reference section for more details regarding field types.

Base field settings

Base field settings control the general behavior of the module field. Base field settings are accessible directly under the "Attributes" column of the module field list.

When exporting multi-value fields into the CSV format, only the first value is exported.

Type specific field settings

Type-specific field setting control the behavior of the module field based on the field type.

To access type-specific settings, click on the settings icon next to the field type and navigate to the second tab (the one with the same name as the field type).

Refer to module field type reference for details.

Field expressions

Field expressions allow you to define a formula (calculated) field. When a field defines an expression, the value is updated by the system when the result of the expression changes.

The value of a formula field can not be manually changed.

Click on the settings icon next to the field type and navigate to the "General" tab. Check the "field value expression" checkbox and insert the formula into the new input box.

Refer to the field expressions for more details.

field value expr

Field validation

Value sanitizers allow you to implement custom value sanitization (value transformation) before the value is stored. Value validators allow you to implement custom value validation before the value is stored.

Click on the settings icon next to the field type and navigate to the "Validation" tab.

Custom sanitizers are run before the built-in sanitizers. Built-in sanitizers can not be disabled.

Refer to the field expressions for more details.

field validation

Chart configuration

Generic chart configuration

Generic charts include:
  • bar chart,

  • line chart,

  • pie chart,

  • doughnut chart.

Module

The module specifies the data source (what records to use) for the chart. The chart can only show records of the same same namespace that the chart was created in.

Filter

The filter allows you to define what records you wish to show in the chart. For example, we wish to aggregate the leads that you created in the last month.

The dropdown menu provides you with a selection of the most common filters. Click on the "customize filter checkbox" if you wish to modify the selected filter or write your own. Refer to the QL reference for details regarding filter definition.

Y-axis

The y-axis section allows you to configure the axis’s position (left or right), the label, and min-max values.

Dimensions

The dimensions section allows you to specify what field will be used to plot the dimension; the x-axis.

The current implementation only permits one dimension per chart.

You may only use "simple", single-value fields as dimension fields:
  • DateTime

  • Select

  • Number

  • Bool

  • String with rich-text editor disabled.

Field of type DateTime also allows you to define the grouping function.

Metrics

The metric section allows you to specify what field will be used to determine each dimension’s value and how it will be plotted.

You may only use numeric fields as dimension fields. A special count field returns the number of records that match the configuration parameters.

There is a special post-processing function input that allows you to transform the generated values by the reporting system. They are written as simple JavaScript expressions that return a single number based on the two variables.

  • m: the value of the previous dimension entry (the value is undefined for the first entry),

  • n: the value of the current dimension entry.

An example that creates an aggregated chart:
m ? m + n : n

Funnel chart configuration

A funnel chart is constructed from a series of reports where each report may define its dimension and metric. This allows you to piece together reports from different modules, allowing you to visualise the data between multiple modules.

Module

The module specifies the data source (what records to use) for the chart. The chart can only show records of the same same namespace that the chart was created in.

Filter

The filter allows you to define what records you wish to show in the chart. For example, we wish to aggregate the leads that you created in the last month.

The dropdown menu provides you with a selection of the most common filters. Click on the "customize filter checkbox" if you wish to modify the selected filter or write your own. Refer to the QL reference for details regarding filter definition.

Dimensions

The dimensions section allows you to specify what field will be used to plot the dimension.

Only fields of type Select may be used as the dimension field. When you select a field, all of the field options are presented to you. Select which values you wish to show and their order.

Metrics

The metric section allows you to specify what field will be used to determine each dimension’s value.

You may only use numeric fields as dimension fields. A special count field returns the number of records that match the configuration parameters.

Gauge chart configuration

Module

The module specifies the data source (what records to use) for the chart. The chart can only show records of the same same namespace that the chart was created in.

Filter

The filter allows you to define what records you wish to show in the chart. For example, we wish to aggregate the leads that you created in the last month.

The dropdown menu provides you with a selection of the most common filters. Click on the "customize filter checkbox" if you wish to modify the selected filter or write your own. Refer to the QL reference for details regarding filter definition.

Dimensions

The dimensions section allows you to specify what field will be represented on the gauge. Only fields of type Select may be used as the dimension field.

Each dimension has a series of steps that can be added by clicking on the + Add button. Each step defines a label and the maximum value for the step. The colours are defined based on the colour scheme.

Metrics

The metric section allows you to specify how the value of the gauge is calculated.

You may only use numeric fields as dimension fields. A special count field returns the number of records that match the configuration parameters.

There is a special post-processing function input that allows you to transform the generated values by the reporting system. They are written as simple JavaScript expressions that return a single number based on the two variables.

  • m: the value of the previous dimension entry (the value is undefined for the first entry),

  • n: the value of the current dimension entry.

An example of a chart that converts the price to be in thousands:
n / 1000

Page builder

If all page blocks are on the same Y axis (one single row), the page will stretch the blocks to fill the entire page. This is useful when creating record or list pages with a single page block that should span the entire page.

page resize config page resize view

The page builder is used to define the pages' structure using page blocks and a drag-and-drop interface. Each page has a grid of 12 columns and is not limited on the vertical.

page builder empty

Click on the + Add block button to open the page block picker where you can configure and add a new page block. The entire page block reference is available here.

page builder block picker

When you configure and save a page block it is added to the page.

page builder block base

To reposition the page block, simply drag-and-drop it to the desired position.

The page block may be placed anywhere on the X axis, but its Y axis must connect with another page block or with the top of the page. If the position is not valid, or it overlays with another page block, they page builder may automatically adjust the surrounding page blocks to conform to the constraints.

page builder block base
page builder block repos

To resize the page block, simply grab the arrow in the bottom-right corner and resize to your needs. The page block may not exceed the maximum width of 12 columns. The height is not limited.

page builder block base
page builder block resize

By placing a few extra blocks and changing their layout you can create interesting home pages and dashboards like the CRM’s.

page builder example

Field expressions

Value expressions

Value expressions calculate the fields' value based on the provided expression. A value expression is a simple expression that results in a single value. If your field is a multi-value field, you need to return an array of items.

Refer to the Expressions for details on writing expressions.

Currently, you can only use values of the current record. References are not yet supported. If you need to reference data across multiple records, use an automation instead,

Table 5. Available variables in the evaluation context:

old

The old variable refers to the original record. Only set when the field is being updated.

new

The new variable refers to the current record.

<field-name>

A string or an array of strings with current field values. If the field name collides with any of the system-defined variables, access the value via the new["field_name_here"].

Example expression that calculates the price with tax:
price * 1.25
Example expression that generates a full name:
trim(firstName + " " + lastName)
Example of a multi-value expression evaluation:
["foo", "bar", "baz"]

Sanitizers

Sanitisers modify the field value to cleanup (sanitise) the data before it is saved. A sanitiser is a simple expression that results in a single value.

Refer to the Expressions for details on writing expressions.

By their nature, sanitisers should not result in an error. If an error occurs, it is logged in the action log, and the operation continues.

If you define multiple sanitisers, they are run in the specified order.

Example sanitiser that limits the text length:
length(value) > 5 ? substr(value, 0, 5) + "..." : value
Table 6. Available variables in the evaluation context:

value

The value variable refers to the current value.

Validators

Validators validate the field value by raising errors when the value is not valid. A validator is a simple expression that results in a single value, either true or false. The value validation is considered invalid when the expression results in true.

Validators can not change the value.

Built-in field validators can be disabled; required and unique-multi-value validators can not be disabled.

If you define multiple validators, they are run in the specified order.

The field validator stops when the first error occurs. For example, if we define validators A, B, and C, and the validator A raises an error, validators B and C are not evaluated.

Validation expressions are not executed when:
  • the value is not changed,

  • the value is missing.

Use the required flag to check for required values.

Table 7. Available variables in the evaluation context:

value

The value variable refers to the current value.

oldValue

The oldValue variable refers to the original value. Only set when the field is being updated.

values

The values variable refers to all record values (values.<field-name>). You can use this to write validators that are context-aware.

Example validator to check the text length:
length(title) < 5