# Home

Welcome to Daxium Center

<h2 align="center">Daxium Center</h2>

<p align="center">All the useful information about the Daxium-Air solution</p>

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><h4><i class="fa-book-blank">:book-blank:</i></h4></td><td><strong>User Documentation</strong></td><td>All the documentation to build, use and connect Daxium-Air</td><td><a href="https://www.center.daxium-air.com/user-documentation/">https://www.center.daxium-air.com/user-documentation/</a></td><td data-object-fit="fill"><a href="/files/6lWSNLPtkRsD2tM7R24G">/files/6lWSNLPtkRsD2tM7R24G</a></td></tr><tr><td><h4><i class="fa-terminal">:terminal:</i></h4></td><td><strong>API documentation</strong></td><td>The bible for machine to machine communication</td><td><a href="https://www.center.daxium-air.com/api-reference/">https://www.center.daxium-air.com/api-reference/</a></td><td data-object-fit="fill"><a href="/files/Vh3ACecoj04nX7ExoyIN">/files/Vh3ACecoj04nX7ExoyIN</a></td></tr><tr><td><h4><i class="fa-newspaper">:newspaper:</i></h4></td><td><strong>News</strong></td><td>Latest product news, including new features</td><td><a href="https://www.center.daxium-air.com/news/">https://www.center.daxium-air.com/news/</a></td><td data-object-fit="fill"><a href="/files/Aj4ZAHyEm9lpeoqMYesS">/files/Aj4ZAHyEm9lpeoqMYesS</a></td></tr><tr><td><h4><i class="fa-camera-movie">:camera-movie:</i></h4></td><td><strong>Webinars</strong></td><td>Register to future webinars &#x26; access to the replay of previous ones</td><td><a href="https://www.center.daxium-air.com/webinars/">https://www.center.daxium-air.com/webinars/</a></td><td data-object-fit="fill"><a href="/files/2zvhZVAKJ2JjQcKT5JoT">/files/2zvhZVAKJ2JjQcKT5JoT</a></td></tr></tbody></table>

<h2 align="center">Join a community of over 30,000 users</h2>

<p align="center">Located in more than 60 countries around the world</p>

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th><th></th><th></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><h4><i class="fa-linkedin">:linkedin:</i></h4></td><td><strong>LinkedIn</strong></td><td>Follow Daxium-Air on LinkedIn to get the latest news of the company</td><td><a href="https://www.linkedin.com/company/daxium/posts/?feedView=all" class="button primary">Follow us</a></td><td></td></tr><tr><td><h4><i class="fa-youtube">:youtube:</i></h4></td><td><strong>Youtube</strong></td><td>Subscribe to our Youtube channel in order not to miss any new video (webinar replays, customer testimonies, ...)</td><td><a href="https://www.youtube.com/@Daxium" class="button primary">Follow us</a></td><td></td></tr></tbody></table>


# Documentation

Welcome to the Daxium-Air Help Center. Find documentation, tutorials, news and resources to master your platform.

Welcome to the official **Daxium-Air** resource center. Whether you're building your first app, configuring forms, or connecting to external tools, you'll find everything you need here.

{% hint style="success" %}
**New to Daxium-Air?** Start with [What is Daxium-Air?](/user-documentation/start/what-is-daxium-air) to learn the basics.
{% endhint %}

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Getting Started</strong></td><td>Discover the platform, key concepts and workspace setup</td><td></td><td><a href="/pages/CseaU3HsvcPlAIaMY51n">/pages/CseaU3HsvcPlAIaMY51n</a></td></tr><tr><td><strong>Building the Platform</strong></td><td>Manage users, build forms, apps and reports</td><td></td><td><a href="/pages/5hjFLLPFWioli25vmMLb">/pages/5hjFLLPFWioli25vmMLb</a></td></tr><tr><td><strong>Using the Platform</strong></td><td>Navigate views and work with submissions</td><td></td><td><a href="/pages/4lvYlg1wyrm5Zq3Qu3TM">/pages/4lvYlg1wyrm5Zq3Qu3TM</a></td></tr><tr><td><strong>Connecting the Platform</strong></td><td>Export data, BI tools, no-code connectors and APIs</td><td></td><td><a href="/pages/QA6Zp6ulYdAAcGlpfvqf">/pages/QA6Zp6ulYdAAcGlpfvqf</a></td></tr></tbody></table>


# Daxium-Air Glossary

Key concepts and terminology you need to know to work with Daxium-Air.

## API

The Daxium-Air API is a REST interface that lets external systems read and write submissions, lists, users, and reports programmatically.

## ASSIGNMENT

Assignment allows you to assign one or more submissions to a user via a workflow, so the user receives the submission on their mobile.

## AUTOMATION

An automation is an action (send a notification or an email, generate a report, change the value of a field, etc.) triggered automatically when a chosen event occurs and/or under certain conditions. Automations are defined within a form and therefore only affect the forms of this form.

## BACK-OFFICE

The back office is the [Daxium-Air](https://www.daxium-air.com/) web platform connected to your customer account, where you find your customized environment. Depending on your user rights, you can configure forms, analyze data, create submissions, etc.

## BROADCAST

The distribution of submissions on mobile is a way of being able to share data to meet one or more conditions with different groups of users (incompatible with the assignment and therefore with workflows).

## MAP LAYER

It is possible to display your submissions on a map using their positioning. Map layers can enrich these views of lines and shapes with information from your operations.

## CONDITION

A Condition is a rule on a field or lists of fields within an associated values. For the condition to be satisfied, all field values must be validated on the field on which condition was applied.

## CUSTOM TITLE

This option is similar to the representation but in a more limited way, because it includes the data on a single line in the tabs of your cards but also on the dots in map view. By default, the value displayed in the tab corresponds to: submission No. xxxxx

## DASHBOARD

A dashboard is a control and management tool. It is a visual representation of important information and performance indicators on a single screen through graphs, charts, etc. This makes it possible to measure the performance of a company and evaluate the achievement of objectives.

## FIELD

A field has a predefined type (number, text, email, photo, file, etc) which allows you to indicate the type of information that the user must enter in their submission. The fields are configured in the form.

## FIELD PERMISSIONS

In a form, the permission of a field is used to configure 3 parameters: is the field visible to users? Can the field be modified? Is the field required?

## FORM

A form is a digital tool made up of a series of fields to be completed, which you have configured yourself on Daxium-Air according to your needs, in order to collect data.

## FUNCTIONAL STATUS

The elements of a list can have a color. When this list is used in a form and this list is configured in the form parameters as the functional status, this allows the cards to be colored in the card view and the mixed view, for example.

## GROUP

A user group is a workspace-scoped collection of users sharing the same access rights and permissions on Daxium-Air web and mobile. Each workspace defines its own groups; users gain access to a workspace through their group memberships.

## GROUP PERMISSIONS

This menu lists all the permissions that are available by license type (administrator, mobile, web contributor or web reader) and it is possible to add permissions to user groups. Thus, a user combines the permissions of his license and his group.

## INTEGRATION

An integration is a connection between Daxium-Air and an external system to exchange data, built using webhooks, the API, planned exports, or no-code connectors like Make.

## LICENSE

The capability tier attached to a User — Administrator, Mobile, Web Contributor or Web Reader — that determines which actions the User can perform. A User's effective rights combine their License with the Permissions granted to their Groups.

## LIST

A reusable, optionally hierarchical set of values referenced by list-typed Fields. Each item may carry a label, an external id, a Functional status color, a URL and an image, and a List supports up to 100,000 items.

## LISTING MODE

When configuring a Report, if **Listing mode** is checked, the Report will include several submissions. Otherwise, the Report will be based on a single submission. If **Listing mode** is unchecked but the submission has one or more Relations, only the information from the parent submission appears. To include all the information (parent and children) in the Report, check **Listing mode**.

## MASS UPDATE

This action can only be carried out on the web to modify the field(s) of the selected submission(s). This only works on submissions in the latest version of the form.

## MIGRATION

Migration is the action of moving submissions from an earlier version of a form to a later one. When a form is modified and re-activated, a new version is created; existing submissions remain in their original version until migrated. See [Migrations](/user-documentation/build/building-forms/migrations) for the full workflow.

## MODEL

A Model is a Word or Excel file used as a template, that can contain the information from one or more submissions. The result is a Report.

## NFC TAG

An NFC tag allows, for example, to automatically fill in the fields of a form or to open a form.

## PRE-FILL

Pre-populating data saves your agents time.

Each Field can be made pre-fillable; to do this, enable the **Pre-fill** option in the Advanced options. Users, on mobile or web, can then fill in the information they want and each submission created subsequently will contain this information.

## REPORT

A report is a file (Word, Excel, or PowerPoint) generated by Daxium-Air by merging submission data into a Model. Reports can be generated manually from a submission, automatically on a trigger, or on a recurring schedule. A report based on a single submission uses the submission's own data; a report in Listing mode aggregates data from multiple submissions.

## RELATION

A relation field allows you to link two forms together in one direction. The one that contains the relation field is considered the main form, often called parent, and the one that is covered by the relation can be called a sub-form, or child form.

## REPRESENTATION

The representation of data allows you to customize the preview of a submission on the web as well as on mobile. It is recommended to systematically configure the representation of the form.

This feature is particularly useful during relations.

## SCHEDULED EXPORT

Scheduled exports allow you to connect Daxium-Air and Power BI in order to update dashboards (up to 4 times per day).

## SHORTCUT

This web functionality offers you a way to optimize your navigation on Daxium-Air by allowing you to directly access the elements consulted on a recurring basis (shortcut to a customized application, parameters, forms, submissions, dashboard, etc.).

A shortcut can be visible to all users, or one to one or more groups.

## SUBMISSION

A submission is a form with at least one field completed by a user, via the web platform or the mobile app. Your submissions form the dataset you produce, query and report on.

## SUBSCRIPTION

A bundle of Licenses purchased by your organisation and allocated to your Users — for example, 50 Mobile Licenses and 10 Web Contributor Licenses.

## SYSTEM NAME

In a form, the system name of a field is different from the label because it does not appear for mobile users. The system name is useful for configurator (administrator users), particularly when linking with Word, Excel or even Power BI reports.

It is mandatory to give a unique system name. Special characters other than "\_" are not authorized. We strongly recommend using one of the following nomenclatures:

*1. system\_name*

*2. systemname*

*3. SystemName*

*4. System\_Name*

## TASK

If the "Allow creation of tasks from this form" is checked, then it will be possible to view each submission in the calendar view, on the web as well as on mobile.

Attention: Tasks are incompatible with workflows and broadcasts.

## USER

A Daxium-Air user has an identification email, a password as well as a type of license in order to connect. It can belong to one or more user groups.

## VERSION

Every time a form is edited and reactivated, Daxium-Air creates a new version of it. Existing submissions stay on the version they were created in until they are migrated. For example, if you add a field to a form, existing submissions will not show that field until they are migrated to the new version. See [Migrations](/user-documentation/build/building-forms/migrations) for the full workflow.

## WEBHOOK

A webhook allows you to automatically send submissions to HTTP endpoints in JSON format at certain points in the submission lifecycle. Webhook configuration is done at the automation level.

## WORDING

In a form, the wording of a field is its name, that is to say what will appear when a user fills out their form, on mobile or on the web.

## WORKFLOW

A Workflow defines the life cycle of a submission through states. Each state can route the submission to a User, who receives it on their mobile to continue work, so a team can take turns on the same submission as it moves between states.

## WORKSPACE

A workspace is a dedicated Daxium-Air environment containing its own forms, lists, reports, submissions, groups, and apps. A user can work in several workspaces.


# What is Daxium Air?

An introduction to Daxium-Air, the no-code platform for digitizing field operations.

Daxium-Air is a no-code platform for digitizing field operations. It lets any company replace paper forms and manual spreadsheets with structured mobile and web workflows — capturing data accurately in the field, routing it through configurable statuses, and turning it into reports.

**Who it is for:** Daxium-Air is designed for three types of users:

* **Field teams** (technicians, inspectors, sales representatives) — fill in forms on the mobile app.
* **Managers and analysts** — consult views, dashboards, and generated reports.
* **Administrators** — the form builders who configure the platform from the web back-office.

## Key concepts

* **Forms** — The data structure your field teams fill in on mobile
* **Applications** — A set of forms grouped into a mobile experience
* **Views** — How data is visualized on the web platform (table, calendar, gallery, map)
* **Reports** — Word, Excel or PowerPoint documents generated from submission data
* **Workflows** — Status-based routing and assignment of submissions

## Common use cases

Daxium-Air is used across industries wherever structured field data matters:

* **Inspection rounds** — technicians complete checklists on site; supervisors track status in real time from the web.
* **Asset tracking** — each piece of equipment has its own submission; history and photos are attached directly to it.
* **Sales follow-up** — sales reps log visit reports from the field; managers consult the calendar view or generate pipeline exports.
* **Quality control** — non-conformities are captured on mobile with photos, assigned to a corrective-action workflow, and closed out with a signed report.

Daxium-Air runs on the web (all modern browsers) and on mobile (iOS and Android).


# Login & App Download

Log in to the Daxium-Air web platform and install the mobile application.

## Login

You can access Daxium-Air by entering [www.daxium-air.com](http://www.daxium-air.com/) in your browser:

![](/files/kcJZNbGHdNUxzKHRdUm6)

After entering your username and password, you land on the home screen

![](/files/KB8wnTUd2jmZ6guy6u28)

The context menu on the left allows you to navigate through the different features:

* **Home** redirects to the page visible above
* **Submissions** allows you to manage the submissions completed by users
* **Tasks** allows you to manage user tasks
* **Help** provides access to online documentation

{% hint style="info" %}
Forgotten your password? See [Password Reset](/user-documentation/support/supporting-your-users/password-reset).
{% endhint %}

## Install the mobile application

The first time each user logs in to the mobile application, they will be prompted to set a personal PIN code. This PIN is useful when several users share the same device: instead of re-entering their full credentials every time they need to log back in on the shared device, they can simply enter their personal PIN.

{% tabs %}
{% tab title="iOS" %}

#### Download the app

<div align="left"><img src="/files/RIII1fzAD0FLO6S8Shx0" alt="" width="375"></div>

#### Log in the app

<div align="left"><img src="/files/e61LKHW9QH9q7ONYtswD" alt="" width="375"></div>
{% endtab %}

{% tab title="Android" %}

#### Download the app

<div align="left"><img src="/files/l5HyigeyHF01h9pwl2gB" alt="" width="375"></div>

#### Log in the app

<div align="left"><img src="/files/hbNT7WJsCTHFHuEwozqZ" alt="" width="375"></div>
{% endtab %}
{% endtabs %}


# Workspace Setup

How to set up and configure your Daxium-Air workspace, including multilingual settings.

*Example of a workspace configured with multiple shortcuts:*

![](/files/QJ0OLUNIEuZYESwccycP)

## General settings

This interface allows you to modify and add simple elements, in order to customize your workspace.

To access this interface:

1. Click on the setting icon at the top right of your screen
2. Then click on General Information

![](/files/ShbBMFgK5ahqHVBd32b5)

The general settings interface is then presented to you.

![](/files/lgAJM6HlAZ43a3NGr2Mz)

The following items are available:

1. Workspace name: name that appears in the different workspace interfaces
2. Short name: name that appears in the workspace URL
3. Workspace description
4. Time Zone: field that allows you to select the time zone that governs the workspace
5. Icon: allows you to display visual identification between several workspaces within the same company
6. Enable Maps on Android: Enables the map feature for Android devices
7. Images: allows you to choose the logo and the workspace's home screen wallpaper
8. Maximum number of forms
9. Active? : must be checked for the workspace to be accessible by users

{% hint style="warning" %}
**Maximum number of forms** is deprecated and will be removed in a future release.
{% endhint %}

## Themes

It is also possible to configure the theme of the site: the colors of the frame elements and the font. There is also a selection of predefined themes available to you.

![](/files/ENqmhFP3vWdZxKPlaka1)

## Multilingual

Daxium-Air supports multiple languages, allowing you to deliver a fully localized experience to your users. Once additional languages are configured on your workspace, you can translate field names in your forms, list labels, shortcuts, and mobile apps — so each user sees the platform in their own language. To activate a language, please reach out to <support@daxium.com> and copy your account manager.

![](/files/r8z7UVdLsZsv4pipvzNY)


# Managing Users

Manage users, groups and permissions to control access to your Daxium-Air workspace.

Control who can access your workspace and what they can do. Daxium-Air provides a flexible user management system based on users, groups and permissions.

* [**Subscriptions, Licencing & SSO**](/user-documentation/build/managing-users/subscriptions-licencing-sso) — manage subscription plans, licence allocation and single sign-on configuration.
* [**Users**](/user-documentation/build/managing-users/users) — create, edit and deactivate individual user accounts.
* [**Groups**](/user-documentation/build/managing-users/groups) — organise users into groups to simplify permission management.
* [**Groups Permissions**](/user-documentation/build/managing-users/groups-permissions) — define what each group can see and do within your workspace.


# Subscriptions, Licencing, SSO

Overview of user management in Daxium-Air — subscriptions, licences and SSO.

## Licence

A licence is attributed to one user and grants them access to Daxium-Air. There are four types of licences:

* **Administrator** — full access to the platform, including configuration and user management
* **Mobile** — access to the mobile app only
* **Web Contributor** — access to the web platform with rights to create and edit Submissions
* **Web Reader** — read-only access to the web platform

## Subscription

A subscription is a bundle of licences purchased by your organisation. For example, a subscription could include 50 Mobile licences and 10 Web Contributor licences, allocated across your users based on their needs.

To purchase or adjust your subscription, contact your Daxium point of contact.

## SSO (Single Sign-On)

Single Sign-On (SSO) is an authentication method that allows users to log in to Daxium-Air using their existing organisation credentials, rather than managing a separate username and password. Once configured, users are redirected to their organisation's identity provider to authenticate, and are then granted access to the platform seamlessly.

Daxium-Air supports two standard SSO protocols:

* **SAML 2.0** — widely used in enterprise environments, typically with identity providers such as Azure AD, Okta, or ADFS
* **OIDC (OpenID Connect)** — a modern, OAuth 2.0-based protocol supported by most cloud identity providers

To set up SSO on your workspace, contact your Daxium point of contact.

{% hint style="info" %}
**Please note:** User provisioning (automatic account creation from your identity provider) and role mapping (automatic assignment of permissions based on identity provider groups) are not supported. Users must be created manually in Daxium-Air, and their licences and permissions assigned accordingly.
{% endhint %}


# Users

How to create, edit and manage individual user accounts in Daxium-Air.

## Users

You can access the user menu by clicking on **Users** in the left-hand menu bar. You will see the list of users in your workspace, as well as their information.

![](/files/OJ32fgZtayCLns6pRLxn)

To create a user, click the **New** button at the top right. To modify a user, click on their row. You will then see a screen like this:

![](/files/ZEMd4ZpWWzovGjlHor4U)

The first and last name identify the user; the connection system uses email and password, which the administrator can modify at any time.

The password is not displayed and cannot be recovered — only reset.

Changing a user's language will update the web interface language on their next login. The language on mobile depends on the device's operating system.

To deactivate a user, uncheck the **Active** box — they will no longer be able to log in. You can use this to manage your user fleet without deleting accounts.

### System groups

{% hint style="info" %}
**System groups** are built-in roles that grant predefined sets of rights. **Custom groups** are groups you define yourself to organise users and manage permissions — see [Groups](/user-documentation/build/managing-users/groups) and [Groups Permissions](/user-documentation/build/managing-users/groups-permissions).
{% endhint %}

The following system groups are available:

* **Administrator**: full access to the workspace — use, configuration and back-office management.
* **Web Reader**: restricted web access — read and visualise submissions only. No configuration rights.
* **Contributing Web User**: can read, create, edit and delete submissions but cannot configure the workspace.
* **Mobile User**: enables authentication on the mobile application.

{% hint style="info" %}
A user can hold multiple system groups simultaneously — for example, both **Mobile User** and **Contributing Web User**.
{% endhint %}

{% hint style="warning" %}
Assigning **Web User** rights to an **Administrator** is redundant — the Administrator role already includes full web access.
{% endhint %}

Custom groups you have defined yourself appear under **Your groups**. Assign one or more per user to organise your team and apply the corresponding permissions (see [Groups](/user-documentation/build/managing-users/groups) and [Groups Permissions](/user-documentation/build/managing-users/groups-permissions)).

Remember to save your changes before leaving the page.

## User Import

For adding a large number of users at once, use the **Import** function. A template file is available after clicking **Import**.

![](/files/ZUwEKiL2b5XMMiffUjpK)

Once your CSV file is correctly configured, click **Upload** then **Send file**.

A summary is displayed after loading, confirming the import completed successfully.

{% hint style="warning" %}
The expected format is **case sensitive**. Specify the language in lower case — for example, `fr` and not `FR`.
{% endhint %}


# Groups

Organize users into groups to simplify permission management and data access.

Groups allow you to organize users logically — by team, region, department or any structure that fits your organization.

## Why use groups?

* **Simplify permissions** — Assign permissions to a group instead of individual users
* **Control data visibility** — Restrict which submissions a group can see
* **Streamline workflows** — Automatically assign [tasks](/user-documentation/build/building-forms/tasks) to the right group via [Workflow & Assignation](/user-documentation/build/building-forms/workflow-and-assignation)

## Creating a group

1. Go to the settings, under **Users and rights > Groups**
2. Click **Add group**
3. Name the group and add members
4. Configure the group's permissions

You can access group management in the menu on the left by clicking on "Settings" and "Groups". To modify a group, click on the line of the one that interests you. If you want to create a new one, click "New" at the top right of the page.

![](/files/5otBXCwgAhgZW69geoyL)

The elements that must be completed are the name of the group and its description. You can choose from among the users already created which ones (or one) will be part of this group. In the [form settings](/user-documentation/build/building-forms/general-concepts), it is possible to check the "Restrict access to the form" box. If you have done this in one or more forms, you can authorize or not authorize access to the form for this group in the top right part.

You will see all other forms accessible to all users at the bottom right.

## Access authorization

It is possible to limit the groups to which a user has access. This restriction is set in each group.

If a user does not have access to a group:

* They cannot see users in this group
* They cannot see the submissions created by users in this group
* They cannot see the tasks assigned to users in this group
* They cannot see the tasks linked to submissions belonging to users in this group

If a user is not part of any groups with group access restrictions, they have access to all groups.

If a user is part of several groups, at least one of which has access restrictions, the rights are cumulative.

But the user will not have access to all the groups even if one of his groups does not have access restrictions.

![](/files/7Fx4tgW7PMJyBlcyyUYA)

### Special cases

{% hint style="warning" %}
The following configurations can cause unexpected access issues. Review them carefully before applying group restrictions.
{% endhint %}

1. **A user must always retain access to their own group.** If a restriction is configured such that a user cannot access their own group, they will be unable to log in.
2. **Avoid removing a group's access to itself.** If you do so:
   * Form access rights granted by this group do not apply on mobile (but do apply on the web).
   * Group permissions (task creation, user management, etc.) still apply to the user.
3. **An administrator with group restrictions can only see a subset of groups.** This has two consequences:
   * Newly created groups do not appear in their list of allowed groups.
   * They cannot grant themselves access rights to see those new groups.

{% hint style="info" %}
We recommend keeping at least one administrator with no group restrictions. This admin sees all existing and new groups and users without limitation.
{% endhint %}


# Groups Permissions

Configure fine-grained permissions for groups to control access to data and features.

Permissions in Daxium-Air are managed at the group level. Each group can be granted specific access rights to structures.

## Configuring group permissions

To manage the permissions of each group, click on "Settings" then on "Group permissions" in the menu on the left.

![](/files/u8Bz6MUqnRIVYzARYlKw)

You can check the boxes in the column of the group you are interested in to assign additional permissions that will not already be included with the system group assigned to this user. The permissions of the system group and the permissions of the group you created will therefore add up.

Remember to save your changes before leaving the web page.

## How permissions work

* Permissions are **additive** — if a user belongs to multiple groups, they receive the combined permissions
* Permissions can't be scoped to specific **structures** (forms) and **views**
* Some permissions can be further restricted with [**conditions**](/user-documentation/build/building-forms/conditions) (e.g., only see your own submissions)

{% hint style="warning" %}
Changes to group permissions take effect immediately for all members of the group.
{% endhint %}


# Building Forms

Design powerful data collection forms with fields, conditions, workflows and automations.

Forms (called **structures** in Daxium-Air) are the foundation of your platform. They define what data your field teams collect and how it is processed.

This section covers everything from basic field configuration to advanced workflow automation.

***

## How to build your project?

Asking the right questions is essential at the start of a project and we will guide you in asking those that will be useful to configure as best as possible in Daxium-Air.

If you have chosen Daxium-Air, this means that you want to digitize your forms.

As part of large-scale digitalization, the first thing to establish is a system name.

This system name will apply to:

* The names of forms, lists and reports to create a logical and visual link between each functionality
* System names to also ensure logic but above all harmony between the forms

To know how to start your form, you can ask yourself the following questions:

For whom? For what? How much?

## For whom?

If you want your form to address people individually, that is to say, for only one person to work on a form at a time, then assign the form to your user's mobile seems more suitable. Therefore, setting up a [workflow with assignment](/user-documentation/build/building-forms/workflow-and-assignation) will be the solution.

Example: I want agent A to make a type 3 intervention (Type 3 intervention being a form that I want to digitize), without time limit.

In addition, if you want to add a time dimension and view the files on the web as well as on mobile through a calendar, the [task model](/user-documentation/build/building-forms/tasks) will meet your needs.

If you want your form to address a large population, or even several different populations, without ever targeting a specific person, [distribution](/user-documentation/build/building-forms/submission-broadcast) can be a solution. It transmits files to one or more groups of users.

## For what?

Is the form content intended to be filled out by your users or do you want to import a database (example: a catalog) and share it with your users?

In one case, you will want to make filling out easy and quick and in another case, you will want to make information easily accessible.

In any case, you will be able to vary the display of your fields, divide them into pages, or even divide your process into several forms and then link them using a [relationship](/user-documentation/build/building-forms/fields/relations).

## How much?

In order to best adapt the handling of the Daxium-Air tool and especially the use of your form(s), it is important to ask yourself how often your users will use Daxium-Air? How many forms will they have to fill out each time? What information is redundant and what information is never changed?

Example: An agent must report anomalies during their inspection visit. Rather than having a form containing inspection fields and anomaly fields, you can split it into a main inspection form and an anomaly declaration sub-form. The agent can then declare as many anomalies as they wish, respecting the format imposed by the fields, while linking these anomalies to their inspection.

## Correspondence table of needs vs. functionalities

![](/files/y0RZ1mSPNNlNjrxbV7fZ)

{% hint style="info" %}
**Where to start:** Read [General Concepts](/user-documentation/build/building-forms/general-concepts) to plan your form structure, then explore the [Fields](/user-documentation/build/building-forms/fields) section to add data capture to your forms.
{% endhint %}


# General Concepts

Overview of the form builder and key concepts for building structures in Daxium-Air.

A form is the backbone of every Daxium-Air application. It defines the structure of the data you collect — the list of fields, their types, and their display rules. You may also hear it referred to as a **module** or a **checklist** depending on the context. Administrators are the ones who design and configure forms; field users only interact with the submissions created from them.

A form allows you to collect information whose type is defined beforehand.

## Creation

To access the form creation page, you must first click on the icon below:

![](/files/idt2nxFIcKjjVfVO8NaY)

This gives you access to various settings menus, including the "Data and Forms" and the "Forms" sub-menu, present on the left as well as in the center of the page:

![](/files/DAP6DJVF5kP61XjYZgb5)

After clicking on "Forms", you can click on "New" :

![](/files/K8sAoT2fTrDH3RduQWoH)

The first step is to name the form at the top right. A form is made up of fields of different types. You can drag the desired field into the frame in the position you want or press the little “+” when you hover over the field with the mouse, it will then be added after the others.

![](/files/3lkL18PxI0h8bh264v3Y)

The **”system name”** of the fields is what identifies the field in the system, it must be unique within a form and related forms. It is used in [reports](/user-documentation/build/building-the-reporting/syntax-functions), [conditions](/user-documentation/build/building-forms/conditions) and adjustable parameters depending on the content of the fields (emailing for example).

The **”wording”** is what the user sees. user, on the web or on mobile.

![](/files/Ez62ghUjVrZj0aiPJO4B)

The **”permissions”** are divided into 3 parts:

* **VISIBLE** allows you to display or not a field in the mobile or web form but it will always be visible on the form configuration page where we are
* **EDITABLE** allows the user to modify the value of the field
* **REQUIRED** will require the entry of the field in the form to save it

## Saving & Activating functions

Once your form is complete, you can save it:

![](/files/O6XuQfjFPyjHIBXW6lWI)

“**Activate**” the form will allow users to get the latest [version](/user-documentation/components-concepts-terminology#version) of the form:

![](/files/gmfrFCrpkjMxXx3Rnvio)

## Pagination

To set up pagination, simply add tabs to the form design. To do this you must click on the "+" in the tab bar.

You then simply need to drag and drop the fields into the appropriate tabs. You can change the name of a page by clicking on the corresponding tab.

In the advanced settings of the form, an option allows you to define whether "moving to the next page is possible in data validation".

If this option is checked, users will be able to freely navigate the form.

Otherwise, the current page must be valid (all required fields are completed, email addresses are correctly formatted, etc.) in order to move on to the next page. Navigation is therefore done in a linear manner. It is no longer possible to skip pages, you must use the buttons to go to the next page.

### **To know**

* Page names are limited to 50 characters. That said, it risks being shortened if it is too long. We advise you not to exceed 20 characters.
* The number of pages is limited to 25 per form.
* The paging system works on the web, iOS and the Android app.
* The data validation option per page is set at the form level and not page by page (which is different from what existed on page breaks).

## Settings

A Daxium-Air form can have several options directly accessible in the form designer, organised into the following sections.

### General information

| Setting         | Description                                                                                                                            |
| --------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| **Form name**   | The name of your form                                                                                                                  |
| **Icon**        | Visible on mobile and in the Web platform under Submissions. Optional and purely aesthetic. Recommended size: 25x25 px (PNG supported) |
| **Color**       | Only visible in advanced options for certain features                                                                                  |
| **Description** | Describes what the form is used for                                                                                                    |
| **Tags**        | Keywords to help find the form in a list                                                                                               |

### Data representation

| Setting                       | Description                                                                                                                                                                                                                                                            |
| ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Customized title**          | Simplified representation on card tabs                                                                                                                                                                                                                                 |
| **User assigned to the form** | Defines which user must act on the form. Assignees receive real-time updates to their files. See [Workflow & Assignation](/user-documentation/build/building-forms/workflow-and-assignation)                                                                           |
| **Default location**          | Sets the native position for each file creation on mobile. Can be set to native position (GPS coordinates), a location field, or a formula field of location type                                                                                                      |
| **Default image**             | Defines which image represents the form in the representation view and mosaic view                                                                                                                                                                                     |
| **Functional Status**         | Applies a color border in [Mixed View](/user-documentation/use/views/mixed) (web) and My Cards (mobile) via a color-coded list. If a [workflow](/user-documentation/build/building-forms/workflow-and-assignation) is configured, the functional status is based on it |

### Advanced settings

| Setting                         | Description                                                                                                                                                                 |
| ------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **First level form**            | Hides or displays the form on mobile. Used when the form is filled via a relationship field in another form                                                                 |
| **Restrict access to the form** | Blocks access for all users. Access must then be granted via a [group](/user-documentation/build/managing-users/groups). Admin users are never affected by this restriction |
| **Duplication of submissions**  | Restricts which fields are copied when a submission is duplicated                                                                                                           |
| **Last active version**         | Reverts the form to its last active version, undoing any unsaved changes                                                                                                    |

### Task Template

Enabling this option defines the form as a [task](/user-documentation/build/building-forms/tasks) template. The following additional settings become available:

| Setting                               | Description                                                              |
| ------------------------------------- | ------------------------------------------------------------------------ |
| **Start date**                        | The form field used as the task start date (must be a date + time field) |
| **End date**                          | The form field used as the task end date (must be a date + time field)   |
| **Delay period**                      | Defines how long after the end date a task is considered completed late  |
| **Fields accessible during creation** | Fields that must be filled in when creating the task in the back office  |


# Fields

Learn about the different field types available in the Daxium-Air form builder.

Fields are the building blocks of your forms. Daxium-Air offers a wide range of field types to capture any kind of data.

**Presentation fields** display static content to all users on every submission — titles, text blocks and logos. Covered in [Simple Fields](/user-documentation/build/building-forms/fields/simple-fields).

**Data fields** capture user input: text, numbers, dates, durations, locations, emails, phone numbers, photos, files, signatures and list selections. Also covered in [Simple Fields](/user-documentation/build/building-forms/fields/simple-fields).

**Formulas** are calculated fields that derive a value from other fields using JavaScript. See [Formulas](/user-documentation/build/building-forms/fields/formulas).

**Relations** link submissions across forms, enabling parent-child structures and sub-forms. See [Relations](/user-documentation/build/building-forms/fields/relations).

**Field options** add extra behaviors to individual fields — pre-filling, advanced search and OCR recognition. See [Field Options](/user-documentation/build/building-forms/field-options).


# Simple Fields

Standard field types for capturing text, numbers, dates, photos and more.

## Presentation

*This category allows you to show the same information on all submissions.*

### Title

The title is entered in the field label in the general options. This information is visible to the user on mobile as well as on the web.

### Static text

* **Rich text:** advanced mode with some language-based formatting options [Markdown](https://fr.wikipedia.org/wiki/Markdown)
* **Edit text:** allows you to enter the text that will be displayed to users (required)

### Logo

* **Band type logo:** allows the image to be displayed across the entire width of the screen
* **Upload:** choice of the image that will be displayed in the form (required)
* **Hidden on the web form:** allows you to ensure that the image is only displayed on mobile devices.

## Data

*This category allows the user to enter information, the type of which has been chosen.*

### Text

* **Rich text:** advanced mode with some language-based formatting options [Markdown](https://fr.wikipedia.org/wiki/Markdown).
* **Default value:** applies the value entered in the field.
* **Linked list:** allows you to offer auto-completion when the user types the first character of an element in the chosen [list](/user-documentation/build/building-forms/lists-management).
* **Barcode scan:** allows mobile users to use the camera to scan a code that will be entered in the text field.
* **External scan:** allows mobile to copy data from a Bluetooth scanner.
* Texts are limited to 5,000 characters.

### Number

* **Format**: conversion of data into a digital format.
* **Minimum value:** sets a lower limit on accepted values.
* **Maximum value:** sets an upper limit on accepted values.
* **Default value:** applies the value entered in the field
* We follow the standard [IEEE 754](https://ieeexplore.ieee.org/xpl/mostRecentIssue.jsp?punumber=4610933). The precision of the value depends on its format. For an integer, the value must be between -9223372036854775808 and 9223372036854775807, or between -2^63 and (2^63)-1. For a decimal number, the value is truncated to the first 14 significant numbers.

### Boolean (True/False)

**Default value:** applies the value entered in the field.

### Date

**Format:** allows you to define whether you only use the date or whether you also add the time.

Date fields are saved in [Unix Timestamp](https://fr.wikipedia.org/wiki/Heure_Unix).

### Duration

**Format:** min:sec:micro or min:sec

### Location

This field allows you to collect an address and GPS coordinates (WGS 84 format) using Google Maps. There are three ways to fill it in:

* **Pick a location from Google Maps** — select a point directly on the map.
* **Enter an address** — when the submission is saved, Daxium-Air resolves the address to its GPS coordinates through the Google Maps API.
* **Enter the GPS coordinates** — when you click save, Daxium-Air returns the matching address next to them through Google Maps.

### Email

**Default value:** applies the value entered in the field.

Email fields must comply with [RFC3696](https://tools.ietf.org/html/rfc3696) and [RFC2821](https://www.ietf.org/rfc/rfc2821.txt).

### Phone

**Default value:** Choose the format of the number according to the country (by acting on the flag) and apply the value entered in the field.

### Picture

* **Format:** Choice of resolution to resize the image.
  * **Bass:** 640x480
  * **Normal:** 1024x768
  * **High:** 2048x1536
  * **Original:** Original resolution (defined in mobile settings) - limited to 80 MB

This drop-down menu allows you to choose the resolution for resizing an image taken by a mobile device. It is strongly recommended to reduce the default resolution of smartphone photos, this is very high and therefore increases the file transfer time (file size).

* **Image limit:** sets the maximum number of images that can be linked to the field.
* **File name:** allows you to include a name for the file.

### File

**File name:** allows you to include a name for the file

* Here is the list of **authorized formats:** Image/gif, image/jpeg, image/png, image/tiff, image/x-png
* Text/csv, text/plain, text/xml
* Video/mpeg, video/mp4, video/x-msvideo
* Application/zip, application/pdf, application/x-rar-compressed, application/x-tar, application/x-7z-compressed, application/x-zip-compressed
* File size should not exceed 80 MB

### Signature

**File name:** allows you to include a name for the file.

The signature file is limited to 80 MB.

### List

* **Linked list:** linking the field with a [list](/user-documentation/build/building-forms/lists-management).
* **Multiple:** allows the choice of several values in the list.
* **Display:** lets you choose which components are displayed.
* **Display type on mobile:** allows you to use another mode of displaying a list on your mobile form.
* **Input source (mobile only):** allows you to fill the list field by scanning a barcode. Camera scanning works on both platforms, but with different rules: iOS only scans one item, and only while the field is empty; Android allows continuous (burst) scanning on multiple-choice lists, adding each scanned item to the values already selected. The scanned code is compared with the name or the external ID of the items in the linked list, as an exact, case-insensitive match.
* **Dependency on a list:** this function allows you to link several list fields to each other, in order to follow a tree structure. *This is only available on a single choice list and therefore not multiple*.
* **Partial entry:** allows you to stop entering a list at a certain level of the list tree.
* **Continue entry:** allows you to continue partial entry of a previous list field on the form.
* **Finish entry:** allows you to complete the entry of a previous list field (going to the end of the tree structure).

Lists are limited to 100,000 items. No limit on the number of items selected.


# Formulas

Use formula fields to perform calculations and derive values from other fields.

The formula field allows you to obtain a result based on an operation performed on the values of other fields. Once your formula field has been added to the form, in the "Formula" box add a JavaScript formula with the form fields as described in the tool tip.

![](/files/zlGxFTVbcXjLmtbKsMTQ)

## Contents

* [Field options](#field-options) — type, formula editor and calculation rules
* [Accessing submission data](#writing-a-formula-accessing-submission-data) — reading field values and submission metadata from within a formula
* [Returning values](#writing-a-formula-returning-values-of-different-data-types) — returning simple fields, list fields and location formulas

## Field options

Here are the different options you can configure on a formula field.

### **Type**

The formula field is *polymorphic*, which means that it has a result type, defined as its first option. This type is one of the other data Daxium-Air types supported by the formula field. At the time of writing, the possible returning types are: Text, Number, Boolean, Date, Duration, List and Location. See the [Simple Fields](/user-documentation/build/building-forms/fields/simple-fields) article for a definition of these types.

For some of the supported types, you may have options for customising the displaying of the data. Those are the same as the selected Daxium-Air type.

![](/files/pSKPXghhNgfpDuBRgjDQ)

### **Formula**

This editor allows the edition of the JavaScript function, as it will be executed by the different engines in our platforms. The editor has several features to ease the writing of such code:

* undo/redo
* autocompletion (limited to native JavaScript methods) ;
* edition in fullscreen mode or floating window ;
* errors detection shown in gutter (only in English).

### **Calculation rules**

The following calculation rules are possible:

* **One time calculation**: as soon as the formula is successfully calculated once, it no longer is re-calculated, by any other event (even if a linked field is modified) ;
* **Auto refresh**: the formula is automatically calculated each time it is relevant (when a linked field is modified, when the form is opened or saved, etc.) ;
* **Manual**: users must click a button for the formula to be calculated.

## Writing a formula - accessing submission data

Several rules of writing a formula are to be followed for a successful formula. This first part is focused on the way to read the values of the different fields and meta data of the submission containing the formula.

### **The JavaScript context of a formula**

The code of the formula is wrapped in a JavaScript function which is executed with a list of parameters that are injected by Daxium-Air. One of these parameters is *items*, which is a JavaScript Object that contains the values of the submission used in the formula. Another is *metadata*, which contains the submission data not being an inner field value.

One important thing to note here is that to be able to populate properly the *items* object and limit it to the strict necessary, the formula is parsed to detect the values used by the Object. For example, when you write *items\['myBoolean']* in a formula, it is interpreted as *"inject the myBoolean field value in the items Object"* by our engines. This means that **you always should use** the *items\['systemName']* syntax to declare a variable in your formula.

The implications of this are that:

* the syntax\* items.systemName\* is **not** accepted (i.e. the *systemName* variable won't be injected in the formula) ;
* you cannot write your system name as a dynamic variable.

For example, let's say you have 3 fields *systemName1*, *systemName2*, *systemName3*.

```
var systemName;
var fieldValue;
for (var i=0; i=2; i++) {
	systemName = 'systemName' + i.toString();
	fieldValue = items[systemName];
	// perform instructions using fieldValue variable
}
return ...
```

This way of accessing the system names will not work as when the JavaScript interpreter reads the formula, it doesn't understand that the fields *systemName1*, *systemName2*, \*systemName3 \*are involved in this formula. The system names must be fully written at least once somewhere in the code, even if as comments. The below code would work for instance:

```
/*
items['systemName1']
items['systemName2']
items['systemName3']
*/
var systemName;
var fieldValue;
for (var i=0; i=2; i++){
	systemName = 'systemName'+i.toString();
	fieldValue = items[systemName];
	// perform instructions using fieldValue variable
}
return ...
```

### **Syntactic and configuration considerations**

As a field may easily not be filled, it cannot be injected in the *items* Object. It is considered good practice to check its value with:

```
if (items['price_tax']) {
	return items['price_tax'] * ( 1 + 20/100);
} else {
	return 0;
}
```

For the same architectural reasons of how the formulas are built in Daxium-Air, it is not possible to use a line comment operator (//) at the end of the formula (after the closing *return* keyword). Only use block comments (/\* ... \*/) at this place.

Finally, be careful not to create dependency cycles in your formulas. As a formula may be considered as a genuine Daxium-Air type, it can be injected and used in another formula. But, it is not possible to create a cycle through these formulas, otherwise, it would never end the calculation.

### **Accessing fields values**

Depending on the Daxium-Air type of the items accessed, the format of the values in the *items* Object is different.

#### Simple types

The Text, Email, Phone (RFC 3966 Standard), Number and Duration (in milliseconds) fields (and their typed formula variant, if any) are retrieved through the corresponding primitive JavaScript types (String or Number). The *items* Object with these types would look like:

```
var items = {
    "textSystemName": "Hello",
    "emailSystemName": "john.doe@company.com",
    "phoneSystemName": "+33123456789",
    "numberSystemName": 68,
    "durationSystemName": 42000,
}
```

#### **Date**

Dates are stored and returned in the [Unix timestamp](https://en.wikipedia.org/wiki/Unix_time) (the number of seconds between the desired date and January 1, 1970 midnight UTC) format:

```
var items = {
	"dateSystemName": 1466437174
}
```

By default, dates are processed with your device's system timezone. It is possible to work around this and impose UTC by doing:

```
var date = new Date();
return (date.getTime() + date.getTimezoneOffset() * 60 * 1000) / 1000;
```

#### **Boolean**

A boolean variable can only have two values : true or false.

```
var items = {
	"booleanSystemName": true
}
```

To check the value of a boolean, we ask you to refrain from using the operator:

```
===
```

and to use instead:

```
==
```

as the first one produces different behaviours according to our platforms (web, Android, iOS).

Moreover, in Daxium-Air, a boolean field (given that it is **not required**) can also be null. That translates in the back office as "Not defined", or with neither "Yes" nor "No" selected on the mobile.

![](/files/OmlClHzrIfxBI3AoSQ8g)

In a formula, it is possible to check if a boolean field is null by using:

```
items['booleanSystemName'] == null
```

#### **Objects and Arrays fields**

When writing *items\['systemName']* of those fields, you will retrieve either an [Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object) or an [Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array) of Objects. You can access any property by using the syntax:

```
items['systemName'].key
```

or if it's an Array, where "i" is the position of the element in the Array:

```
items['systemName'][i].key
```

For all the fields that are JavaScript objects, it is necessary to check if those fields are not null **before assigning them to a variable**. When the field is an Array of Objects, you also need to check if the number of elements in the array is not 0.

What **NOT** to write:

```
var listField = items['listSystemName'];
if (listField[0].caption == "A text value") {
	...
}
```

But instead:

```
if (items['listSystemName'] && items['listSystemName'].length != 0){
	var listField = items['listSystemName'];
}
if (listField[0].caption == "A text value") {
	...
}
```

**Location**

A Location field is made of a textual address (e.g.: Cluster R - Jumeirah Lake Towers - Dubai, UAE) and two [WGS84](https://en.wikipedia.org/wiki/World_Geodetic_System#WGS84) GPS coordinates (e.g.: lat 25.0768995, long 55.1472642). Here is an example of how to return a textual representation of a Location field with system name *address*:

```
var result = "";
if (items['address']) {
	if (items['address'].address) {
		result = "Address : " + items['address'].address;
	}
	if (items['address'].lat && items['address'].lng) {
		result = result + "\nlat: " + items['address'].lat; 
		result = result + ", long: " + items['address'].lng;
	}
}
return result;
```

This outputs:

```
Address: Cluster R - Jumeirah Lake Towers - Dubai, UAE
lat: 25.0768995, long: 55.1472642
```

Please note that the Location-typed formulas are not usable on the Android V1 application.

**File, Image, Signature**

A File, Image or Signature field can have multiple selected items. The corresponding item in a formula is therefore a JavaScript Array of objects. Such an Object has 5 properties:

* *size*; integer type Ex: 13554
* *name*; string type Ex: "test formules.pdf"
* *extension*; string type Ex: pdf
* *mimeType*; string type Ex: "application/pdf"
* *comment*; string type Ex: "This is a comment"

For example, to retrieve the file name, use:

```
return items['imageSystemName'][0].name;
```

**User**

A User field can have multiple selected items. The corresponding item in a formula is therefore a JavaScript Array of objects. Such an Object has three self-explanatory String properties:

* *email* ;
* *first\_name* ;
* *last\_name*.

For example, to retrieve the user's email address, use:

```
return items['userSystemName'][0].email;
```

To return the concatenated first and last names of a user in a non-multiple user field, use:

```
if (items['userSystemName'] && items['userSystemName'].length > 0) {
	var user = items['userSystemName'][0];
	return user.first_name + ' ' + user.last_name;
} else {
	return "No user selected";
}
```

Note that the access to these properties in a Formula field is independent of the User field display option, they are always available.

**List**

As for the User field, a List field in a Daxium-Air formula is an JavaScript Array of objects. It is defined like (in a case where two list elements are selected in the submission field):

```
var items = {
	"listSystemName": [ 
		{
			"caption": "My list label 1",
			"external_id": "My external id 1",
			"id": 104839483, // Daxium System ID
			"parent_id": 104839483 // For list with multiple levels
		},
		{
			"caption": "My list label 2",
			"external_id": "My external id 2",
			"id": 104839484, 
			"parent_id": 104839485 
		}
	]
}
```

You can only retrieve the properties:

* *caption* ;
* *external\_id* ;
* *parents*, to access the items hierarchy.

The syntax to retrieve "My list label 1" will then be:

```
items['listSystemName'][0].caption
```

To learn how to access a List field hierarchy, let's use an example with this List:

* Animal
  * Feline
    * Cat (external\_id: cat)
    * Tiger
* Bird
  * Seagull
  * Pigeon

To write our formulas, let's say we have selected the *Cat* and Seagull items in the corresponding field called animal\_list.

To get the name of the first selected element:

```
items['animal_list'][0].caption
```

returns

```
Cat
```

To get the external identifier of the first selected element:

```
items['animal_list'][0].external_id
```

returns

```
cat
```

To get the root of the List:

```
items['animal_list'][0].parents[0].caption
```

returns

```
Animal
```

To get the direct parent of the first selected element:

```
items['animal_list'][0].parents[ items['animal_list'][0].parents.length – 1 ].caption
```

returns

```
Feline
```

To get a list of all the selected choices:

```
if (items['list_animal']) {
	return items['list_animal'].reduce(function(result, element) {
    	return result + " - " + element.caption + ".";
  }, "");
} else {
	return "No items selected in list.";
}
```

returns

```
- Cat. - Seagull.
```

**Relation**

A Relation field is an Array of Submission objects. If the option "Multiple" is not selected on the field, the Array will always contain only one element. If the option "Countable" is selected, an additional \*count \* Number property is present.

To access the data contained on such a Relation field, you should use the *relations* Object that is injected in the *items* Object. It contains two properties:

* *children*, which contains all the submissions related to the current submission through the Relation fields it contains ;
* *parents*, which contains all the submissions related through a Relation field contained by another form.

It is important to note that the position of a submission in the Array is not defined by anything, and is not relative to the creation date of the child submission. Therefore, the assumption that *relations.children.sy\*\*stem\_name.submissions\[0]* is the first child created submission is **wrong**.

To avoid execution errors, before calling any data in a related submission (child or parent), you must test the existence of the relation, and the fact that it is not empty (at least one submission related).

If the relation field is in the current form with the system name ‘system\_name’, you can access the related submissions with:

```
relations.children.system_name.submissions
```

So to retrieve a field named *title*:

```
[relations.children.sy](http://relations.children.sy)stem_name.submissions[0].items['title'];
```

If the relation field is in a parent form, the syntax is similar, but using *parents* instead of *children*:

```
relations.**[parents](http://relations.parents.se)**[.system_name](http://relations.parents.se).submissions[0].items['title'];
```

To list all the titles of the submissions that have established a relationship to the current submission through the relation Field *relationSystemName* (each must therefore have a *title* Text field):

```
if (relations.parents.relationSystemName && relations.parents.relationSystemName.submissions) {
	return relations.parents.relationSystemName.submissions.reduce(
		function(result,element) {
		    return result + " - " + element.items['title'] + ".";
  		}, ""
	);
} else {
	return "No parent submission found";}
```

**Countable Relation fields**

A Relation field is said to be countable when the option of the same name is activated on it. This adds some attributes to each related submission that can be exploited in formulas.

To access such attributes, you must use the *relationshipProperties* Object of the related relation. Therefore, if the relation has the system name *products* and we look for the associated quantity (parameter *count*), this gives:

```
relations.children.product.submissions.relationProperties.count
```

Practical case: the parent form is an order with the products related through a countable Relation field (system name: *product*). The price of each product appears in the *price* Number field some products. To get the total price of my order, you can do:

```
var price = 0;
if (relations && 
	relations.children && relations.children.products && 
	relations.children.products.submissions && 
	relations.children.products.submissions.length > 0) {

	relations.children.products.submissions.forEach(
		function(prod) {
			var quant = 1;
			if(prod.relationProperties.count && 
				prod.relationProperties.count) {
      			quant = prod.relationProperties.count
			}
			if (prod.items && prod.items['price']) {
				price += prod.items['price'] * quant;
			}
		}
	);
}
return price;
```

As a rule of thumb, be extra careful when manipulating money with [floating point arithmetic](https://en.wikipedia.org/wiki/Floating-point_arithmetic) (in JavaScript here, but also in other languages). It is good practice to use only integers for manipulation and conversion to floats when displaying like we did in the previous example.

### **Accessing the submission data**

It is possible to access some system data of the submission using the **metadata** JavaScript Object, that contains the following properties:

* **uuid**, a 128-bit [UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier) that uniquely identifies the submission, represented as a String ;
* **created\_at**, the date of creation of the submission as a Unix timestamp ;
* **updated\_at**, the date of last update of the submission as a Unix timestamp ;
* **number**, a unique number to identify the submission (Number) ;
* **number\_in\_structure**, a unique number to identify the submission, limited to its structure (Number) ;
* **longitude**, the longitude of the native position of the submission
* **latitude**, the latitude of the native position of the submission
* **user**, an Object containing the email, first and last name of the user who **created** the submission.
* **update\_user**, an Object containing the email, first and last name of the user who **last updated** the submission.

Here is an example of such an Object:

```
var metadata = {
	"number": 63930,
	"number_in_structure" : 12,
	"uuid": "38c6d76e-5442-4cbd-baef-cb9e5d6c4daa",
	"created_at": 1550242752,
	"updated_at": 1550242752,
	"longitude": 50.894873194158,
	"latitude":-72.735993862152,
	"user": {
		"email": "jd@company.com",
		"last_name": "Doe",
		"first_name": "John"
	},
	"update_user": {
		"email": "rm@company.com",
		"last_name": "Moore",
		"first_name": "Roger"
	}
}
```

It can be used like this:

```
return metadata['number'];
```

Note that *number*, *number\_in\_structure* and *created\_at* are only available after the first saving of the submission.

## Writing a formula - returning values of different data types

Depending on the return type defined on the formula field, you need to return the corresponding value from the formula function. For that, always use the *return* JavaScript keyword.

### **Simple fields**

Simple fields like Text, Number, Boolean, Date (as a UTC Unix timestamp) and Duration (in milliseconds) can be directly returned by the corresponding primitive JavaScript value (as a String or Number type).

### **List field**

A JavaScript Array of complete List objects must be returned. For formatting, it is strongly recommended to use the *searchList* function detailed below.

You must not use special characters in the external id of a list element (example: the underscore "\_")

#### **Returning list fields with the&#x20;*****searchList*****&#x20;function**

By using the function *services.searchList()*, you can directly find elements of a Daxium-Air List linked to the formula. This is the only option of the List-typed formula field. It can be used with a List that is not linked to any List field of the submission. It takes a JavaScript Object as only parameter, with four values:

* **type** (required): search using either the *name*, the *external\_id* or the *id* ; this is a String ;
* **value** (required): the value by which performing the search ; the type of the value depends on the type:
  * *name* and *external\_id* types should have a String value ;
  * *id* type should have a Number value ;
* **operator** (required):
  * IS\_EQUAL\_TO: Specific search, not case sensitive (uppercase=lowercase). To privilege, especially for ids
  * CONTAINS: searches if "value" is in the result. Ex : "Luke" will be found in "Luke Smith". Warning, CONTAINS will create a slow formula.
  * Compatibility:

|               | name        | external\_id | id          |
| ------------- | ----------- | ------------ | ----------- |
| IS\_EQUAL\_TO | ✅           | ✅            | ✅ (default) |
| CONTAINS      | ✅ (default) | ✅ (default)  | ❌           |

* **parent** (optional): you can enter the id of the node in your hierarchical List to restrict the search to the sub-elements below this node.

Here is an example of how it can be used:

```
return services.searchList({
	"type": "name",
	"value": "My list element"
});
```

Here's another:

```
return services.searchList({
	"type": "id",
	"value": 12345,
	"parent": 345
});
```

This function returns an Array of complete List objects:

```
[
	{
		"id": 123,
		"external_id": null,
		"caption": "Name of the element",
		"color": null,
		"imageId": "504d4a60-0db2-4bed-b234-a6d75e9950f4"
	},
	{
		"id": 124,
		"external_id": "456",
		"caption": "Other element",
		"color": null,
		"imageId": null
	}
]
```

### Formula Type: Location

![](/files/T6UtcgnwRndgg8Y4Fv0J)

Location type formula returns a result with address and coordinates.

This can be used, for example, to retrieve the location contained in a parent or child submission (as shown in the example above).

You can also create your own location object to return llke so

```
return {address:"Blabla",lat:21.45,lng:51.545};
```

{% hint style="info" %}
**Did you know?** The advantage of typed formulas is that they behave like the field of the same type. For example, the Location formula field can be used as a default location parameter for the [map view](/user-documentation/use/views/map).
{% endhint %}

![](/files/Uw30irkWKB55l0wu4pO0)


# Relations

Link forms together using relation fields to reference data across structures.

## Relation field

The relationship field is a concept specific to Daxium-Air. It allows the user to select another form (then called sub-form) and link it to the one they are filling out. Once your relationship field is added to the form, choose the forms that will be linked from the **Forms** drop-down list.

![](/files/ORrY7SqK6LWHeuUqWKyZ)

Relationship field options:

* **Selection**: attach an existing child submissions ([broadcasted](/user-documentation/build/building-forms/submission-broadcast), [assigned](/user-documentation/build/building-forms/workflow-and-assignation), searched, created on mobile)
  * Manual: choose from a list of submissions
  * Camera: Allows you to scan barcodes with your camera to select a child submission (Mobile only)
  * External scan: Allows you to scan barcodes with an external scanner to select a child submission (Mobile only)
  * NFC: See the [section below](#nfc-selecting-a-relation-via-nfc)
* **Creation**: Create a sub-submission of the form
  * Send child submission upon creation: If unticked, the child submissions will only be sent to the back office when you send the main submission. If ticked, the child submissions are sent as soon as they are created (Mobile only)
* **Edition for child submissions:** Allows to edit an existing linked or created child submission
* **Allow multiple child submissions**: add several child submissions to the main submission
* **Countable relation: allow a count for each child submission**: Allows you to link a quantity for each of your child submission
* **Plan view**: add a PDF or image file to edit it and attach child submissions to it
* **Visualisation:** Allows you to choose different options to visualise the submissions in the relation field. You can configure distinct options for the web & mobile platforms to match your needs

***

## NFC: Selecting a relation via NFC

{% hint style="info" %}
Daxium-Air's NFC relation selection allows you to **associate an NFC tag with a related submission** (use cases: personnel, materials, equipment, etc.) in order to **instantly select** it in another form. This method replaces or complements manual search and QR codes, offering a faster, more reliable, and more secure approach.
{% endhint %}

Setting up NFC selection requires four steps:

1. **Enable NFC tag search on the subform**: allow the child form to be looked up by NFC.
2. **Enable NFC selection on the relation field**: activate the NFC option in the parent form's relation field.
3. **Write a submission to an NFC tag**: link a specific submission to a physical tag via the Admin NFC menu.
4. **Use the tag in the field**: scan the tag while filling in a submission to instantly select the linked record.

### Step 1: Enable NFC search on the subform

Go to the **relevant** form (the one that will be called by another, e.g., *Internal Signatory Form*).

1. Open the form configuration.
2. Check **"Allow NFC tag search from a parent relationship"**. Customize the **NFC tag naming**: select the fields used to clearly identify the submission (e.g., *Status*, *First Name*, *Last Name*).

<figure><img src="/files/sO6z0LOnhcYHyeLErYCn" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
Choose unique and easily readable fields (e.g., "Technician – First Name Last Name").
{% endhint %}

{% hint style="info" %}
Enabling this option makes the form's submissions available for selection in the **Admin NFC** menu (step 3), each one listed under the name defined by the NFC tag naming fields above.
{% endhint %}

### Step 2: Enable NFC selection in the parent form

From the **parent** form (the one that calls the relationship, e.g., *Work Order* or *Service Request*):

1. Access the **Relation** type field.
2. In the **field options**, check **"NFC"** in the *Selection* section.

<figure><img src="/files/eWyTessKNxbfIX5NMan3" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
This option allows you to **select a submission** via an NFC tag, without manual searching.
{% endhint %}

### Step 3: Write a submission to an NFC tag

Once the forms are configured, you can **associate your submissions with NFC tags**.

1. In the Daxium-Air application, open the **Admin NFC** menu. If the menu is not present, add it from the [custom app builder](/user-documentation/build/building-apps/app-configuration): Action = *NFC Configuration*.

<figure><img src="/files/om0OZBfclKmvWz8ogU9X" alt=""><figcaption></figcaption></figure>

2. The writable submissions appear in the list: these are the submissions of the form for which you enabled NFC tag search in step 1. Select the desired submission.

{% tabs %}
{% tab title="Android" icon="android" %}

<figure><img src="/files/nt6kCwkp5eEZ0kqFVQsV" alt="" width="375"><figcaption></figcaption></figure>

<figure><img src="/files/qMrDRxsSXDEMOi8Z42fk" alt="" width="375"><figcaption></figcaption></figure>
{% endtab %}

{% tab title="iOS" icon="apple" %}

<figure><img src="/files/2A2nKtpJrATNl3o4EeyP" alt="" width="375"><figcaption></figcaption></figure>

<figure><img src="/files/YR8lYxdSjUs5rKB2xiqH" alt="" width="375"><figcaption></figcaption></figure>
{% endtab %}
{% endtabs %}

3. Tap **Write on tag** then bring a compatible NFC tag close to the smartphone.

{% tabs %}
{% tab title="Android" icon="android" %}

<figure><img src="/files/MTqzFPVgIWzsftcihxnK" alt="" width="375"><figcaption></figcaption></figure>
{% endtab %}

{% tab title="iOS" icon="apple" %}

<figure><img src="/files/Prf5szKmLsDMI8ffaGsn" alt="" width="375"><figcaption></figcaption></figure>
{% endtab %}
{% endtabs %}

4. The confirmation message appears: the tag is now linked to the submission.

{% hint style="success" %}
You can filter submissions not yet written to a tag, and view the number of linked submissions per entry.
{% endhint %}

### Step 4: Using the NFC tag in the field

When entering a **parent** submission, the relationship field (e.g., *Authorized Person* or *Equipment concerned*) can now be filled in by a simple NFC scan.

1. Touch the relationship field.

{% tabs %}
{% tab title="Android" icon="android" %}

<figure><img src="/files/V8FxQ9WlbZV2Nlp7q9jk" alt="" width="375"><figcaption></figcaption></figure>
{% endtab %}

{% tab title="iOS" icon="apple" %}

<figure><img src="/files/r8zmt73zsk38OEZjsncK" alt="" width="375"><figcaption></figcaption></figure>
{% endtab %}
{% endtabs %}

2. The NFC reading screen appears.

{% tabs %}
{% tab title="Android" icon="android" %}

<figure><img src="/files/GRD8DMehw1Era4lmyZOU" alt="" width="375"><figcaption></figcaption></figure>
{% endtab %}

{% tab title="iOS" icon="apple" %}

<figure><img src="/files/HXjNbbW47TW3cNOm0RrX" alt="" width="375"><figcaption></figcaption></figure>
{% endtab %}
{% endtabs %}

3. Bring the phone close to the NFC badge/tag: the linked submission is automatically selected and displayed.

{% tabs %}
{% tab title="Android" icon="android" %}

<figure><img src="/files/G1fWlORNFvxYDsmGEwPi" alt="" width="375"><figcaption></figcaption></figure>
{% endtab %}

{% tab title="iOS" icon="apple" %}

<figure><img src="/files/FnDadx6JZaR82u034xOZ" alt="" width="375"><figcaption></figcaption></figure>
{% endtab %}
{% endtabs %}

{% hint style="info" %}
Scanning the tag instantly triggers the selection of the correct submission, without error and without manual input.
{% endhint %}

### Good to know

* Standard NFC tags (type NTAG213/215/216) are compatible.
* The tag does not contain **any sensitive data**, only a reference identifier.
* Access rights to the submission remain managed by Daxium-Air permissions.


# Field Options

Field-level options that can be applied across field types in Daxium-Air.

Field options are additional behaviors that can be configured on individual fields, regardless of their type. They extend what a field can do without changing its data type.

* [**Pre-fill**](/user-documentation/build/building-forms/field-options/prefill) — automatically populate a field with a value from the current user, a parent submission, or a fixed default.
* [**Advanced Search**](/user-documentation/build/building-forms/field-options/advanced-search) — configure how users search for and filter values in relation and list fields.
* [**OCR**](/user-documentation/build/building-forms/field-options/ocr) — enable optical character recognition to extract text from photos taken in a picture field.


# Pre-fill

This option allows each user to manually define, from the web or mobile, a default value for the fields that have been authorized for pre-filling by the administrator in the form.

Thus, each file created will contain the default values defined by the user who can modify if necessary.

## Configuration

In the advanced field options, a checkbox is available to make it pre-fillable:

![](/files/r4gRcno95cG6Vu1pe5eN)

For a user to access the pre-fill configuration menu on mobile, a button must be added to the [customized application](/user-documentation/build/building-apps/app-configuration) whose action is "Autofill":

![](/files/4eB38YAw3oBCCXuoXeFC)

**List of fields not compatible with pre-filling:**

* Picture
* File
* Relationship

## Use on the web

From the form view, you will find the "Pre-fill" top right:

![](/files/wGNwT4B2wmx1MRghKhNc)

After clicking on the "Pre-fill" button, you will find a form with only the fields checked as pre-fillable in the form:

![](/files/GRKxZH5FMv4nzdHpFvdw)

You can click Edit, enter values then Save:

![](/files/1gSiV0E65JcnvHMFApUp)

## Use on mobile

On the custom application with the "Pre-fill" action button, click on it.

{% tabs %}
{% tab title="Android" %}
If you have several forms, select the one of your choice and fill in the desired values then click on the arrow at the top left when you are finished:

<div align="left"><img src="/files/jConBIllM3422SfSXL9G" alt="" width="375"> <img src="/files/r51GyQBTPI8gsyFtlOpk" alt="" width="375"></div>

<div align="left"><img src="/files/xqzLFE5xPRlbjNhXJwRP" alt="" width="375"></div>
{% endtab %}

{% tab title="iOS" %}
If you have several forms, select the one of your choice and fill in the desired values then click on the arrow at the top left when you are finished:

<div align="left"><img src="/files/WIFgpaLO79TwwWo6RGZp" alt="" width="375"> <img src="/files/XFzbtbjxow7gBqeOzS84" alt="" width="375"></div>

<div align="left"><img src="/files/2OjhFBTQY6R9nQRuvIFV" alt="" width="375"></div>
{% endtab %}
{% endtabs %}

**Attention: if you delete the logged-in account from the mobile/tablet, the pre-filled values will be lost.**

{% hint style="info" %}
Pre-fills are linked to the form's [version](/user-documentation/components-concepts-terminology#version). If the form's version changes, we recommend deleting existing pre-fills, synchronizing the device, and possibly creating new ones.
{% endhint %}


# Advanced Search

Configure fields to be searchable from the mobile app.

From the mobile, it is possible to consult and download files available on the web.

## Configuration

To make this possible, choose a form (first level only) and the fields to make available in the search criteria by checking the option in each of them:

![](/files/2J7UH2LM8NAFvj0tPVBp)

Then, **save** the form and start the [migration](/user-documentation/build/building-forms/migrations) if you want to search for existing submissions.

Field types available for search:

* Text
* Date
* List
* Number
* Boolean
* Email
* User
* Phone
* Formula

On the [custom app](/user-documentation/build/building-apps/app-configuration), add a **Search** button:

![](/files/JpkA3OEsTL4nEndFfh5x)

## Use on mobile

{% tabs %}
{% tab title="Android" %}
On the **Search** button, you will find a list of fields available for search, which have been previously checked in the form.

The search results can be downloaded on mobile and available on the **My Submissions** button.

Search criteria can be saved to redo the search later.

<div align="left"><img src="/files/Wggr8hs6vdb0HdBU8TNp" alt="" width="375"></div>
{% endtab %}

{% tab title="iOS" %}
On the **Search** button, you will find the same list of fields configured for search in the form. Tap a criterion to filter results, then download the matching submissions to your **My Submissions** list.

<div align="left"><img src="/files/rbuxkEWJOM4W80mdNqnG" alt="" width="375"></div>
{% endtab %}
{% endtabs %}


# OCR Option

Use text recognition (OCR) to automatically extract data from the camera.

The OCR (optical character recognition) feature allows you to automatically retrieve information from the camera, in text format.

## Setting up OCR on a field

To activate the OCR functionality, go to the Back-Office, on your relevant form.

![](/files/PXJr7SgroyFBm5IBzqyV)

The functionality is available for **2 types of field**. 1° The **Text** field (allows you to retrieve an alphanumeric character string)

![](/files/mTbAKhM6EWDtnhrLGKuq)

2° The **Number** field (allows you to retrieve only a numeric value)

![](/files/Cr3CVPhN0MOsl3isaxH9)

In the **OPTIONS** section of the field, select "**Input Source (Mobile Only)**" You can choose between Barcode scan, External Scan and **Text Recognition**

So, select **Text Recognition**.

Save your changes and activate.

## Access the mobile functionality

Once the synchronization is done on the mobile, the function is accessible.

Go to the concerned form.

A "camera" pictogram appears on the right next to your configured field.

![](/files/FaWJE8YTGCITP5n62zv8)

Just click on it, the camera opens.

* **Take your photo,** ensuring the correct level of focus & zoom on your text area.
* **Select the text** you are interested in, from the detected text areas (by clicking on it).
* **Validate**. The text is entered in the field.

![](/files/AnLfuOQv4RxPZAsZVkWu)


# Lists Management

Create and manage reusable option lists for dropdown and selection fields.

A list allows you to store information, like a database, up to 100,000 items.

## Creation

To create a list, go to the **Parameters** menu, then **Lists** and then **+ New:**

![](/files/idt2nxFIcKjjVfVO8NaY)

![](/files/wltWPlprf1w9o3Xy95ie)

![](/files/Z3jfHfoXtEjkmU4R1zPg)

First, you must enter the **Name** of the list & click **Add**:

![](/files/FEqFe8LJDYvhrZGyqz7Z)

The list has just been created, however it does not contain any data.

![](/files/nrUbEP89OVRo8WFx7uoa)

## Change

The part on the left of the web page lists the elements and the part on the right allows you to modify these elements.

* **Add an element:** Creation of a list level in the selected element.
* **Save:** Saving the entered data.
* **Delete:** Deleting the data from the list.
* **Cancel:** Cancel the last modification of the data.

It is possible to drag items in the list to change their position or level.

## Import via CSV file

To import several list values efficiently, it is recommended to use a CSV file in UTF-8 format. The file must be correctly formatted to avoid any syntax errors when used in files.

Example of a simple list containing status:

![](/files/Nj4X2gXMAw8ehiQGeDma)

Example of a list with tree structure:

![](/files/HpIf2di3ElLtnvbMOmsr)

In the following case all child values **Bolt** will only be available via the parent **Small tools**. The use of **##** corresponds to **external id** — this value can only be retrieved via mail merge. As a reminder, an external id must not contain a special character in its value (example: the underscore `_`).

![](/files/7rdRcvYoD8y5NNmGm7rb)

## Personalization

* **Value:** Enter the label
* **External identifier:** Allows you to assign a hidden value, recoverable only via mail merge, export and [formulas](/user-documentation/build/building-forms/fields/formulas).
* **Functional status color:** Allows you to assign a color to your list value.
* **URL:** Allows you to enter a web address in the form of a hyperlink.
* **Image:** Includes an image with 25x25 pixel format. Accepted extensions are .jpeg and .png

## Access authorization

In certain cases it is interesting to be able to apply fine-grained rights management regarding list elements. Here is the following case, we would like to be able to make specific accesses from a single list according to a defined sector and then assign it to the group in charge of the zone. Consider the following example:

![](/files/GQd7Y7HfOKDn38qm9sIc)

1. **Name of the access authorization:** Naming of an authorization.
2. **List items:** Selection of list items that will be accessible.
3. **Users:** Assigning access authorization only to a user.
4. **User Groups:** Assignment of access authorization to a user group.

In the example below, Technical Team access only authorize the 5 list elements contained in **Small Tools** which are linked to a **group 'users** who is **Technical Access**.

![](/files/c8LPQcvT2DHAZSb2vWvT)

## Special cases

{% hint style="info" %}
The following behaviours apply when access authorizations are configured on a list. Review them before restricting list access.
{% endhint %}

* **Parent and child inheritance:** When a list item is made accessible to a set of users, they also gain access to all parent and child items in the tree.
* **No access by default:** If a user is not listed in any access authorization — directly or via their groups — they cannot see any item in the list.
* **Cumulative rights:** If a user appears in several access authorizations, their rights are cumulative.
* **Viewing a submission that contains a restricted value:** If a user can see a submission whose list field contains a value outside their authorizations, their experience depends on the **"Access to all elements"** setting (configured under **Options** in the access authorization list):
  * **Enabled:** The value remains visible. They can change it to a value within their authorization, or clear the field entirely.
  * **Disabled:** The value is hidden. They can change it to a value within their authorization, or clear the field entirely.

![](/files/7SoJ9fIbRKZjTaMoQqES)


# Conditions

Use conditions to dynamically show or hide fields based on user input.

## Introduction

Conditions can be used in:

* Field permissions
* [Automatic generation of reports](/user-documentation/build/building-the-reporting/report-types/automatic-reports)
* [File distribution](/user-documentation/build/building-forms/submission-broadcast)
* [Workflows](/user-documentation/build/building-forms/workflow-and-assignation)
* [Automation](/user-documentation/build/building-forms/automations)

{% hint style="info" %}
If you use the field of *current user* in a condition, it can only be used for permissions and workflows — it will not work in reports, automation and broadcasts. Conditions only work on the last active [version](/user-documentation/components-concepts-terminology#version) of the form.
{% endhint %}

## Field Permissions

A field can be:

* Visible
* Editable
* Required

This setting is done in the field permissions. The **YES** and **NO** values are available by default and to these values are added the conditions created.

A condition is a field (or list of fields) with an associated value.

For the condition to be satisfied, all field values must be checked on the field on which the condition was applied.

You can configure different combinations of conditions to allow fields to interact with each other based on one or more results. It is also possible to use another condition to create a new, more complex condition.

## Setting up

In your form, click **Condition**. The following window lists all the conditions of your model.

* Go to New:

![](/files/xiAim245VtSpNbrV7uRy)

We will address the following elements point by point:

![](/files/g31OotNtjlEdflwtzgOi)

1. Name your condition to differentiate them.
2. List of all the fields in your Form.
3. The selected field (e g. Status - list field) and offers an operator and result value that you must choose.
4. **Possible values** returns all the data contained in your list field.
5. Combination elements are used to link the display based on different result criteria.
6. Result of your condition in color-coded JavaScript format.

* **Green** = Valid syntax.
* **Red** = Invalid syntax.

A condition is linked to the elements of your form, however if a change is applied such as a list change or a field deletion, then your conditions that depend on it will be invalidated. Modification or deletion of these is necessary in order to be able to save your form with the new modifications.

**Example:** In the following example, the condition matches two values from two different lists. During entry, as soon as the result is "**Status: Employee**", the condition displays the desired field. If the condition is valid, a confirmation message appears. If the result is **red**, the condition is not correctly written — you will not be able to save the form until it is fixed.

![](/files/Js7GDMuP7lieDx5OTDoa)


# Summary Layout

Configure the summary layout of a form from the form editor.

The summary layout condenses one submission onto a single page: only the fields and metadata you choose to expose, plus data taken from its parent and child submissions. It is built in a dedicated builder and organised in sections. It is designed for long forms, where the information needed to act on a submission sits buried among dozens of fields, so the people who have to decide something about it can read what matters at a glance. This page covers how to build and activate it from the form editor.

{% hint style="info" %}
To see what the layout looks like for your users once it is active, and what it does not allow, read [Summary Layout](/user-documentation/use/submission-layout/summary-layout) in the Use section.
{% endhint %}

## Access

To open the summary layout builder, go to the form editor. You will find a "Summary layout" button in the top right corner of the screen.

![](/files/3Azp1hz1PwAwPIHyMxQH)

You will arrive at the builder of your summary layout

![](/files/vb1e78Vc976jdimLfQuQ)

The interface consists of:

* Metadata selector
* Field selector
* Field layout configuration area
* Section & field settings panel

Simply drag and drop the information you want to display onto the central panel, into a section. It is not possible to place information outside of a section.

The sections are limited to only 2 columns in order to ensure good readability on mobile devices.

## Metadata selector

The metadata selector allows you to select the following elements

![](/files/1Tqk6Yhn7kh9vr3Ag9Hr)

* If your form has a workflow, you will also be able to choose the workflow state.
* If the [task](/user-documentation/build/building-forms/tasks) template is enabled, you will also be able to choose the information related to the tasks.
* If your form has parent relationships, these will also be placed in the metadata tab.

![](/files/plIzVGTfDg1yOMa60IdC)

## Field selector

The field selector allows you to choose the fields of your form. All field types are compatible with this display mode.

The fields are displayed in the order they appear in the form.

A banner allows you to:

* Search for a field
* Display only the fields not yet used in your summary

![](/files/AeFMgIiF7JZBkaHYPm0x)

{% hint style="info" %}
It is possible to repeat fields in your summary. For example, in two different sections.
{% endhint %}

If your form has multiple pages, the fields will be grouped by page. Their label is displayed, along with their system name (on the second line, within the parentheses).

![](/files/NxBK2ZkfYlVhG3WUCacy)

It is also possible to select fields from related forms. To do this, simply click on the arrow located to the right of a relation field.

![](/files/zjOXv2cUnwM5ureyAwOb)

The metadata and fields in the left sidebar will be replaced by those of the related form. A navigation bar is located in the top left corner of the screen to allow you to easily return to your original form ("Mission" in the screenshot below).

![](/files/8UfAYpqpCNQXezP30L6V)

## Field layout configuration space

Each section can be opened or closed as you wish using the buttons provided for this purpose, in order to facilitate the configuration of your summary.

You can reorder your sections by clicking on the icon to the left of the section title, then dragging and dropping. At the bottom of the screen, there is an "Add a section" button.

![](/files/yIWUN44AowTK72H1M7EQ)

Within a section, you can reorder the fields by dragging them to the desired location.

![](/files/Yw4IjGeruSy7wduBCLJw)

## Section & field settings panel

When you click on a section, you can use the panel on the right of your screen to configure it.

![](/files/fXJ8vBRr7yjNqgnbhOlI)

This will allow you

* To name your section
* To apply a visibility condition to it
  * [Conditions](/user-documentation/build/building-forms/conditions) must be built using the condition editor available in the standard form editor.
* To duplicate or delete the section

Clicking on a field will display, in addition to the section settings, the settings specific to your fields.

![](/files/3rzOdP4nZEwQHXaVjOaW)

* You can choose a different label for your field, thus renaming it only for the summary layout.
* You can choose whether the field should take up the full available width, or half. In the screenshot below, the first two fields have a width of 50%, the third has a width of 100%.

![](/files/TplahzgNsIz0Wjo0CjaG)

## Activating the summary display

In the top right corner of your screen, you will find the following buttons

![](/files/RCmkQ1FTgu37UZaMtWy6)

* Back: Return to the standard form editor
* Save: Allows you to save your summary without necessarily activating it. Your summary will then be saved as a draft until it is activated. An indicator will let you know if the version you see on the screen is a draft
* Activate / Deactivate
  * Activate: You can activate your draft by clicking the “Activate” button. A window will open where you can choose which platforms you want to enable this view on (web, mobile, or both). Once enabled on a platform, every submission generated from the form that includes the summary view will always open using that view. A button will be available to switch to the standard editor.

![](/files/MeGpfH1qzhfdYqkIadNd)

* Deactivate: This button allows you to disable your summary view. This action will apply to all platforms where the summary view was enabled. If you want to disable this view on only one platform, you must first disable it for both platforms, then re-enable it on the desired platform. It is not possible to have different summary views between the web and mobile platforms.

![](/files/vqq6MqzGMVe9bCYUs0Y5)


# Visual representation

Customize how submissions are displayed in lists and views.

We will now review the different ways of visualizing the data reported by the field forms within Daxium-Air.

## Custom title

The custom title is an option that allows you to display an explicit title for each submission, which will be different from the default value.

* By default, the value displayed in the tab corresponds to: Sheet No. 000000

This modification only appears in Daxium Air.

To use this option, **you must select a form and edit it.** Once the form editor is open, simply click on **Edit** in the custom title section.

![](/files/hZGZonZYhUVzJBwtk3Kl)

A window will then appear and you will have access to the following elements:

![](/files/1YHRio7JeK1co23qFqhn)

1. The list on the left corresponds to the fields in your structure that can be used.
2. System information for generic data.
3. Text box in limited HTML form.
4. The **Values for example representation** section is used to include dummy text information. You can visualize the result on the part above.

Save your changes, then Activate and launch the [migration](/user-documentation/build/building-forms/migrations) to perform the update.

You can then see that the title of the created file is now customized.

![](/files/754JP4p848buYmerAKEs)

## Visual representation

In your form, click on **Representation**. The following window has several points:

![](/files/0UH65rVfBjctSav92TZq)

![](/files/gccXU0gd6y95thSMS1i2)

1. The list on the left corresponds to the fields in your structure that can be used.
2. You can also use system data such as:

* The file number.
* The date of creation.
* The last update date.

3. Text box in limited HTML form used to format the result with some options:

* Line break, Bold and Italic tag.
* You can also choose whether or not to include in thumbnail form one or more images contained in the files

4. The **Values** section for the example representation is used to include dummy text information.

* You can view the result in the gray box.

![](/files/uKFycdG2ZgWuoJyp4ns8)

* Then save your changes, then **Activate** and then launch the [migration](/user-documentation/build/building-forms/migrations) to perform the update.

***


# Tasks

Manage and track tasks assigned to you or your team in Daxium-Air.

## Tasks

### Introduction

Creating tasks first requires configuring the form so that it is compatible with this functionality. The operation is very simple, it simply consists of providing our form with two date/time fields in order to be able to locate it in time, then only one box remains to check to confirm that it can be used within the framework of creating tasks.

### Configuration

1. Insert two “Date” fields in “Date/Time” format, which we will name **date\_start** and **end\_date**
2. In the form settings, check “Allow the creation of tasks from this form”
3. Select created fields in red drop-down menus
4. Save then activate your form once the settings are complete

![](/files/pyToSub3gaOeCF0Qmp3z)

**NFC:** Requests the reading of an NFC tag in order to perform the task.

**Start date:** When starting the task on the mobile, the following field will be automatically completed.

**End date:** When the user finishes entering the form, the field will be automatically completed before sending.

**Deadline:** Allows you to include a deadline before the task is considered late. If we set it to 1 hour or if the task starts at 3:00 p.m. and ends at 4:00 p.m., then the overdue deadline will be pushed back to 5:00 p.m.

**Fields accessible during creation:** This defines the form fields that can be pre-populated when creating the **task**.

Then you will find the option "Task template" active in the view listing the forms:

![](/files/hEiWRD1WNHGJOmuAy7FE)

**Warning**: Tasks are incompatible with workflows and broadcasts. These are indeed three distinct methods of sending Submissions.

### Usage

***

## Importing tasks

Tasks can be imported in bulk using a CSV file whose structure is defined below.

### Columns to configure the task

Task import requires the use of 6 columns to define it:

* **Submission#structure\_id**: this column allows you to choose the form in which an import is to be carried out. the identifier (structure ID) is for example at the end of the form designer URL. (.../structures/builder/XXXX).
* **Submission#userEmail**: This e-mail allows you to identify the user who created the form.
* **type**: here you have the choice between a simple task and a recurring task. As it currently stands, you can only import simple tasks. You must therefore set the value "simple"
* Start and end dates of the task: they must be entered in ISO 8601 format. Example: 2018-04-30T17:00:00+02:00
  * **start\_date**: this is the expected start date of the task
  * **due\_date**: this is the expected completion date of the task
* **user\_email**: this column allows you to assign the task to a Daxium user. You must write the user's email in this column. Please note, you cannot assign tasks only to mobile users.

### Columns to configure the associated form

Each task must be associated with a form. To do this, you must first specify which form model you are working on. You must therefore include a **Submission#structure\_id** column.

This column must be populated with form identifiers compatible with task creation. This identifier can be found, for example, at the end of the form designer URL. (.../structures/builder/XXXX).

You can then fill in the fields of the form. To do this, simply do as in a file import, but prefix the columns with **Submission#**. For example, to define the owner of the form (which is mandatory), you must create a **Submission#userEmail** column. To fill a list using external identifiers this gives: **Submission#ListSystemName#external**.

This way you can fill in all the fields of a form, even if they do not appear in the list of fields accessible when creating a task.

An example of a task import CSV is available at [this link](https://doc.daxium-air.com/hc/fr/article_attachments/360003904053/tasks.csv).

### Setting up the import

Once your CSV file is ready, you must upload it to Daxium-Air. To do this, you must go to the "Tasks" section, then click on "Import".

All you have to do is choose your CSV file and determine the separator you use (by default it is the semicolon in France and the comma for most other countries).

The import takes place in the background. You will be notified by the notification bell when it is finished.

### Error handling

When your import is finished, if an error prevented one or more files from being saved, you will have a return in a CSV file. This file is accessible from the notifications bell at the top right of your screen.

This will allow you to understand what went wrong and how to correct the problem.

![](/files/JoGz83frsxSVBHgNHaOb)


# Workflow & Assignation

Automate form routing and task assignment with workflow rules.

## Operation

A workflow allows you to define the life cycle of a form's submissions. This functionality allows a team to follow one another on the same work at different phases.

Example:

![](/files/HRevkt24RNkz53mQVnti)

The idea is that the cards created will be in the "Planning" state. Instead of the save button, there will be two buttons which will either allow you to stay in the current state (arrow "Save") or move to the state "In-Progress / Validation".

The status of a form is traceable by its color in list views as well as by a small insert in the form.

![](/files/7kSXyTEllUATVCUuveQ1)

When a form reaches a final state ("Done", "Blocked", "Cancelled"), it is in an archived state.

It is no longer possible to modify it (except in administrator editing mode).

The transition buttons between states are configurable on the one hand for the visual appearance (icon, wording, color) but they can also be subject to conditions which allows you to define who has the right to work on a file on this state and when the button is available.

## Assignation

To do this, we will add a user field (do not activate the "multiple" option) and in the workflow tab, we will set up the assignment by selecting the user field.

![](/files/oBcmGw2U9NeZG3e5EDQN)

![](/files/6g6JYBf1tz7LOAtDIZeV)

So that users can access the submissions assigned to them on mobile, a button must be added in the [app configuration](/user-documentation/build/building-apps/app-configuration) with the following values:

* Action: My submissions
* Option chosen: Name of form with workflow and assignment
* Filters: Submissions assigned to the user

As long as the cards are assigned to the user, they will receive all updates in real time on their mobile. When a submission reaches a final state of Workflow, its assignation remains, but the submission does not count anymore in the limit of 1,000 submissions max assigned to a single user. It is possible, using an [automation](/user-documentation/build/building-forms/automations), to unassign automatically a submission that reaches a final state in a Workflow.

Please note assignation is not possible for forms that are not first level

## Setting up

In the form designer (or form builder), there is an option in the toolbar at the top right:

![](/files/ywstCI59oe2hucv1rSS2)

In this menu it is possible to choose from a set of predefined workflows.

When you select a workflow, you are presented with a graphical representation.

Then, for all existing transitions you can decide:

* wording
* color
* of the icon
* and a button display condition

If the condition is not checked, the button does not appear. By using [conditions](/user-documentation/build/building-forms/conditions) on the current user, it is therefore possible to choose who has the right to move a form from one state to another.

In addition, it is also possible to create conditions that rely on the state of the submission.

This can make certain fields active only from the moment the form arrives in the correct state.

## Advanced functions

Users with an administrator license can directly save a form without going through a workflow transition to edit mode.

![](/files/Mrf1441oWhVpd4X30Cd2)

### Mass update the workflow state

Similarly, an administrator can modify (mass) the state of the files without going through transitions.

To do this, you must select the cards in the [table view](/user-documentation/use/views/table), then **Actions > Modify**.

![](/files/1XqfVsCfg4cJaPkfIYfT)

After selecting the "Mass Edit" button, a new window allowing you to choose the field to modify is displayed. Click on the "**Field to update**" then from the list select "**Workflow state**" :

![](/files/brM084MeVYsfGGKxt2As)

It remains to choose the workflow step to apply to the selected forms:

![](/files/D3ZRX3Twizh8ukarDvqh)

### Changing workflow state by email

It is possible to send an email containing a button that lets the recipient perform a workflow transition directly in Daxium-Air. The recipient does **not** need a Daxium-Air account to use it.

A common use case is to send a third party (a partner or a client) an email containing a [report](/user-documentation/build/building-the-reporting) generated from a submission, together with a workflow transition button. Thanks to the button, the recipient can, for example, validate or reject the report.

This is set up through the [automations](/user-documentation/build/building-forms/automations) feature, using either of these actions:

* **Send an email** — when you don't need to attach a Daxium-Air generated report.
* **Send a simple report** — and set the **Send report by email** toggle to **On**.

<figure><img src="/files/MVs3f97b3fuNgQk9EUbw" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
The **Send a simple report** action is only available if a [report template](/user-documentation/build/building-the-reporting/report-templates) is associated with the form.
{% endhint %}

On both automations, a **Add a public link** section is available, with an **Add a link** button. Clicking it opens a pop-in where you configure:

<figure><img src="/files/TJX96ZnL7qbERBJZZtZd" alt=""><figcaption></figcaption></figure>

* **List label** — the name of your link.
* **Transition** — the workflow transition triggered when the recipient clicks the link.
* **Validity period of the link** (in days).
* **Maximum number of clicks** on the link.
* **Messages** shown in case of success, expiration, maximum clicks reached, bad transition (when the submission is not in the initial state of your transition) and authentication request (when the user needs to be authenticated to perform the action).

## Limitation

* A single user cannot be assigned to more than **1,000 submissions.**
* A form using assignments cannot use broadcast or tasks.
* It is not possible to assign a submission to several users.


# Export-Import Forms

In Daxium-Air it is possible to export and import forms. This allows you to duplicate forms that already exist in your workspace.

To export, you must position yourself on the form to export. In the settings (right side menu), at the very bottom of the list of options, you will find the "Advanced actions" :

![](/files/Dl0TyGtEdM4pKdMcLUdb)

A JSON file is automatically downloaded.

To import a form, go to Settings then Forms. Top right position yourself on the list of all forms in the workspace.

![](/files/3PqSLGNIRti0oDEcRw4U)

Click on the "Import" — the form import window in JSON format is displayed:

![](/files/3C3NQv3gZ48e2UeauRQA)

After selecting the JSON file and clicking on "Start Import" at the top right, if the form already exists in the workspace, a page will be displayed to modify the name of the form. If [lists](/user-documentation/build/building-forms/lists-management) are available in the imported form, you will have to choose to use the existing lists or create new ones.

![](/files/CjoWHf5PmtJ5ZAoqaTni)

* **Use the existing list:** Means not making any modification to the list and using a list already used by another form.
* **Rename the list:** Means creating a new blank list which will need to be completed later.

After making the appropriate modifications, you can start the import using the button located at the top right of the screen.

When the export is finalized, the new form is displayed. Please note this is not in an Active [version](/user-documentation/components-concepts-terminology#version). We advise you, before activating the form, to modify the lists, in the case where a list has been renamed.

After modifying the lists, you can activate the form. The activation button is located at the top right.

When importing a form, the following elements cannot be recovered; you must modify them before being able to activate the new form:

* Lists in the [conditions](/user-documentation/build/building-forms/conditions) whether it is a new list or an already existing list
* [Reports](/user-documentation/build/building-the-reporting)
* [Automations](/user-documentation/build/building-forms/automations)
* [Submission broadcast](/user-documentation/build/building-forms/submission-broadcast)
* Limitation of user fields to groups

{% hint style="info" %}
When exporting a form that includes a list field, linked to a list of more than 500 elements, this list will not be included in the JSON file generated. Please contact our support for an alternative solution.
{% endhint %}


# Submission Broadcast

Distribute Submissions to mobile users by Group, based on conditions and without using a Workflow.

Broadcasting is a way of sharing submissions to different groups of users based on one or more conditions.

You need to create the following three elements to put it in place:

* A form with at least one valid [condition](/user-documentation/build/building-forms/conditions)
* The [group of users](/user-documentation/build/managing-users/groups) to whom the Submissions will be broadcast
* The broadcast rule that sends the Submissions

## Creation of the broadcast rule

The interface is located in **Data and forms → Submission broadcast**. By clicking on New you will have access to the window below:

![](/files/ojzSX6AITjFUYKskE01N)

These different elements are available in this interface:

1. The name of your broadcast rule.
2. The option to apply the rule also to the web platform.
3. The number of submissions meeting the rule.
4. The list of all conditions per form in a drop-down list.
5. The list of user groups available on your workspace.

When the rule is created, it is automatically replicated on Mobiles and Web (If option 2 is checked).

Here is an example on the mobile side following a broadcast: the Submissions which meet the rule are automatically sent to the mobile.

![](/files/P5euk7MooYTp7bHjI7ce)

{% hint style="warning" %}

* Broadcasting Submissions is incompatible with assignment and therefore with [workflows](/user-documentation/build/building-forms/workflow-and-assignation).
* It is not possible to use a condition on a current user field to broadcast a submission.
* It is imperative to have at least one user group for a broadcast.
  {% endhint %}


# Automations

Set up automated actions triggered by form events.

Automations allows you to define automated actions within a form. They follow the logic:

* WHEN an event occurs
* IF the form verifies a condition
* THEN an action is carried out

Automations are defined within a form and therefore only affect the forms of this form.

This is therefore a way to optimize your work by automating some of your processes.

## Examples

* Send a notification to the mobile when a new person is assigned.
* Automatically assign a person when a form arrives in a specific state.
* Send a reminder email to the assignee if the form has not been processed within 5 days.
* Send a confirmation email to the requester when the form reaches a final state.
* Delete the value of a field when we reach a date specified in the form.
* Set up a reminder (email or notification) on a specific date.
* Update an external tool when modifying data in Daxium-Air.

## Configuration

The automations are configured within the form designer as long as there is an active [version](/user-documentation/components-concepts-terminology#version).

![](/files/AYzJi5l6auuAWthWf05k)

### Name of the automation

This will allow you to find it more easily.

### Triggering event

You can select the activity on the form that will trigger the automated action.

You can choose from the following triggers:

* file created
* updated sheet
* file not modified for X days
* date of a field of a submission reached
* transition of the form in the workflow

### Condition

It is possible to choose if the action will be carried out only if a condition is verified.

The conditions are taken from the [conditions](/user-documentation/build/building-forms/conditions) of the form. These are the same conditions as for field permissions. A condition of an automation cannot be based on the current user.

### Action

Finally, you can choose the action that will be performed on the form:

Submission writing automations:

* Change the submission assignee
* Change the Workflow state of the submission
* Modify the value of a field
* Modify the owner of the submission

Submission reading automations:

* [Generate a report](/user-documentation/build/building-the-reporting/report-templates) (Word, Excel, PDF)
* Send a notification on the mobile app
* Send an email
* Call an external URL to set up a webhook (more information in the [Webhooks article](/user-documentation/connect/exporting-data/webhooks))

### Settings

You can activate or deactivate an automation.

It is possible to choose the execution order for Writing automations. The automations with the lowest launch orders are executed first. As Reading automations do not change any value in the file, the order of execution has no impact so they are executed after all writing automations, and it is not possible to set a priority order for their execution.

## Special features

* The actions carried out can be found in the history of the file.
* An action will never trigger an event. It is therefore not possible to provide cascade automations.
* A form in the final state of a workflow is not subject to automation.
* An automations will not work in scheduling a task. An automations will run successfully in the form linked to this task if an automation is correctly configured in its same form.
* Automations are not linked to form versions. They always rely on the active version.
* If an action is not feasible (email incorrectly entered, field filled with a prohibited value, etc.), it will be ignored.
* It is possible to perform several actions on the same trigger or to trigger an action on several triggers by creating several automations.
* If there are several actions based on the same date reached, there is no spécific order in their execution.
* A date automations is only launched once (this date cannot be modified once the automation has been completed). Nevertheless, when the submission is updated, the automations are recalculated, and potentially replanned.
* Imports and migrations do not allow for an automations.
* An option in mass modifications allows to choose to run automations or not
* When modifying a field in a form, the field permissions are not taken into account.
* Do not use [listing mode](/user-documentation/build/building-the-reporting/report-templates) on the automation action "send a report" because there is an incompatibility.


# Migrations

Import existing data into Daxium-Air structures.

When you modify a form when it already has submissions that are useful to you, you must implement a migration strategy. Each time you activate a form, you create what is called a [version](/user-documentation/components-concepts-terminology#version). The new files in this form will therefore all be created with this version.

But what about the files that precede this activation?

## Strategy 1: Migrate all old submissions to the new version

### Presentation

The objective here is to keep a coherent set of files which are based on the same data structure. We will therefore migrate the old files to the new version.

![](/files/hsZJhy7LWhwSHRQLL1aA)

### Setting up

To do this, you must first create the migration. This is offered to you in a window directly after activating the form.

![](/files/y005CyT1Pe4WeT2nF5db)

In the following screen (which only appears if fields have been deleted) you must match the system names of the previous version with the system names of the new version to preserve data from renamed fields. Then simply validate by clicking on "Save and apply".

![](/files/8BzMT40rUuNSmSmKvC3A)

If no fields had been deleted, you can directly "Start migration" from the window.

{% hint style="info" %}
The method proposed above allows you to migrate the files to the server. But the files can remain in their state on mobiles. If this is the case, when the mobile sends an update of the file, the latter will be automatically migrated upon receipt on the server.
{% endhint %}

### Cases where this strategy is recommended

* When you are creating the form and it is not yet used in real conditions.
* When you do not modify the data structure
* When you add a functionality that you think is necessary on all forms (including existing forms or those currently being processed).
* Ex: setting up a [representation](/user-documentation/build/building-forms/representation) or a location field of the file on a map
* Added a new [condition](/user-documentation/build/building-forms/conditions) to prevent an [automation](/user-documentation/build/building-forms/automations) from taking place with each modification

## Strategy 2: Allow file migration

### Presentation

The strategy here is to allow files to move to the new version only when they are updated.

![](/files/AKQx6YenIfD2iAdr3mQQ)

### Setting up

Just follow the previous protocol, but do not apply the migration in the last step. You will therefore have to click on "Save" and not on "Save and Apply".

### Cases where this strategy is recommended

If you wish to update a [report template](/user-documentation/build/building-the-reporting/report-templates) or an [automation](/user-documentation/build/building-forms/automations) based on a newly created field while minimizing the impact on the current work of your collaborators (see below: Special case of automations and report templates).

## Strategy 3: Leave the cards in their version

### Presentation

Finally the third strategy consists of leaving the sheets in their version.

![](/files/dZAdzq66BAx0pMGDCpM6)

### Setting up

When you activate the form and the following pop-up appears, click on "Close".

![](/files/y005CyT1Pe4WeT2nF5db)

{% hint style="info" %}
It will always be possible in the future to change your mind and migrate the files. To do this, click on the "Parameters" button, then in the "Advanced actions" click on "Migrations".

You can then create a new migration ('New' button) in order to configure how to move from one version to another and move the files from one version to another ('Manual migration' button).
{% endhint %}

### Cases where this strategy is recommended

* If you want to add a required field, this method is required.
* When you delete a field in a form and you don't want to lose data from previous forms.
* When you make significant changes to the form and you are unsure of the impacts a migration might have.
* Generally speaking, a migration can always take place retrospectively, but we cannot reverse a completed migration. So if in doubt, it is safer not to migrate.

## Additional information

### Triggering the automations

A migration does not trigger the [automations](/user-documentation/build/building-forms/automations) (regardless of the trigger configured).

### Calculation of formulas

All automatic [formulas](/user-documentation/build/building-forms/fields/formulas) are recalculated during migrations. If you do not want these formulas to be recalculated, we invite you to either transform them into manual formulas, or not to perform the migration.

Exception: formulas are not recalculated during migration if there are at least 5 formulas with relationships (parents and/or children).

### Special case of automation and report models

All the functionalities of a form are governed by the versions ([conditions](/user-documentation/build/building-forms/conditions), [representation](/user-documentation/build/building-forms/representation), functional status, [workflow](/user-documentation/build/building-forms/workflow-and-assignation), etc.) with the exception of [automations](/user-documentation/build/building-forms/automations) and [report templates](/user-documentation/build/building-the-reporting/report-templates).

If you delete a field or a condition in a version of the form that is used in an automation or in a report template, the functioning of the latter is therefore compromised for the forms of this version.

Conversely, if you want to update a report template or an automation based on a newly created field or condition, they risk working poorly on forms in older versions. It may therefore be appropriate to migrate them with strategy 1 or 2.


# Building Apps

Create and deploy custom mobile applications for your field teams.

Daxium-Air lets you assemble your structures into mobile applications that your field teams can use on their smartphones and tablets. There is no limit on how many applications you can have on your workspace.

This section covers:

* [App Configuration](/user-documentation/build/building-apps/app-configuration) — layout, buttons, and access rights for each custom app.
* [Mobile Deeplinks](/user-documentation/build/building-apps/mobile-deeplinks) — link buttons to external applications on the device.


# App Configuration

Understand how apps are structured and configured in Daxium-Air.

To create applications, go on the web under Settings > Personalization > Custom apps.

From this menu, you can create customized applications and view existing ones, identifiable by a logo and name

## Application name & logo

The following changes have no effect on the application name or logo visible in the PlayStore / AppStore.

![](/files/nzcJBY5TEhjBlGvFQFgb)

## Loading

This option allows you to choose a logo when loading the custom application.

![](/files/2e3lgX6T76oZyqeWsrtU)

## Home page

You will have the choice between two themes:

![](/files/0gxcaDD1sgbxF4EAEf2k)

Once one of the themes has been validated, press **Next** to go to the next step to define the type of button:

![](/files/JKlK67VVVdwlgVO11bM0)

**Default template** when creating a custom application:

![](/files/ZcgyQdfnLtUkHYwLF6D8)

This one uses the 3 block layout diagram. You have four choices available to define your layout scheme which will be applied to the mobile.

The example below uses the 8-box diagram with the banner activated. Banner parameters such as location and size are configurable.

![](/files/lrYOmyUdYeC0Khi0GYtn)

The configuration of the buttons allows you to establish their role and their visuals.

![](/files/LHQbZfyaNfcVRUJih8bo)

A. Action that will be performed when using the button.

* **Home:** Goes to the homepage
* **New submission:** Creating a new data entry for a [form](/user-documentation/build/building-forms)
* **My submissions:** All the submissions downloaded on your device (first level forms only). It could be the ones assigned to you, [broadcasted to you](/user-documentation/build/building-forms/submission-broadcast), searched by you (advanced search), or that you created from scratch
* **Synchronize:** Synchronizes the app to receive the latest configuration updates (lists, forms structure, broadcasted submissions, etc...)
* **Settings:** Go to the settings of the Daxium-Air application
* **Autofill:** Menu to [pre-fill](/user-documentation/build/building-forms/field-options/prefill) specific values of some fields for every submission you create
* **My tasks:** The [tasks](/user-documentation/build/building-forms/tasks) attributed to you
* **Search:** Search online for any submission of a specific form. Fields need to be declared as [searchable](/user-documentation/build/building-forms/field-options/advanced-search)
* **NFC Configuration:** Feature to encode your NFC tags with an automation
* **Web view:** Opens any URL in a web view embedded in Daxium-Air's application
* **External application:** Allows for [deep linking](/user-documentation/build/building-apps/mobile-deeplinks) another application
* **Power BI Report:** Display on the mobile any of your authorized [Power BI Reports](/user-documentation/connect/business-intelligence/power-bi#view-a-power-bi-report-on-daxium-air)

B. Force access to a specific form (this option depends on the type of action selected in A).

C. Text visible on the button (translatable according to the language of the connected user).

D. Button background color.

E. This option depends on the design selected previously.

Click another button to continue the configuration. Save regularly.

![](/files/9B5iesjYu2QeVPT1q4KX)

## App menu

Like on the home page, you can modify/add buttons and configure their actions.

![](/files/k593ir9RIYjmVRUTcPMB)

## App settings

This section includes a settings manager which allows you to define which ones will be assigned during the first connection to the mobile application. You configure the activation of the options that will be present on the mobile, such as the activation of GPS location when creating a submission. However, in the following case, a user will be able to modify the parameter because it is **visible** and **modifiable** in the application.

If you wish to remove this possibility, simply deactivate it using the buttons on the right:

![](/files/m02ZlNMVqcwl9D3GqSEO)

## Usage rights

This menu allows you to partition one or more applications to one or more user groups.

Select which [**groups**](/user-documentation/build/managing-users/groups) can access the application:

![](/files/tQ8CI9d4kAWVVIQ5LX7y)


# Mobile Deeplinks

Use deeplinks to open specific screens in the Daxium-Air mobile app from external sources.

The "deep linking" in mobile apps is a technique for creating direct links to specific locations within an app. At Daxium, this feature was first used to describe actions behind app customisation widgets on iOS and Android.

It then became widespread for navigation in the Android v2 application and for communication with other mobile applications.

Such a deep link is a URI, (like a URL on the web) that begins with *daxium-air://* mobile applications.

## Principles

### Cross-app redirects

When an application calls a deep link, it goes into the background while the Daxium-Air application comes to the foreground. The calling application can be closed by the system at any time. Once the process in Daxium-Air is complete, the calling application can be recalled.

### Destinations

Deeplinks support multiple destinations, including home page, listing editor, listing view, sync page, and others.

Links may also open external applications or allow the user to log out of the Daxium-Air application.

### Limitations

There are some limitations and possible errors. If the user is not logged in, or does not have access to the specified form, a fatal error is displayed. Malformed paths or non-compliant field values produce warnings (see [Error handling](#error-handling) below).

## Usage

### Create a form with parameterized values

Undoubtedly the most interesting feature in the context of calling from a third-party application. This application could thus

* target a specific form to open
* [pre-fill](/user-documentation/build/building-forms/field-options/prefill) specific fields with values passed as parameters

Here, the form identifier is mandatory and the values of the optional elements (fields) can be added as parameters.

Once received, they are inserted into the newly created submission.

Link root path: `daxium-air://editor/create/<structure_id>`. The `structure_id` parameter (corresponding to the technical ID of the form) is part of the path. If it is configured, it directs to the correct form; otherwise, a selector is presented to the user, who will have to make their choice among all the available forms.

Example

Such a deep link is a URI, formed as :

`daxium-air://editor/create/XXX?item1=value1&item2=value2`

Full example:

```
daxium-air://editor/create/137396?string=Hello, world&number=123.456&boolean=true&date=2023-08-23T13:00:52Z&email=bob@daxium.com&phone=+33612345678
```

### Field compatibility To date, the following fields are supported

* Text (without rich text option)
* Number
* Date
* Email
* Telephone
* Boolean

Each field value must conform to its expected typology and its associated format, otherwise it is not inserted.

Deep link settings take priority over defaults and pre-fill.

All other field types are ignored by this mechanism, but can be populated via the usual default values and user-defined pre-fill.

Note! This function is currently only available on the Daxium-Air Android V2 application

## Error handling

| Code            | Message                                                                     | Criticality |
| --------------- | --------------------------------------------------------------------------- | ----------- |
| `DAERR-DEL1001` | No user is connected to the Daxium-Air application.                         | 🔴 Fatal    |
| `DAERR-DEL1002` | You cannot create such data because you do not have the corresponding form. | 🔴 Fatal    |
| `DAERR-DEL1003` | You cannot create such data because the corresponding form is disabled.     | 🔴 Fatal    |
| `DAERR-DEL1004` | You cannot create such data because the form is not top level.              | 🔴 Fatal    |
| `DAERR-DEL1005` | The field named `structureFieldName` does not exist in the form.            | 🟡 Warning  |
| `DAERR-DEL1006` | Number field `structureFieldName` has an incorrect type in the form.        | 🟡 Warning  |
| `DAERR-DEL1007` | The value in field `structureFieldName` cannot be interpreted as a number.  | 🟡 Warning  |
| `DAERR-DEL1008` | The value in field `structureFieldName` cannot be interpreted as a boolean. | 🟡 Warning  |
| `DAERR-DEL1009` | The value in field `structureFieldName` cannot be interpreted as a date.    | 🟡 Warning  |
| `DAERR-DEL1010` | The given path is unknown.                                                  | 🔴 Fatal    |
| `DAERR-DEL1011` | The value in the field cannot be interpreted as a duration.                 | 🟡 Warning  |
| `DAERR-DEL1012` | The field cannot be used here.                                              | 🟡 Warning  |

{% hint style="info" %}
As the journey through the Daxium-Air application via deep linking is limited to a single screen, once completed, the calling application will be returned to the user.
{% endhint %}

{% hint style="success" %}
Deep linking with Daxium-Air offers an efficient method to navigate and interact with the application, but it is important to respect its limitations and properly handle errors for an optimal user experience.
{% endhint %}


# Building the Reporting

Generate professional reports from your field data in Word, Excel or PowerPoint.

Daxium-Air includes a powerful reporting engine that lets you generate documents from your submission data using customizable templates. Supported formats are Word, Excel, PPT & PDF. The reports can then be sent automatically or periodically by email to receivers (either Daxium-Air users, or external users).

This section covers:

* [General Concepts](/user-documentation/build/building-the-reporting/general-concepts) — templates, tags, and delivery fundamentals.
* [Syntax & Functions](/user-documentation/build/building-the-reporting/syntax-functions) — full tag reference and available functions.
* [Report Templates](/user-documentation/build/building-the-reporting/report-templates) — format-specific guidance for Word, Excel, and PowerPoint.
* [Report Types](/user-documentation/build/building-the-reporting/report-types) — scheduled and automatic report delivery.


# General Concepts

Overview of the Daxium-Air reporting system — templates, triggers and delivery.

Daxium-Air's reporting system is based on **templates** that can be of 3 different types : Word, Excel or PPT. For each template, we also have an engine that can convert the generated reports in PDF. A report can only be based on a single form. However, you can also get the data of any related child form.

We use a system of tags to identify which field is supposed to go where in the report. The fields are identified by their system names (see [Syntax & Functions](/user-documentation/build/building-the-reporting/syntax-functions) for the full reference).

Here is an example of a report template:

![](/files/uinCPWBoLTdH1l1nJeJJ)

We can see that it includes all the system names with a particular syntax. Indeed, they must be surrounded by <%…%> to notify Daxium-Air that it must match the field data entered by the user in the form. It is important to note that it is possible to apply any font changes to what will be displayed. Like **<%EmployeeName%>** which is in bold so the customer name will be displayed in bold in the report.

All the formatting you applied on the Word/Excel/PPT will be applied in the report.

## Add a report template in Daxium-Air

Go to Settings > Report > New:

![](/files/dh8rENM4zhhCjUhqzmyZ)

![](/files/eIaGQqSju4woB4mlHN57)

Next, select the form to which you wish to link this report template, then select the format of your template using the button provided for this purpose.

The “Listing mode” box will allow you to generate a report for several submissions at the same time, particularly relationships.

## Access rights management for report templates

Once your template has been created, you can restrict this model to one or multiple groups. You will find the option **"Restrict to group"** in the image below. In the dropdown will be your list of [groups](/user-documentation/build/managing-users/groups).

![](/files/x3bvhRhtnXIhhxpjPfTN)

Once the group(s) have been selected (Group 1 and Group 2 in the above picture), only people from those group will be able to access this template, and thus generate a report based on this template.

Don't forget to save after you have added the groups!

## PDF Fonts

Word offers a multitude of fonts, but for generating reports in PDF format, the available fonts are the following ones:

* **Courier**, Courier Bold, Courier Oblique, Courier Bold-Oblique
* **Helvetica**, Helvetica Bold, Helvetica Oblique, Helvetica Bold-Oblique
* **Times Roman**, Times Bold, Times Italic, Times Bold-Italic
* **Symbol**
* **Zapf DingbatsNB**
* **Lora**, Regular, Bold, Italic, Bold Italic, Medium, Medium Italic
* **Poppins**, Black, Black Italic, Bold, Bold Italic, Extrabold, Extrabold Italic, Medium, Medium Italic, Thin, Thin Italic, Light, Light Italic, SemiBold, SemiBold Italic

If the font chosen in the Word template is not available in PDF format, an automatic conversion of the font will be carried out to one available in PDF. It is possible to make a request to Daxium support to add a new font to the list above, provided that the font in question is available for download and royalty-free.


# Syntax & Functions

Reference for all report template syntax, system fields, and functions available in Daxium-Air reports.

## Functions index

| Instruction / Function                     | Description                                                      | Section                                               |
| ------------------------------------------ | ---------------------------------------------------------------- | ----------------------------------------------------- |
| `<%SystemName%>`                           | Insert a field by its system name                                | [Inserting a Simple Field](#inserting-a-simple-field) |
| `<%MarkDown(SystemName)%>`                 | Insert a rich text field preserving layout (Word only)           | [Inserting a Simple Field](#inserting-a-simple-field) |
| `<%MarkDownEx([SystemName], Font, Size)%>` | Insert a rich text field with a forced font and size (Word only) | [Inserting a Simple Field](#inserting-a-simple-field) |
| Field arithmetic `<% A + B %>`             | Arithmetic between fields                                        | [Inserting a Formula](#inserting-a-formula)           |
| `Repeat()`                                 | Repeat a table row for each submission in listing mode           | [Repeat()](#repeat)                                   |
| `DISTINCT()`                               | Suppress duplicate values in a listing                           | [Repeat()](#repeat)                                   |
| `Image()` / `Img()`                        | Insert a single image                                            | [Image Manipulation](#image-manipulation)             |
| `Images()`                                 | Insert all images from a multi-image field                       | [Image Manipulation](#image-manipulation)             |
| `UseImagesPreview()`                       | Resize images before inserting to reduce file size               | [Image Manipulation](#image-manipulation)             |
| `#xComment`                                | Retrieve the comment attached to an image                        | [Image Manipulation](#image-manipulation)             |
| `SetPdfJpegQuality()`                      | Convert images to JPEG with a given quality index                | [Image Manipulation](#image-manipulation)             |
| `Map()`                                    | Display a GPS map centred on the submission location             | [Image Manipulation](#image-manipulation)             |
| `ImageExif()`                              | Extract Exif metadata (date, GPS) from a photo                   | [Image Manipulation](#image-manipulation)             |
| `BarCode()`                                | Insert a barcode                                                 | [Image Manipulation](#image-manipulation)             |
| `QrCode()`                                 | Insert a QR code                                                 | [Image Manipulation](#image-manipulation)             |
| `ImageWatermark()`                         | Overlay text on an image                                         | [Image Manipulation](#image-manipulation)             |
| `Index()`                                  | Auto-incremented row number in a listing                         | [Utility Functions](#utility-functions)               |
| `MapLetter()`                              | Pin letter generated by Google Maps                              | [Utility Functions](#utility-functions)               |
| `Format()` / `F()`                         | Format a date or number field                                    | [Utility Functions](#utility-functions)               |
| `Date()`                                   | Current date and time                                            | [Utility Functions](#utility-functions)               |
| `AddHours()`                               | Add or subtract hours from a date                                | [Utility Functions](#utility-functions)               |
| `AddDays()`                                | Add or subtract days from a date                                 | [Utility Functions](#utility-functions)               |
| `AddMonths()`                              | Add or subtract months from a date                               | [Utility Functions](#utility-functions)               |
| `AddYears()`                               | Add or subtract years from a date                                | [Utility Functions](#utility-functions)               |
| `Add()`                                    | Sum multiple numeric values, treating null as 0                  | [Utility Functions](#utility-functions)               |
| `ToUpper()` / `ToLower()`                  | Convert a string to upper or lower case                          | [Utility Functions](#utility-functions)               |
| `List()`                                   | Join multiple values with a separator                            | [Utility Functions](#utility-functions)               |
| `Split()`                                  | Extract a segment from a delimited string                        | [Utility Functions](#utility-functions)               |
| `ToNumber()` / `N()`                       | Convert text to a number                                         | [Utility Functions](#utility-functions)               |
| `ToDate()` / `D()`                         | Convert text to a date                                           | [Utility Functions](#utility-functions)               |
| `ToString()` / `S()`                       | Convert a value to text                                          | [Utility Functions](#utility-functions)               |
| `If()`                                     | Return a value based on a condition                              | [Conditional Statements](#conditional-statements)     |
| `Exists()`                                 | Test whether a field exists in the form                          | [Conditional Statements](#conditional-statements)     |
| `Hide()` … `<%End%>`                       | Hide a document section when a condition is true                 | [Conditional Statements](#conditional-statements)     |
| `Display()` … `<%End%>`                    | Show a document section when a condition is true                 | [Conditional Statements](#conditional-statements)     |
| `DisplayRow()`                             | Show a table row when a condition is true                        | [Conditional Statements](#conditional-statements)     |
| `Contains()`                               | Test whether a string contains a pattern                         | [Conditional Statements](#conditional-statements)     |
| `StartsWith()`                             | Test whether a string starts with a value                        | [Conditional Statements](#conditional-statements)     |
| `EndsWith()`                               | Test whether a string ends with a value                          | [Conditional Statements](#conditional-statements)     |
| `Relation()`                               | Repeat rows for each related child submission                    | [Relationship](#relationship)                         |
| `Count()`                                  | Count submissions in the current set                             | [Aggregation Functions](#aggregation-functions)       |
| `Sum()`                                    | Sum a numeric field across all submissions                       | [Aggregation Functions](#aggregation-functions)       |
| `Avg()`                                    | Average value of a field across all submissions                  | [Aggregation Functions](#aggregation-functions)       |
| `Min()` / `Max()`                          | Minimum or maximum value of a field                              | [Aggregation Functions](#aggregation-functions)       |
| `GlobalMap()`                              | Display multiple GPS points on a single map                      | [Aggregation Functions](#aggregation-functions)       |
| `Chart()`                                  | Display a bar or pie chart from aggregated data                  | [Aggregation Functions](#aggregation-functions)       |
| List field accessors                       | Extract levels or individual items from a list field             | [Special Cases](#special-cases)                       |
| User field accessors                       | Extract names and emails from a user field                       | [Special Cases](#special-cases)                       |
| Workflow state tags                        | Display the current workflow state and its colour                | [Special Cases](#special-cases)                       |
| `FileImage()`                              | Insert PDF pages as images in a report                           | [Special Cases](#special-cases)                       |
| `FilePageCount()`                          | Count pages in an attached PDF                                   | [Special Cases](#special-cases)                       |

***

## System Fields

Use the following tags to access submission metadata in any report template.

### Submission identification

| Field             | Tag                            |
| ----------------- | ------------------------------ |
| Submission number | `<%SubmissionId%>` or `<%Id%>` |
| UID number        | `<%SubmissionUid%>`            |

### Submission creation

| Field                           | Tag                          |
| ------------------------------- | ---------------------------- |
| Date of first save on web       | `<%Created_At%>`             |
| Date of submission creation     | `<%DataCreatedAt%>`          |
| Submission creator — first name | `<%[CreateUser.FirstName]%>` |
| Submission creator — last name  | `<%[CreateUser.LastName]%>`  |
| Submission creator — email      | `<%[CreateUser.Email]%>`     |

### Report creator

| Field                       | Tag                          |
| --------------------------- | ---------------------------- |
| Report creator — first name | `<%[ReportUser.FirstName]%>` |
| Report creator — last name  | `<%[ReportUser.LastName]%>`  |
| Report creator — email      | `<%[ReportUser.Email]%>`     |

### Last update

| Field                     | Tag                      |
| ------------------------- | ------------------------ |
| Date of last save on web  | `<%[Updated_At]%>`       |
| Date of submission update | `<%[Updated_At]%>`       |
| Last modified by (email)  | `<%[UpdateUser.Email]%>` |

### Form

| Field           | Tag                 |
| --------------- | ------------------- |
| Form name       | `<%StructureName%>` |
| Form identifier | `<%StructureId%>`   |

### Related task

| Field                        | Tag                       |
| ---------------------------- | ------------------------- |
| Planned start date and time  | `<%[Task.PlannedStart]%>` |
| Expected end date and time   | `<%[Task.PlannedEnd]%>`   |
| Deadline                     | `<%[Task.PlannedDue]%>`   |
| Actual start date and time   | `<%[Task.RealStart]%>`    |
| Effective end date and time  | `<%[Task.RealEnd]%>`      |
| State (done, to be done)     | `<%[Task.FillStatus]%>`   |
| Time status (on time, late…) | `<%[Task.TimeStatus]%>`   |

### Other information

| Field                                 | Tag                                             |
| ------------------------------------- | ----------------------------------------------- |
| Company name (from URL)               | `<%CompanyTitle%>`                              |
| Native GPS position (mobile creation) | `<%SubmissionLatitude%><%SubmissionLongitude%>` |

## Inserting a Simple Field

A form field is inserted by surrounding its system name with `<%` and `%>`. These markers tell the system where the submission data should be inserted. You can apply any formatting supported by Word/Excel (bold, italic, underline) directly to the tag.

```
<%System_Name%>
```

If your Text field uses the "Rich Text" option, use `<%MarkDown(SystemName)%>` to preserve the layout in Word reports. This is not functional in Excel.

To also force a specific font and font size on that rich text, use `<%MarkDownEx([SystemName], 'Font', Size)%>` instead:

```
<%MarkDownEx([String4],'Calibri',14)%>
```

| Parameter      | Description                        |
| -------------- | ---------------------------------- |
| `[SystemName]` | System name of the rich text field |
| `'Font'`       | Font to apply                      |
| `Size`         | Font size                          |

This only works on Text fields using the "Rich Text" option, in Word reports. See [PDF Fonts](/user-documentation/build/building-the-reporting/general-concepts#pdf-fonts) for the list of fonts supported when the report is converted to PDF.

{% hint style="warning" %}
System names are case sensitive.
{% endhint %}

## Inserting a Formula

You can apply calculations directly between fields in a report tag.

```
<%FieldName1 <operator> FieldName2 | ConstantExpression%>
```

`<operator>` can be any mathematical operation: `+`, `-`, `*`, `/`, `%`

* **ConstantExpression** is a number with or without decimal places
* Parentheses are supported
* `%` is also the modulo operator

**Examples:**

* `<%Price * 1.196%>` — With Price = 10: result is **11.96**
* `<%(Price * Quantity) – (15 / 100) * (Price * Quantity)%>` — With Price=18 and Quantity=2: result is **30.6**

Here is the complete list of supported mathematical functions. These are also **case sensitive**.

![](/files/CggIAkPgiDl7dvXAFrLb)

## Repeat()

When the report template is in **Listing Mode**, the `Repeat()` instruction repeats a section of the document for each row of data. It must be placed in the first (leftmost) cell of the table row to repeat.

```
<%Repeat(filter, sort)%>
```

| Parameter | Description                                                       | Default |
| --------- | ----------------------------------------------------------------- | ------- |
| `filter`  | Filtering condition, e.g. `Id>3` or `DateField<#date#` (optional) | None    |
| `sort`    | Field system name to sort results by (optional)                   | None    |

{% hint style="info" %}
The entire template can only contain one `Repeat()` instruction. If several are present, only the first one is detected.
{% endhint %}

Ex :

<figure><img src="/files/3I5NzP4NGni3G6GTFxob" alt=""><figcaption></figcaption></figure>

With 3 lines of data, the result is as follows:

<figure><img src="/files/s5eoLrzZKees92XuMJ2z" alt=""><figcaption></figcaption></figure>

`Repeat()` can be used in four ways:

| Usage                      | Syntax                  |
| -------------------------- | ----------------------- |
| Without any criteria       | `<%Repeat()%>`          |
| Filtering only             | `<%Repeat(Id>3)%>`      |
| Sorting only               | `<%Repeat(,Name)%>`     |
| Both filtering and sorting | `<%Repeat(Id>3,Name)%>` |

### Filtering results

Filter the repeated rows using a condition:

```
<%Repeat(DateField > #12/01/2023#)%>
```

Dates use the format `Day/Month/Year`. You can also use `#date#` as a variable for today's date:

```
<%Repeat(DateField < #date#)%>
<%Repeat(DateField < #date-5d#)%>
```

The second example means "5 days before today". The format is not case sensitive (`#Date-5D#` also works).

You can define the time interval using the units in the table below:

![](/files/AR0b2Im7d6zhYyr6S9Rn)

{% hint style="info" %}
Use `+` instead of `-` to refer to future dates. Example: `<%Repeat(DateField < #date+10d#)%>` means today + 10 days.
{% endhint %}

You can combine filter conditions using `AND` or `OR` operators:

```
<%Repeat(DateField<#date-5d# AND Id >= 3)%>
```

{% hint style="warning" %}
This filter syntax does not support functions that use Field System Names.
{% endhint %}

### Avoiding data redundancy — DISTINCT()

When using `Repeat()`, use `DISTINCT()` to avoid repeating the same value:

```
<%DISTINCT('Client')%>
```

For fields with multiple separate texts (dates, multi-level lists), use a second argument as a concatenation separator:

```
<%DISTINCT('F(\'MM yyyy\',CreatedAt)', ',')%>
```

This returns all unique months of submission creation across the repeated set.

### Sorting results

`Repeat()` accepts a second parameter to sort the results. The sorting criterion must be a column name:

```
<%Repeat(filteringCriteria, SortingCriteria)%>
```

Example:

```
<%Repeat(Id>15860, Name)%>
```

![](/files/xDRepBIIwscnLmIDIQeS)

## Image Manipulation

### Image()

Insert a single image from an image field:

```
<%Image(FieldName, Width, Height)%>
```

Shorthand alias: `<%Img(FieldName, Width, Height)%>`

| Parameter   | Description                       | Default         |
| ----------- | --------------------------------- | --------------- |
| `FieldName` | System name of the image field    | —               |
| `Width`     | Image width in pixels             | —               |
| `Height`    | Image height in pixels (optional) | Same as `Width` |

* If height is omitted, the image is placed in a square of `Width × Width` pixels
* If both width and height are specified, the image fits that rectangle without distortion

**Examples:**

Large photo: `<%Image(ImageFieldName, 200)%>`

![](/files/fyt50MDdKhVjvzgsOt74)

Small photo: `<%Img(ImageFieldName, 70, 50)%>`

![](/files/TERSdMLtYgb6duxtNkOI)

### Images()

For image fields that allow multiple images (max > 1), use `Images()` inserted in a one-column table:

```
<%Images(FieldName, start, end)%>
```

| Parameter   | Description                                    | Default |
| ----------- | ---------------------------------------------- | ------- |
| `FieldName` | System name of the multi-image field           | —       |
| `start`     | Index of the first image to include (optional) | 1       |
| `end`       | Index of the last image to include (optional)  | All     |

![](/files/Br9lFUYLW2tsS7JrN7u4)

To define a size for the images, add `<%Image()%>`:

```
<%Images(Photo)%><%Image(400)%>
```

To retrieve additional data (metadata) from the images, enter the field in a table with the following structure:

![](/files/sX0zxY8Oy2eWgH8xlNaF)

### Resizing images — UseImagesPreview()

Resize images before inserting them to reduce report weight and generation time:

```
<%UseImagesPreview('ImageSize')%>
```

Replace `ImageSize` with the attribute from the table below. All images following this tag will be resized accordingly:

![](/files/QCzSuWNP4DCaahVERz2o)

{% hint style="info" %}
`UseImagesPreview()` does not allow extraction of Exif data. There is no Exif information on preview images.
{% endhint %}

### Retrieving comments of an image

Display the comment attached to a specific image in an image field:

```
<%Value:If(Exists('ImageFieldName#xComment'), [ImageFieldName#xComment], '')%>
```

{% hint style="info" %}
**Explanation:**

* `ImageFieldName` is the system name of the image field.
* `#x` indicates the image number (1, 2, 3, etc.).
* `Comment` accesses the comment associated with the image.
  {% endhint %}

Example: `<%Value:If(Exists('Photo#1Comment'), [Photo#1Comment], '')%>`

### Convert images to JPG — SetPdfJpegQuality()

Reduce image size by converting them to JPEG. The function takes a quality index between 1 and 100:

```
<%SetPdfJpegQuality(10)%>
```

Add this tag in the Word document or in a cell of the PPActions sheet.

### Insert an image from a relationship field (Excel)

To insert a photo from a related submission in an Excel report (not in listing mode):

```
<%Img([RelationshipSystemName.ImageSystemName], 60, 60)%>
```

{% hint style="info" %}
Replace snake\_case with CamelCase: capitalise the first letter of each word in the system name and remove underscores.
{% endhint %}

### Map()

Display a map centered on the GPS coordinates of the submission. Requires the Google Maps API and a location field configured in the form.

```
<%Map(latitude, longitude, zoom, width, height, MapType)%>
<%Map(address, zoom, width, height, MapType)%>
```

| Parameter   | Description                               |
| ----------- | ----------------------------------------- |
| `latitude`  | Field containing the latitude coordinate  |
| `longitude` | Field containing the longitude coordinate |
| `address`   | Your location field system name           |
| `zoom`      | 1 to 22 (22 = most detailed)              |
| `width`     | Map width in pixels                       |
| `height`    | Map height in pixels                      |
| `MapType`   | 0 = Street View, 1 = Satellite, 2 = Mixed |

Example with default location: `<%Map(SubmissionLatitude, SubmissionLongitude, 17, 200, 200)%>`

![](/files/KdOjdCmLmAWPBYF38hUL)

Example with a location field: `<%Map(LocalizationIntervention_latitude, LocationIntervention_longitude, 17, 200, 200)%>`

![](/files/RHKX2lebyBYEzyUcWt7N)

### Exif data — ImageExif()

Retrieve Exif metadata stored in a photo (text data, GPS coordinates, etc.):

```
<%ImageExif(FieldName, 'ExifAttribute')%>
```

| Parameter         | Description                                                                                 |
| ----------------- | ------------------------------------------------------------------------------------------- |
| `FieldName`       | System name of the image field                                                              |
| `'ExifAttribute'` | Exif attribute key, e.g. `'DateTime'`, `'GpsLatitude'`, `'GpsLongitude'`, `'GpsLatitudeDM'` |

![](/files/yLjOjekXwKWoLBRSwoGv)

**Examples:**

* Image date: `<%ImageExif(Photo, 'DateTime')%>` *(Result: 08/25/2004)*
* Map from photo GPS: `<%Map(ImageExif(LocationField, 'GpsLatitude'), ImageExif(LocationField, 'GpsLongitude'), 17, 150, 150)%>`

![](/files/RHKX2lebyBYEzyUcWt7N)

{% hint style="info" %}
For Excel reporting in Listing mode, the instruction to get Exif data is: `<%Value:ImageExif([Photo],'DateTime')%>` *(Result: 25/08/2004 09:32)*
{% endhint %}

### Barcodes — BarCode()

Insert a barcode into a document:

```
<%BarCode(data, 'BarCodeType', width, height)%>
```

| Parameter       | Description                            |
| --------------- | -------------------------------------- |
| `data`          | The data to encode                     |
| `'BarCodeType'` | Barcode format — see types table below |
| `width`         | Barcode width in pixels                |
| `height`        | Barcode height in pixels               |

**Example:** `<%BarCode('123456789012', 'EAN13', 120, 120)%>`

![](/files/Sf8jhbOjJldxqg0OBCEA)

Available barcode types:

| Code                | Description                                                            |
| ------------------- | ---------------------------------------------------------------------- |
| **Code11**          | Primarily used for telecommunications equipment labeling               |
| **Codabar**         | Old code used in library and blood bank systems                        |
| **EAN13**           | European article numbering — data must be 12 digits                    |
| **EAN8**            | Compressed EAN for small products — data must be 7, 9, 12 or 13 digits |
| **Industrial2of5**  | Old code, not in common use                                            |
| **Interleaved2of5** | Compact digital code, used in industry and air cargo                   |
| **MSI**             | Variation of the Plessey code, common in the US                        |
| **Postnet**         | Used by the US Postal Service for automated mail sorting               |
| **UPCA**            | Universal product code for retail — data must be 12 digits             |
| **UPCE**            | Compressed UPC for small products — data must be 6 or 7 digits         |
| **Matrix2of5**      | Data can be any number of digits                                       |
| **IntelligentMail** | Data must be 20 digits                                                 |

### QR Codes — QrCode()

Insert a 2D QR code into a template:

```
<%QrCode(data, width, height)%>
```

| Parameter | Description              |
| --------- | ------------------------ |
| `data`    | The data to encode       |
| `width`   | QR code width in pixels  |
| `height`  | QR code height in pixels |

Example: `<%QrCode('A String To Encode 123456', 150, 150)%>`

![](/files/pKafkzs0GPRPeLE2cs4K)

### Watermark — ImageWatermark()

Add text overlay on an image:

```
<%ImageWatermark(ImageFieldName, ImageWidth, ImageHeight, WatermarkText, HorzAlign, VertAlign, ForegroundColor, BackgroundColor, BackGroundOpacity, FontSize)%>
```

| Parameter           | Description                                 | Default       |
| ------------------- | ------------------------------------------- | ------------- |
| `ImageFieldName`    | System name of the image field              | —             |
| `ImageWidth`        | Image width in pixels                       | —             |
| `ImageHeight`       | Image height in pixels                      | —             |
| `WatermarkText`     | Text to display on the image                | —             |
| `HorzAlign`         | Horizontal alignment: Left, Center, Right   | Right         |
| `VertAlign`         | Vertical alignment: Top, Middle, Bottom     | Bottom        |
| `ForegroundColor`   | Text color (#RRGGBB or constant)            | Red           |
| `BackgroundColor`   | Text background color (#RRGGBB or constant) | White         |
| `BackGroundOpacity` | Background opacity between 0 and 1          | 0 (invisible) |
| `FontSize`          | Font size in pixels                         | 12            |

**Examples:**

```
<%ImageWatermark([Support], 300, 0, 'Welcome')%>
<%ImageWatermark([Support], 300, 0, 'Welcome', 'Left', 'Top', 'Red', 'White', 0.9, 14)%>
```

To insert a line break in the watermark text, use `\u000A`:

```
<%ImageWatermark(ImageSystemName, 300, 0, 'Hello\u000Aworld\u000A!', 'Left', 'Top', 'Red', 'White', 0.9, 14)%>
```

![](/files/4k19eMSPfu4IksVd9I6G)

You can combine multiple data values using `List()`:

```
<%ImageWatermark([ImageSystemName], 300, 0, List(',', ImageExif(ImageSystemName, 'GpsLatitudeDM'), ImageExif(ImageSystemName, 'GpsLongitudeDM')), 'Left', 'Top', 'Red', 'White', 0.9, 14)%>
```

To use a field value as the watermark text:

```
<%ImageWatermark(ImageSystemName, 300, 0, FieldSystemName, 'Center', 'Middle', 'Red', 'White', 0.9, 14)%>
```

### Watermark on a multi-image field

When an image field contains several images, combine `Images()` and `ImageWatermark()`:

```
<%Images(SystemNameImagefield)%><%ImageWatermark(200, 0, List(',', ImageExif('GpsLatitude'), ImageExif('GpsLongitude')), 'Center', 'Middle', 'Red', 'White', 0.9, 14)%>
```

{% hint style="info" %}
The combined instructions must be placed inside a table in the template. The image field system name is mentioned only once, in the `Images()` instruction — do not repeat it in `ImageWatermark()` or `ImageExif()`.
{% endhint %}

## Utility Functions

Functions are **not case sensitive** and can be combined. We recommend using CamelCase for function names.

{% hint style="warning" %}
Field names remain case sensitive in all cases.
{% endhint %}

### Index()

Returns an auto-incremented sequence number in a listing array.

`<%Index()%>`

![](/files/ss19mTVIcqsy1lWnSmCl)

![](/files/WJl2MOWvekqwsdTO6hfb)

### MapLetter()

Returns the letter of the map pin generated by the Google Maps API for a location point. Used in combination with `Map()`.

`<%MapLetter()%>`

![](/files/lYMUBNE3ZcdMN2fTTCsM)

Example:

![](/files/ss19mTVIcqsy1lWnSmCl)

Result:

![](/files/WJl2MOWvekqwsdTO6hfb)

### Format() — dates and numbers

Convert a Date or Number field to a specific display format. `F()` is a shortcut for `Format()`.

```
<%Format('FormatString', FieldName)%>
<%F('FormatString', FieldName)%>
```

| Parameter        | Description                      |
| ---------------- | -------------------------------- |
| `'FormatString'` | Format pattern — see table below |
| `FieldName`      | Date or Number field to format   |

The available format patterns are shown in the table below:

![](/files/eTR1WQIdveHRdhkYPGH1)

**Examples** (with Price = 19.3 and Date = 02/14/2012 3:14:20 PM):

* `<%Format('0.00', Price)%>` → **19.30**
* `<%F('yyyy-MM-dd', Date)%>` → **2023-02-16**

#### Date()

Returns the current date and time:

```
<%Date()%>
<%F('dd/MM/yyyy', Date())%>
```

#### AddHours()

Add or remove hours from a date/time field:

```
<%AddHours(SystemName, NumberHours)%>
```

Example: `<%AddHours(DateTime, -6)%>` *(Result: 02/14/2023 06:00:00 instead of 12:00:00)*

{% hint style="info" %}
Use a positive number to add hours: `<%AddHours(DateTime, 6)%>`
{% endhint %}

#### AddDays()

```
<%AddDays(Date, NumberOfDays)%>
```

`NumberOfDays` can be positive or negative. Example: `<%AddDays(Date(), -5)%>`

#### AddMonths()

```
<%AddMonths(Date, NumberOfMonths)%>
```

Example: `<%AddMonths(Created, -1)%>`

#### AddYears()

```
<%AddYears(Date, NumberOfYears)%>
```

Example: `<%AddYears(Created, +2)%>`

### Add()

Returns the sum of multiple numerical values. Null or empty values are treated as 0.

```
<%Add(Value1, Value2, Value3, …)%>
```

Example: `<%Add(Size1, Size2, Size3)%>` — With Size1=5.3, Size2=2.3, Size3=null → **7.6**

### String manipulation

A character string is expressed via `<%String()%>` or its shortcut `<%S()%>`.

#### Concatenation

Use the `+` operator to concatenate strings. When mixing types, convert numbers to strings first with `S()`:

`<%S(Price) + ' Euros'%>` → **14.32 Euros**

#### ToUpper() / ToLower()

```
<%ToUpper(FieldName)%>
<%ToLower(FieldName)%>
```

#### List()

Create a separated list from multiple values. If any element is empty, its separator is omitted:

```
<%List(separator, value1, value2, …)%>
```

| Parameter           | Description                    |
| ------------------- | ------------------------------ |
| `separator`         | String to place between values |
| `value1, value2, …` | Fields or values to join       |

Example: `<%List(', ', Address, PostalCode, City, Country)%>` → **12 rue des églantiers, 17400, Lacanau, France**

Can be combined with `Map()` to produce a valid address from separate fields.

#### Split()

Extract a value from a string containing a separator. Index starts at 0:

```
<%Split(string, separator, IndexToExtract)%>
```

| Parameter        | Description                               |
| ---------------- | ----------------------------------------- |
| `string`         | The string or field to split              |
| `separator`      | The delimiter character                   |
| `IndexToExtract` | Zero-based index of the segment to return |

Example: `<%Split(Address, ',', 2)%>` — With Address = "12, rue des mines, Puteaux, 92800, France" → **Puteaux**

### Type conversion

#### ToNumber() / N()

Convert a text string to a number:

```
<%ToNumber(FieldName)%>
<%N(FieldName)%>
```

Example: `<%Format('0.00', N(Price))%>` — With Price = "127.4202" → **127.42**

{% hint style="info" %}
The converted number can use either a comma `,` or period `.` as decimal separator — both are supported.
{% endhint %}

#### ToDate() / D()

Convert a text date to a real date:

```
<%ToDate(FieldName)%>
<%D(FieldName)%>
```

Example: `<%F('dd/MM/yyyy', ToDate(Date))%>` — With Date = '02/14/2012 3:24:10 PM' → **02/14/2012**

#### ToString() / S()

Convert the content of a field to a string:

```
<%ToString(FieldName)%>
<%S(FieldName)%>
```

## Conditional Statements

### If()

Display a value based on a condition:

```
<%If(condition, 'TrueResult', 'FalseResult')%>
```

| Parameter                   | Description                                                                     |
| --------------------------- | ------------------------------------------------------------------------------- |
| `condition`                 | A boolean expression (e.g. `Field = 'Value'`). Use `&&` for AND, `\|\|` for OR. |
| `'TrueResult'`              | Value returned when the condition is true                                       |
| `'FalseResult'`             | Value returned when the condition is false                                      |
| `'NotSetResult'` (optional) | Value returned when the field is empty — enables the 3-value shorthand form     |

The condition must return `true` or `false`. The supported operators are:

| Operator | Meaning        |
| -------- | -------------- |
| `==`     | Equal to       |
| `<>`     | Different than |
| `!=`     | Not equal      |
| `&&`     | AND            |
| `\|\|`   | OR             |

You can combine field comparisons with `&&` and `||`:

```
<%If((Boolean=='True' && Statut=='Création'), 'valueIfTrue', 'valueIfFalse')%>
```

**Boolean example** — cover all three possible states (true, false, not set):

```
<%If(Booleen=='True', 'Yes', '')%><%If(Booleen=='False', 'No', '')%><%If(Booleen=='', '', '')%>
```

Or with the shorthand 3-value form:

```
<%If(MyBoolean, 'valueIfTrue', 'valueIfFalse', 'valueIfNotSet')%>
```

{% hint style="info" %}
The apostrophe character differs between Word and Excel. If you copy-paste a template from one to the other, replace the apostrophes manually.
{% endhint %}

### Exists()

Test whether a field exists in the form:

```
<%Exists('FieldName')%>
```

Returns `true` or `false`. Especially useful for checking the presence of images:

```
<%If(Exists('Photos#1'), Image([Photos#1], 180), '')%>
```

### Hide() / Display() / DisplayRow()

These functions show or hide entire sections of the document based on a condition. Always close with `<%End%>`.

#### Hide()

Hides a section when the condition is true:

```
<%Hide(Condition)%> Content to hide <%End%>
```

Supported Boolean operators:

| Operator | Meaning        |
| -------- | -------------- |
| `\|\|`   | OR             |
| `&&`     | AND            |
| `<>`     | Different than |
| `==`     | Equals         |
| `!=`     | Is not equal   |

Example with complex condition:

```
<%Hide((Field1 == 'value' || Field1 == 'value2') && Field3 != '')%> Some content is hidden <%End%>
```

#### Display()

Shows a section when the condition is true (reverse of `Hide()`):

```
<%Display(Condition)%> Content to show <%End%>
```

{% hint style="warning" %}
It is not possible to use both `Hide()` and `Display()` in the same condition.
{% endhint %}

#### DisplayRow()

Available in tables only. Displays a row when the condition is true. Must be placed in the first (leftmost) cell of the row, before any other content:

```
<%DisplayRow(Condition)%>
```

{% hint style="warning" %}
It is not possible to use both `Hide()` and `DisplayRow()` in the same condition. It is also not possible to display the *current user* in reports.
{% endhint %}

### Contains()

Returns `true` if a string contains a given pattern:

```
<%Contains(String, pattern)%>
```

| Parameter | Description                 |
| --------- | --------------------------- |
| `String`  | The field or string to test |
| `pattern` | The substring to search for |

Example: `<%If(Contains(Field, 'measurement'), 'MEASURE', 'NOTHING')%>`

{% hint style="info" %}
The comparison is case sensitive. Use `ToUpper()` or `ToLower()` in combination with `Contains()` for case-insensitive matching: `<%If(Contains(ToUpper(Field), 'MEASURE'), 'MEASURE', 'NOTHING')%>`
{% endhint %}

### StartsWith()

Returns `true` if a string begins with the specified value:

```
<%StartsWith(String, Pattern)%>
```

| Parameter | Description                 |
| --------- | --------------------------- |
| `String`  | The field or string to test |
| `Pattern` | The prefix to search for    |

Example: `<%If(StartsWith(Field, 'default'), 'Default value', '')%>`

### EndsWith()

Returns `true` if a string ends with the specified value:

```
<%EndsWith(String, Pattern)%>
```

| Parameter | Description                 |
| --------- | --------------------------- |
| `String`  | The field or string to test |
| `Pattern` | The suffix to search for    |

Example: `<%If(EndsWith(Field, 'END'), 'end', '')%>`

## Relationship

To include data from a related child form, use the `Relation()` instruction inside a table:

```
<%Relation('Relationship field label')%>
```

The table row repeats once for each child submission. If no child submissions are linked, the table is empty.

Example:

![](/files/bTjstrVmqfECSoOZQneL)

Result:

![](/files/9zIiLZlEWlrJkddRVNRJ)

{% hint style="info" %}
The "Relationship element" field type is not persistent and cannot be used in a report.
{% endhint %}

### Sort a relationship

Sort the child submissions by a field value. Add the field system name as a second parameter.

Ascending: `<%Relation('Relationship label', 'SystemNameOfField')%>`

Descending: `<%Relation('Relationship label', 'SystemNameOfDESCField')%>`

### Filter by subform

When a relationship field links to multiple subforms, filter by form name:

```
<%Relation('Relationship label', OrderBy, StructureName='Form name')%>
```

* `OrderBy` corresponds to the sorting described above (leave empty string `''` to skip)
* `StructureName` is the name of the form to filter on

Example — keep only submissions from the "Anomaly" subform:

```
<%Relation('Anomalies observed', '', StructureName='Anomaly')%>
```

### Limit the number of child submissions

Pass the limit as the 4th parameter:

```
<%Relation('Relation0', 'FieldX DESC', StructureName='Form name', 2)%><%[String0]%>
```

| Parameter                   | Description                                    |
| --------------------------- | ---------------------------------------------- |
| `'Relation0'`               | System name of the relation field              |
| `'FieldX'`                  | Field to sort by (optional)                    |
| `StructureName='Form name'` | Form to filter on (optional)                   |
| `2`                         | Maximum number of child submissions to display |

### Count child submissions

Display the number of submissions in a relationship:

`<%[Relation.Count]%>`

{% hint style="warning" %}
Capital letters are required — `Relation.Count` must be written exactly as shown.
{% endhint %}

### Nested relationships

It is possible to insert the relationship of a relationship into your report. To do this, you must create a first table and insert your first relationship there, then insert a second table inside the first table:

in the following example we will see how to insert a relationship from the sub-form into a first table, named **"relationship label"** then how to insert a relationship from the sub-form into a second nested table. another form itself being related to this sub-form. This last relationship is called "**relationship relationship wording**".

It is possible to nest a relationship inside another relationship by creating a second table inside the first. You can go up to **8 levels deep**.

![](/files/q0GIpnkIfPinfCzBbEfq)

## Aggregation Functions

{% hint style="info" %}
Arguments in aggregation functions must always be wrapped in single quotation marks. Example: `<%Sum('ToNumber(Price)')%>`
{% endhint %}

### Count()

Counts the total number of submissions for the current set:

`<%Count()%>`

This statement can be used anywhere in the document.

### Sum()

Returns the sum of a numeric field across all submissions:

`<%Sum('FieldName')%>`

If the field type may not be numeric, use `N()` to convert: `<%Sum('N(Price)')%>`

### Avg()

Returns the average value of a field:

`<%Avg('FieldName')%>`

### Min() / Max()

Returns the minimum or maximum value of a field:

`<%Min('FieldName')%>` / `<%Max('FieldName')%>`

### GlobalMap()

Displays all location points from multiple submissions on a single map. Requires a template in Listing Mode.

```
<%GlobalMap('LatitudeField', 'LongitudeField', ConnectPoints, Width, Height, MapType)%>
```

| Parameter        | Description                                               |
| ---------------- | --------------------------------------------------------- |
| `LatitudeField`  | Field name containing latitude values (in single quotes)  |
| `LongitudeField` | Field name containing longitude values (in single quotes) |
| `ConnectPoints`  | `true` to connect dots with a line, `false` for pins only |
| `Width`          | Map width in pixels                                       |
| `Height`         | Map height in pixels                                      |
| `MapType`        | 0 = Road, 1 = Aerial, 2 = Mixed                           |

Example: `<%GlobalMap('latitude', 'longitude', true, 300, 300, 0)%>`

![](/files/QbT7lbwDw9vlUddH6BNJ)

With a relationship:

![](/files/df8xCSri9BtKuffIIFsU)

### Chart()

Display a bar chart or pie chart from aggregated data:

```
<%Chart(GraphType, AggregationFunction, LabelField, DisplayValues, Width, Height)%>
```

| Parameter             | Description                                              |
| --------------------- | -------------------------------------------------------- |
| `GraphType`           | `'Pie'`, `'Pie3D'`, or `'Bar'`                           |
| `AggregationFunction` | A function such as `Count()` or `Sum(field)`             |
| `LabelField`          | Field name used to group and label results               |
| `DisplayValues`       | `true` to show values on the chart, `false` to hide them |
| `Width`               | Chart width in pixels                                    |
| `Height`              | Chart height in pixels                                   |

**Examples:**

`<%Chart('Bar', 'Count()', 'CustomerName', true, 500, 300)%>`

![](/files/UYFTAdhjuiq4SolfMDR8)

`<%Chart('Pie3d', 'Sum(Price)', 'ReparationType', false, 600, 300)%>`

![](/files/VnUahNdZVEKV1w5FDsS9)

`<%Chart('Pie', 'Count()', 'TypeReparation', true, 600, 300)%>`

![](/files/L9LbeIFStLOwTJM7FtHQ)

## Special Cases

### List fields

#### Isolate a level in a tree list

By default: `<%ListSystemName%>`

For a tree list with result A,B,C:

| Desired value    | Syntax                                                             |
| ---------------- | ------------------------------------------------------------------ |
| First level (A)  | `<%[ListSystemName.FirstLevel]%>` or `<%[ListSystemName.Level1]%>` |
| Second level (B) | `<%[ListSystemName.Level2]%>`                                      |
| Last level (C)   | `<%[ListSystemName.LastLevel]%>` or `<%[ListSystemName.LevelN]%>`  |

For a multiple-choice list (no tree structure) with result A | B | C:

| Desired value   | Syntax                       |
| --------------- | ---------------------------- |
| First item (A)  | `<%[ListSystemName.Item1]%>` |
| Second item (B) | `<%[ListSystemName.Item2]%>` |
| Nth item        | `<%[ListSystemName.ItemN]%>` |

For a multiple-choice list with tree structure (result: A,A1 | B,B1 | C,C1):

| Desired value           | Syntax                                      |
| ----------------------- | ------------------------------------------- |
| Full first item         | `<%[ListSystemName.Item1]%>` → A,A1         |
| First item, first level | `<%[ListSystemName.Item1.Level1]%>` → A     |
| Second item, last level | `<%[ListSystemName.Item2.LastLevel]%>` → B1 |

{% hint style="info" %}
To obtain both the list element and its parent, use a formula field.
{% endhint %}

#### List side values

A list value can carry subvalues (External ID, URL, image, color):

| Value                        | Syntax                                                    |
| ---------------------------- | --------------------------------------------------------- |
| External ID                  | `<%[ListSystemName.ExternalId]%>`                         |
| URL                          | `<%[ListSystemName.Url]%>`                                |
| Image (size 50px)            | `<%Img([ListSystemName.Image], 50)%>`                     |
| Color code                   | `<%[ListSystemName.Color]%>`                              |
| Value colored with its color | `<%TextColor([ListSystemName], [ListSystemName.Color])%>` |

Item-specific subvalue syntax (e.g. for the first item):

* `<%[ListSystemName.Item1.ExternalId]%>`
* `<%[ListSystemName.Item1.Url]%>`
* `<%[ListSystemName.Item1.Image]%>`
* `<%[ListSystemName.Item1.Color]%>`

{% hint style="warning" %}
The "List element" field type is not persistent — it cannot be used in a report. External IDs must not contain special characters (e.g. underscore `_`).
{% endhint %}

### User fields

#### All users in a field

In these examples, the system name of the field is `UserFieldName`:

| Information                           | Syntax                          |
| ------------------------------------- | ------------------------------- |
| All first names (comma-separated)     | `<%[UserFieldName.FirstName]%>` |
| All last names (comma-separated)      | `<%[UserFieldName.LastName]%>`  |
| All full names (comma-separated)      | `<%[UserFieldName.FullName]%>`  |
| All emails (comma-separated)          | `<%[UserFieldName.Email]%>`     |
| Full name or email (per form setting) | `<%[UserFieldName]%>`           |

#### Specific user in a field

| Information          | Syntax                               |
| -------------------- | ------------------------------------ |
| Email of user 1      | `<%[UserFieldName.User1.Email]%>`    |
| Last name of user 4  | `<%[UserFieldName.User4.LastName]%>` |
| First name of user 2 | `<%UserFieldName.User2.FirstName%>`  |

### Workflow status

| Information                      | Syntax                                  |
| -------------------------------- | --------------------------------------- |
| Current state (default language) | `<%[Submission.CurrentState]%>`         |
| Is it a final state?             | `<%[Submission.CurrentState.End]%>`     |
| State color                      | `<%[Submission.CurrentState.Color]%>`   |
| State name in French             | `<%[Submission.CurrentState.Name.FR]%>` |
| State name in English            | `<%[Submission.CurrentState.Name.EN]%>` |

Display the current state with its associated color:

```
<%Display(Exists('Submission.CurrentState'))%><%TextColor('█',[Submission.CurrentState.Color])%><%[Submission.CurrentState]%><%End%>
```

### Duration field

It is not possible to retrieve a duration field value directly in a Word report. Use a JavaScript formula field to convert it first, then include that formula field in the report.

Example JavaScript formula to retrieve the duration value:

```javascript
var given_seconds = items['SYSTEM_NAME_OF_DURATION_FIELD'] / 1000;
var dateObj = new Date(given_seconds * 1000);
var hours = dateObj.getUTCHours();
var minutes = dateObj.getUTCMinutes();
var seconds = dateObj.getSeconds();
var timeString = hours.toString().padStart(2, '0') + 'h'
              + minutes.toString().padStart(2, '0') + 'min'
              + seconds.toString().padStart(2, '0');
return timeString;
```

### Signature field

Use `<%Image()%>` with the signature field system name and the desired size:

```
<%Image(Sign1, 80)%>
```

### File field — FileImage() and FilePageCount()

#### FileImage()

Insert one or all pages of a PDF attached to a file field as images in the report:

```
<%FileImage('FileFieldName', PageNumber, Width, Dpi)%>
```

| Parameter       | Type           | Description                                     | Default |
| --------------- | -------------- | ----------------------------------------------- | ------- |
| `FileFieldName` | string         | System name of the file field                   | —       |
| `PageNumber`    | int or `'All'` | Page number to insert, or `'All'` for all pages | `'All'` |
| `Width`         | int            | Width of the preview image in pixels            | 585     |
| `Dpi`           | int            | Display resolution (dots per inch)              | 92      |

**Examples:**

```
<%FileImage('File')%>
→ Inserts the first page of the first attached PDF.

<%FileImage('File', 2)%>
→ Inserts the second page of the first attached PDF.

<%FileImage('File', 1, 300)%>
→ Inserts the first page, resized to 300px wide.

<%FileImage('File', 'All', 650, 120)%>
→ Inserts all pages, 650px wide at 120 DPI.
```

To display the second attached document:

```
<%FileImage('File#2')%>
```

{% hint style="warning" %}
Only PDF files are supported. Inserting multiple pages may increase report generation time. In listing-type reports, keep the total document size reasonable.
{% endhint %}

#### FilePageCount()

Returns the total number of pages in an attached PDF:

```
<%FilePageCount('FileFieldName')%>
```

#### Other file-related expressions

| Expression                     | Description                     |
| ------------------------------ | ------------------------------- |
| `<%[File.Count]%>`             | Total number of attached files  |
| `<%[File]%>` or `<%[File#1]%>` | Access the first attached file  |
| `<%[File#2]%>`                 | Access the second attached file |
| `<%[File#1Name]%>`             | Name of the first file          |
| `<%[File#1MimeType]%>`         | MIME type of the first file     |
| `<%[File#1Extension]%>`        | File extension                  |
| `<%[File#1Size]%>`             | File size in bytes              |

{% hint style="info" %}
Looking for complete end-to-end examples? See the [Syntax & Functions Cookbook](/user-documentation/build/building-the-reporting/syntax-functions-cookbook) for real-world report templates combining multiple functions.
{% endhint %}


# Syntax & Functions Cookbook

End-to-end report template examples combining multiple syntax functions for real-world Daxium-Air use cases.

This page complements the [Syntax & Functions reference](/user-documentation/build/building-the-reporting/syntax-functions) with complete, ready-to-adapt report templates for common field operations scenarios.

## Recipe 1 — Per-submission inspection report (Word)

**Use case:** Generate one formatted Word document per intervention submission, including the inspector's details, GPS location, photos with GPS watermarks, and a conditional defect section.

### Template structure

```
<%Inspector.FullName%> — <%F('dd/MM/yyyy', InspectionDate)%>

Site: <%List(', ', SiteAddress, PostalCode, City)%>
Status: <%If(InspectionResult == 'Compliant', 'COMPLIANT ✓', 'NON-COMPLIANT ✗')%>

<%Map(SubmissionLatitude, SubmissionLongitude, 15, 400, 250, 0)%>
```

Photos (with GPS coordinates as watermark):

```
<%Images(Photos)%><%ImageWatermark(200, 0,
  List(' | ',
    ImageExif(Photos, 'GpsLatitudeDM'),
    ImageExif(Photos, 'GpsLongitudeDM'),
    ImageExif(Photos, 'DateTime')
  ), 'Left', 'Bottom', 'White', '#000000', 0.5, 11)%>
```

Conditional defect section (hidden when no defects):

```
<%Display(DefectCount > 0)%>
## Defects observed

<%Relation('Defects', 'DefectDate')%>
  <%DefectDescription%> — <%F('dd/MM/yyyy', DefectDate)%>
<%End%>
```

Signature:

```
<%Image(InspectorSignature, 120)%>
```

### Key functions used

* `List()` — combines address fields, omitting empty ones
* `If()` — renders a human-readable status
* `Map()` — shows the intervention GPS position
* `Images()` + `ImageWatermark()` + `ImageExif()` — photos stamped with GPS and date
* `Display()` / `End` — hides the defect section when there are none
* `Relation()` — lists related defect records

***

## Recipe 2 — Monthly summary listing report (Excel)

**Use case:** An Excel listing report sent by email every month, covering all submissions from the previous month, with a count, total, and bar chart.

### PPActions sheet

| Type:table ; TableName:Interventions ; Value:Id | Type:table ; TableName:Interventions ; Value:TechnicianName | Type:table ; TableName:Interventions ; Value:InterventionDate | Type:table ; TableName:Interventions ; Value:Duration |
| ----------------------------------------------- | ----------------------------------------------------------- | ------------------------------------------------------------- | ----------------------------------------------------- |

### Data sheet (Interventions table — one row template)

| #              | Technician                 | Date                                          | Duration (min)          |
| -------------- | -------------------------- | --------------------------------------------- | ----------------------- |
| `<%Value:Id%>` | `<%Value:TechnicianName%>` | `<%Value:F('dd/MM/yyyy', InterventionDate)%>` | `<%Value:N(Duration)%>` |

### Summary section (below the table)

```
Total interventions:   <%Count()%>
Total duration (min):  <%Sum('N(Duration)')%>
Average (min):         <%Avg('N(Duration)')%>
```

Chart (bar chart of interventions by technician):

```
<%Chart('Bar', 'Count()', 'TechnicianName', true, 500, 300)%>
```

### Listing mode filter (Repeat in PPActions)

```
<%Repeat(InterventionDate > #date-1m# AND InterventionDate < #date#, InterventionDate)%>
```

### Key functions used

* `N()` / `Sum()` / `Avg()` / `Count()` — aggregation over the full dataset
* `Chart()` — bar chart by technician
* `Repeat()` with date filter — limits to the previous month
* `F()` — date formatting in the table

***

## Recipe 3 — Delivery note with related line items (Word)

**Use case:** A delivery note per submission, listing the ordered products from a relationship field, with a line count and totals.

### Main submission section

```
Delivery note #<%SubmissionId%>
Date: <%F('dd/MM/yyyy', DeliveryDate)%>
Client: <%ClientName%>
Address: <%List(', ', DeliveryAddress, PostalCode, City)%>
```

### Relation table (one row per product)

Place `Relation()` in the first cell of a table row:

```
<%Relation('OrderedProducts', 'ProductName')%>
```

Row template:

| `<%ProductName%>` | `<%ProductReference%>` | `<%Quantity%>` | `<%F('0.00', UnitPrice)%>` | `<%F('0.00', Quantity * UnitPrice)%>` |
| ----------------- | ---------------------- | -------------- | -------------------------- | ------------------------------------- |

Footer row (below the relation table):

```
<%[OrderedProducts.Count]%> items — Total: <%Sum('N(Quantity) * N(UnitPrice)')%> €
```

### Key functions used

* `Relation()` — one row per linked product submission
* `[Relation.Count]` — total number of product lines
* `List()` — formatted delivery address
* Arithmetic in tags — `Quantity * UnitPrice`
* `Sum()` — grand total across all product lines

***

## Recipe 4 — Conditional multi-section report (Word)

**Use case:** A single template that adapts its content based on the value of a list field (e.g. `InterventionType`). Each section is only rendered for the relevant intervention type.

### Pattern

```
<%Display(InterventionType == 'Maintenance')%>
## Maintenance checklist
<%ChecklistItem1%> — <%If(ChecklistItem1Result == 'OK', 'Pass', 'Fail')%>
<%ChecklistItem2%> — <%If(ChecklistItem2Result == 'OK', 'Pass', 'Fail')%>
<%End%>

<%Display(InterventionType == 'Installation')%>
## Installation record
Date installed: <%F('dd/MM/yyyy', InstallationDate)%>
Installed by: <%Technician.FullName%>
Serial number: <%SerialNumber%>
<%End%>

<%Display(InterventionType == 'Audit')%>
## Audit findings
Score: <%AuditScore%> / 100
<%If(AuditScore >= 80, 'Result: SATISFACTORY', 'Result: ACTION REQUIRED')%>
<%End%>
```

### Key functions used

* `Display()` / `End` — shows each section only for the matching type
* `If()` — renders pass/fail and result labels
* `F()` — date formatting

***

## Tips for all recipes

* **Test with real data.** Generate a report from a submission that has edge cases (empty optional fields, maximum photo count) before finalising.
* **Use `Exists()` to guard image fields.** If a photo may be absent, wrap the tag: `<%If(Exists('Photos#1'), Image([Photos#1], 200), '')%>` to avoid a blank space in the output.
* **Listing mode limit.** Excel and scheduled Word reports are capped at 30,000 submissions. Add a `Repeat()` date filter to keep generation times reasonable.
* **Apostrophes.** When building templates in PowerPoint, replace smart quotes (`'`) with straight ones (`'`) before saving — see the [PowerPoint page](/user-documentation/build/building-the-reporting/report-templates/ppt) for details.


# Report Templates

Create report templates in Word, Excel or PowerPoint for your Daxium-Air data.

Report templates define the layout and content of your generated documents. Daxium-Air supports three formats: Word, Excel, PPT. All three can also be converted to PDF.

## Add a report template in Daxium-Air

Go to Settings > Report, then click "New" at the top right:

![](/files/IMP7XjJaq4u4xE8NeHw6)

![](/files/dP9Xh4HSzByyx57aXyhB)

Select the form to link to this report template, then select the format and upload your template file.

The "Listing mode" box will allow you to generate a report for several submissions at the same time. This mode is preferred for [Excel reports](/user-documentation/build/building-the-reporting/report-templates/excel). See also [Scheduled Reports](/user-documentation/build/building-the-reporting/report-types/scheduled-reports) for periodic listing generation.

Once these steps are completed, save the template — it will appear in the list of templates.

To learn how to generate a report from your submissions, see [Generate a report](/user-documentation/use/views/actions-from-views/generate-a-report).


# Word

Create Word report templates with merge fields for generating formatted documents.

Word (.docx) templates generate one formatted document per submission. They are the recommended format for detailed per-submission reports such as inspection reports, delivery notes, or certificates.

## Overview

|                   |                                                                                         |
| ----------------- | --------------------------------------------------------------------------------------- |
| **Format**        | `.docx` (Word 2007 or higher)                                                           |
| **Report engine** | Aspose Library for Word                                                                 |
| **Best for**      | Per-submission documents with rich formatting, images, signatures, conditional sections |
| **Listing mode**  | Supported via `Repeat()` — produces one document covering multiple submissions          |

## Field syntax basics

Insert a field by wrapping its system name in `<%` and `%>`:

```
<%SystemName%>
```

{% hint style="warning" %}
System names are case sensitive.
{% endhint %}

Any font formatting applied in Word (bold, italic, colour) carries through to the generated output. For example, `<%FirstName%>` renders the value in bold.

**Rich text fields**

If a Text field uses the "Rich Text" option, use `<%MarkDown(SystemName)%>` to preserve the layout in the generated document.

**Conditional values**

Use `If()` to display different text based on a field value — useful for Boolean fields, which return `True` or `False` by default:

```
<%If(FieldName == 'Value', 'Result if true', 'Result if false')%>
```

**Example template**

![](/files/wrH3npWrKPlE5LmdkcZN)

**Generated report**

![](/files/TGwVoiUiYcCmVKU9u3lS)

For the full list of available functions (images, maps, aggregations, conditional blocks, etc.), see [Syntax & Functions](/user-documentation/build/building-the-reporting/syntax-functions).

## Relationships

The template is based on the main form but can include data from directly related child forms. To display a relationship, place the `Relation()` instruction in the first (leftmost) cell of a table row:

```
<%Relation('Relationship field label')%>
```

![](/files/CCWq2pVe7k7NcEJdZPfj)

The row repeats once for each child submission. Reference child form fields by their system names in the remaining cells:

```
<%childFieldSystemName%>
```

## Tips

* Apply formatting directly to the tag — **`<%FieldName%>`** renders the value in bold.
* Use `List()` to build a formatted address from separate fields: `<%List(', ', Street, PostalCode, City)%>` — empty fields are skipped.
* Use `Exists()` to guard optional image fields: `<%If(Exists('Photo#1'), Image([Photo#1], 200), '')%>`
* Apostrophes in function arguments must be straight single quotes `'`. Replace smart quotes if you copy from another source.

## Limitations

* Format: `.docx` only.
* `MarkDown()` works in Word only — not in Excel or PowerPoint reports.
* The "Relationship element" field type is not persistent and cannot be used in a report.


# Excel

Create Excel report templates for data exports and tabular reports.

Excel (.xlsx) templates are ideal for data-oriented reports requiring calculations, charts, or tabular layouts. They are the recommended format for listing-mode reports that compile data from multiple submissions into a single file.

## Overview

|                   |                                                                |
| ----------------- | -------------------------------------------------------------- |
| **Format**        | `.xlsx` (MS Excel 2007 minimum; 2013 recommended)              |
| **Report engine** | Aspose Library for Excel                                       |
| **Best for**      | Listing reports, aggregation tables, charts, data exports      |
| **Listing mode**  | Primary use case — compiles multiple submissions into one file |

## Field syntax basics

Excel report templates use a dedicated **PPActions** sheet to declare which fields to insert and where. The general tag syntax (`<%SystemName%>`) applies in cells, but fields in a listing table are declared via the PPActions sheet rather than placed directly.

### PPActions sheet setup

1. Add a sheet named `PPActions` to your template.
2. Add a second sheet with any name and create a table with one header row and one data row.
3. Give the table a **named range**: select it and type a name in the Name Box (top-left corner of Excel).
4. In the PPActions sheet, add one row with as many columns as there are fields in your table:

<figure><img src="/files/1Pw2OsUMk2OB4J7HA5by" alt=""><figcaption></figcaption></figure>

Each column declares one field using three properties:

| Property    | Value                              |
| ----------- | ---------------------------------- |
| `Type`      | `table` — declares a listing table |
| `TableName` | The named range you defined        |
| `Value`     | System name of the field           |

## Relationships

To include child submissions from a relationship field, add a row in the PPActions sheet using `subtable`:

![](/files/sVzsADX3PR9AQp1rfS0O)

```
<%Type:subtable;TableName:table name;Relationship:relationship name%> | <%Value:field name%>
```

| Property       | Value                                            |
| -------------- | ------------------------------------------------ |
| `Type`         | `subtable` — declares a relation table           |
| `TableName`    | The named range for the relation table           |
| `Relationship` | Label of the relationship field in the main form |

To display the count of related submissions: `<%Value:[Relation.Count]%>`

## Tips

* Font, colour, conditional formatting rules, and Excel formulas are all preserved during report generation.
* Listing mode generation follows the same principles as Word — see [Automations](/user-documentation/build/building-forms/automations) for scheduling.
* You can start from a blank `.xlsx` file or adapt an existing spreadsheet model.

## Limitations

* Format: `.xlsx` only.
* Listing mode maximum: **30,000 submissions** per report.
* Image size is set by cell dimensions, not by function parameters: `<%Value:SystemName;Type:Image%>` — resize the target cell to control the photo size.
* `MarkDown()` is not functional in Excel reports.


# PowerPoint

Create PowerPoint report templates for visual presentations of field data.

PowerPoint (.pptx) templates let you generate visual presentations directly from your submission data.

## Overview

|                   |                                                                    |
| ----------------- | ------------------------------------------------------------------ |
| **Format**        | `.pptx`                                                            |
| **Report engine** | Aspose Library for PowerPoint                                      |
| **Best for**      | Visual presentations, slide-per-submission outputs                 |
| **Listing mode**  | Not applicable — one slide per related submission via `Relation()` |

## Configuration

The PowerPoint report feature is accessible from the report section, just like Word and Excel formats.

In **Report Engine**, select **Aspose Library for PowerPoint**:

![](/files/yoff33mFhJUsid9Pz2az)

Upload your document template in .PPTX format:

![](/files/8uWWNllRgCNDxy2tQZbV)

Once configured, the report template is accessible from your submissions like any other format. From the manual generation interface:

![](/files/2v9LkaKUEVHo0ieLHSzG)

You can download the generated report from the notification bell or from the report access menu on the submission.

![](/files/7N3vATiZEAvydzvEnLJA)

## Field syntax basics

The syntax is similar to the [Word report type](/user-documentation/build/building-the-reporting/report-templates/word). However, fewer options are available. For the full reference, see [Syntax & Functions](/user-documentation/build/building-the-reporting/syntax-functions).

### Inserting fields

Same syntax as Word:

`<%[FieldName]%>`

### Supported functions

In text boxes and table cells, you can use: **If**, **Format**, **Date**.

### Images

Simple image insertion — no size options. The image is resized to fit the corresponding text box or table cell:

`<%Image([ImageFieldName])%>`

## Relationships

You can insert a relationship into your presentation. Create a section with the following syntax:

`<%Relation:RelationFieldName;Name:SectionName%>`

* *RelationFieldName* — system name of your relation field
* *SectionName* — an arbitrary name for your PowerPoint section

![](/files/tbwuPt5HcEgdhFRflGWM)

One slide is created per related submission — the template slide is replicated for each.

{% hint style="warning" %}
Only **1 level of relation** is supported.
{% endhint %}

## Tips

### Quotes in expressions

If you insert text values into function arguments, apostrophes must be straight single quotes `'`. PowerPoint sometimes automatically converts them to curly quotes `'`. Prepare function strings in a text editor first, then copy/paste them into PowerPoint:

`<%If([Image2.Count]>0,[Image2#1Comment],'N/A')%>`

### Text placement

No text should be added after closing an instruction with `%>`. If you need to add text on the same slide, place it in a separate frame.

![](/files/T4bEL3RosxBH4mE0FrD5)

## Limitations

* Format: `.pptx` only.
* **Hide/End**, **Display/End**, and **Images** (multiple) functions are not supported.
* Images have no size parameters — dimensions are determined by the placeholder frame.
* Only 1 level of relation nesting is supported.


# Report Types

Overview of the different ways to generate and deliver reports automatically in Daxium-Air.

Instead of generating reports manually, you can configure Daxium-Air to produce and deliver them automatically. There are two types of automated reports.

## Automatic reports

Automatic reports generate your template as soon as a trigger condition is met. They are typically used when you want to generate one separate file per submission — for example, every time a submission is created or updated.

## Scheduled reports

Scheduled reports generate periodically (daily, weekly, monthly) and use **Listing mode** to compile data from multiple submissions into a single file. They are typically used for summary or aggregation reports sent to a team on a regular basis.

***

## Common setup

Both report types share the same initial configuration. Open the report template configuration, then complete the following steps.

1. **Rename** the output file.
2. **Select a format** (Word, Excel, PowerPoint).
3. **Set a time zone.**
4. Optionally **choose a** [**condition**](/user-documentation/build/building-forms/conditions) to limit which submissions are included. By default, generation runs on all submissions in the configured period.
5. To **send the generated report by email**, fill in the **Email** and **Recipient** fields.

![](/files/LD6Gvq44p9sA4KUV2wRj)

The **\</> Edit** button lets you insert form field values into the email subject or body.

![](/files/JCk0g1DwhflY0tSrwtfg)

![](/files/AdH0UqrvywHYB40eaRGL)

![](/files/8kOe0GSnFa982vRdZnUD)

Once the common setup is complete, configure the type-specific settings on the child page:

* [Scheduled Reports](/user-documentation/build/building-the-reporting/report-types/scheduled-reports) — define the period and frequency
* [Automatic Reports](/user-documentation/build/building-the-reporting/report-types/automatic-reports) — define the trigger event


# Scheduled Reports

Schedule periodic report generation and delivery on a daily, weekly or monthly basis.

Scheduled reports generate periodically and use **Listing mode** to compile data from multiple submissions into a single file. They are typically used for summary reports sent to a team on a regular basis.

Complete the [common setup](/user-documentation/build/building-the-reporting/report-types#common-setup) first, then configure the schedule below.

{% hint style="warning" %}
It is not possible to display the *current user* function in scheduled reports.
{% endhint %}

## Setup schedule

To select the report template, check **Listing mode**, then click **Add Schedule Report**:

![](/files/nTrvyHW1DSeUtZEymm8C)

6. Define the **content** of the report — the sheets to include in the generated file.

![](/files/1hoPJmePusBIpd32AzJF)

7. Set the **period** using the options — choose between system fields (created at, updated at, …) or a specific date field to define the time window.

![](/files/6wHh7IDrExemKpTaFwv2)

{% hint style="info" %}
Scheduled reports have a maximum of 30,000 submissions.
{% endhint %}


# Automatic Reports

Automatically generate and send reports when a submission is created or modified.

Automatic reports generate as soon as a trigger condition is met. They are typically used to produce one file per submission — for example, every time a submission is created or updated.

Complete the [common setup](/user-documentation/build/building-the-reporting/report-types#common-setup) first, then configure the trigger below.

{% hint style="warning" %}
It is not possible to display the *current user* function in automatic reports.
{% endhint %}

## Setup trigger

5. Select a **trigger event**: submission created, submission modified, or both.

![](/files/1DEt5ifZuMEz69xAjSTe)

{% hint style="info" %}
Email notifications from automatic reports are always sent from <mailjet@daxium.com> or <noreply@mg.daxium-air.com>.
{% endhint %}


# Organise the Platform

Tools and settings to organise and customise your Daxium-Air workspace.

This section covers the tools available to administrators for structuring and customising the Daxium-Air workspace experience — navigation shortcuts, side menu organisation, and the workspace home page. New features will be added here as they are released.


# Shortcuts

A shortcut is a link to a page in your workspace. For example, you often want to view your submissions with a particular filter. Instead of redoing this filter each time you access your view, you can create a shortcut to access it directly later.

## Adding a shortcut

You can create one when you are on the page you want to save by clicking on the "+" at the top of the page:

![](/files/4W3oyVpNAhbgjv12i8yS)

There are 3 locations for shortcuts:

* The bar at the top of the page
* The home page
* The left menu

The pop-in below will then appear, where you need to name your shortcut:

![](/files/dltJSSFq3kEPYKpP6lnG)

## Sharing a shortcut

By ticking "Share shortcut", you can choose to make it available to the other users of the platform. It can either be shared to all users or restricted to one or multiple [groups](/user-documentation/build/managing-users/groups).

{% hint style="info" %}
This option will only be available if you have at least 1 group on your workspace.
{% endhint %}

![](/files/WHXKvXms04mzbkXFYx9K)

## External Shortcut

The **external link** option allows you to configure a shortcut that will open a new tab in your browser to the desired URL. This allows you to turn Daxium-Air into an "intranet" that redirects users to other platforms used within your organization.

![](/files/sNfmoeHYpoNmpcanziO9)

## Manage, organize your shortcuts

You can manage your shortcuts from the "Shortcuts" menu:

![](/files/OCbVmxsr2ySJ0fEyd33W)

You will be able to see all the shortcuts that have already been created. They are arranged in three tabs:

* Side menu: lists the shortcuts in the menu on the left side of your screen
* Home page: lists the shortcuts on the home page
* Shortcut bar: lists the shortcuts on the bar at the top of your screen

Each tab has two sections:

* Shared shortcuts
* My shortcuts

You can drag and drop the various shortcuts, delete them, or rename them.

You can also create a shortcut folder to add a submenu that will allow you to place the shortcuts in a tree structure (as shown in the images below).

### Side menu

A shortcut folder appears as a drop-down menu on the left sidebar. The submenus are your shortcuts.

![](/files/fEzAVktyaPzQGQuFTg7r)

### Homepage

A shortcut folder translates into a section on the home page. Shortcuts that are not in a shortcut folder will always appear first, before the sections.

![](/files/PTwAWaaW423G2wHMS0Qm)

You can only put a shortcut in a section on the homepage if the only place this shortcut is used is on the homepage.

If your shortcut is in multiple locations, for instance Homepage + Top bar, trying to put it in a folder will result in this error message

![](/files/hInfUtIdNTddYylWBI9Y)

### Shortcut bar

A shortcut folder appears as a drop-down menu on the shortcut bar. The submenus are your shortcuts.

![](/files/a0AtzNMuUcl7rE7reeFd)

## System shortcuts

Every workspace comes with four buttons at the top of its side menu: **Home**, **Submissions**, **Tasks** and **Help**. These are the **system shortcuts**. You will find them in the "Shortcuts" menu, on the **Side menu** tab, in the **Shared shortcuts** section, each marked with a padlock.

![](/files/W9Ok3ahhpNPmPUi8bBUK)

The padlock means a system shortcut **cannot be deleted**. Everything else works as it does for any other shortcut. Select one and you can:

* **Disable it**, with the **Disable** button at the bottom of the panel, so that it no longer appears in the side menu. Enable it again at any time from the same button.
* **Rename it** to match the wording your teams use, with a translation per platform language.
* **Restrict it to one or more** [**groups**](/user-documentation/build/managing-users/groups), in the **Groups** field. Without a selection, every group keeps the shortcut.
* **Change its icon.**
* **Reorder it** by drag and drop, among your shared shortcuts. **Help** is the exception: it always comes last, below your own shortcuts.
* **Change where Help points.** Help is an [external shortcut](#external-shortcut) that opens this documentation site by default. Replace the URL to send your users to your own internal documentation instead.

{% hint style="info" %}
Disabling the **Submissions** shortcut, or restricting it to a group, is a practical way to keep a profile within the shortcuts you prepared for them, rather than in the full list of forms they have access to.

Be aware that this hides a route, it does not remove a permission. A user who still has rights on a form can reach its submissions another way, for instance through a relation. When you need an actual restriction, set it with group permissions.
{% endhint %}

{% hint style="info" %}
Even when the **Home** system shortcut is disabled, a home button remains next to the Daxium-Air logo at the top of the screen, so your users can always return to the home page.
{% endhint %}


# Views

Browse and interact with your data using different view types — table, calendar, map and more.

Views are how you visualize and interact with your submission data in Daxium-Air. Each view type offers a different way to display and filter your submissions.

Daxium-Air offers 5 view types:

* [**Table**](/user-documentation/use/views/table) — Display submissions in a sortable, filterable spreadsheet layout
* [**Mixed**](/user-documentation/use/views/mixed) — Combine a list of submissions with a detail panel side by side
* [**Calendar**](/user-documentation/use/views/calendar) — Visualize submissions on a timeline based on date fields
* [**Gallery**](/user-documentation/use/views/gallery) — Show submissions as visual cards with image thumbnails
* [**Map**](/user-documentation/use/views/map) — Plot submissions on a map using their location data

When you select a row in any view, the submission opens in its layout. See [Submission Layout](/user-documentation/use/submission-layout) for details.

{% hint style="info" %}
Each view type is available on both **web** and **mobile**, with an interface adapted to each platform.
{% endhint %}


# Filtering System

Use filters to narrow down the submissions displayed in any view.

The filtering system lets you narrow down the submissions displayed in any view. You can combine multiple filters to refine your results.

Filter options depend on the field type:

* **Number:** Empty, Not empty, Equal to, Greater than or equal to, Less than or equal to, Between
* **Date:** Year, Month, Week, Day, Between
* **Text:** Empty, Not empty, Contains, Does not contain, Equal to, Starts with, Ends with
* **Image:** Exists, Does not exist
* **List:** One or more options are selected

Filters stack: a submission must match **every** active filter to appear. For example, filtering by Status = "In progress" **and** Technician = "Alice" shows only Alice's in-progress submissions.

Active filters are remembered until you reset them.

<figure><img src="/files/t0a0QX0YIByJSv6I3Bxq" alt=""><figcaption></figcaption></figure>

## Viewing active filters

Every active filter also appears as a removable chip on the top bar of the view, so you always know what's being filtered without opening the filter pane. This is particularly handy when taking screenshots to share or document, screensharing during a call, or opening a shortcut and not remembering which filters it applies.

* Click the **X** on a chip to remove that filter instantly, without opening the pane.
* Inside the filter pane itself, the filtered value of each field is now shown directly, so you can review your filters without expanding every field's settings.

{% hint style="info" %}
Available on **Web**, across all views (table, gallery, mixed, map, and calendar).
{% endhint %}

<figure><img src="/files/QaQz36XNfUsU1gKU2viF" alt=""><figcaption></figcaption></figure>

## Managing available filters

By default, all fields and metadata of a form appear in the filter pane. Only admins can configure which fields are available as filters and in what order — so that the filter pane only shows what is relevant to users.

{% hint style="warning" %}
This configuration applies to **all users** and **all views** of the form (table, gallery, mixed, map, and calendar). Any change you make here affects everyone immediately.
{% endhint %}

### Opening configuration mode

1. Open any view on the form you want to configure.
2. Open the filter pane.
3. Click the **Configure filters** icon at the top right of the pane.

<figure><img src="/files/2Bj64CUcj84a1RmQ8LEq" alt=""><figcaption></figcaption></figure>

The pane switches to configuration mode, listing all available fields and metadata.

### Selecting filterable fields

* **Check** a field to make it available as a filter.
* **Uncheck** a field to hide it from the filter pane.

<figure><img src="/files/afEetiVEAeXmCa5oqWcz" alt="" width="401"><figcaption></figcaption></figure>

### Reordering filters

Drag and drop fields to define the order in which they appear in the filter pane.

<figure><img src="/files/bAkGzp5CyReEqigWcbX1" alt="" width="401"><figcaption></figcaption></figure>

### Applying and resetting

* Click **Apply** to save the configuration. Only the selected fields appear as filters, in the order you defined, for all users on all views of this form.
* Click **Reset** to revert to the default behaviour: all fields visible, in form order.

### Limitations

{% hint style="info" %}
The configuration is **per form**, not per view or per user — one setup applies to all views of the form for every user.
{% endhint %}

If a field is removed from the form after being configured as filterable, it is automatically and silently removed from the filter configuration.


# Table

Display submissions in a spreadsheet-like table with sortable columns and filters.

The table view displays your submissions in a spreadsheet layout. You can sort, filter, reorder and pin columns to tailor the view to your needs.

<figure><img src="/files/9B12HZo3QL0ZU54xX1OZ" alt=""><figcaption></figcaption></figure>

## Accessing the table view

![](/files/WoB7l6cbQz5TtBhEEq0i)

To access the table view, open the **side menu** — the same menu used to switch to the mixed, mosaic, or map view. The table view displays the **first 50 rows**; scroll to the bottom and click **Show more** to load additional rows.

## Select, order, and pin columns

![](/files/xvpb03Ul425gYGa5iNpm)

You can **select**, **order**, and **pin** columns as needed. Changes are saved automatically.

The **Columns** panel on the right lets you choose which columns to display using checkboxes. All form fields are listed — check the ones you want.

To change the column **order**, drag the handle to the right of each checkbox. You can also reorder columns **directly in the table** by dragging and dropping the column headers.

![](/files/EwFdAPSWj2jlNEOYZPee)

To **pin** a column, use the menu in the column **header**.

![](/files/mCpx9LNp06S5DglYxQXh)

## Add a filter

The **Filters** panel on the right lets you apply one or more filters to your data. Select a field, configure the filter condition, then click **Apply**.

<figure><img src="/files/TzKxE8yplnH96EY4buRF" alt="" width="397"><figcaption></figcaption></figure>

An **icon** appears next to the field name to indicate an active filter on that column. The **total number** of active filters is shown in parentheses on the side menu.

You can also add a filter **directly from a column header** using the menu available there.

Admins can control which fields appear in the filter pane. See [Managing available filters](/user-documentation/use/views/filtering-system#managing-available-filters).

## Mass actions

To perform [**mass actions**](/user-documentation/use/views/actions-from-views) (create a report, change the submission owner, export, duplicate, modify, delete), select one or more rows from the table.

A **checkbox column** is pinned to the left of the table. To select all rows, click the **checkbox in the table header**, then confirm using the banner that appears ("Select X items").

![](/files/cVN0dq41caCUkOcWMWEJ)

## Reset filters and column configuration

To reset your filters and column layout, click the **Reset** menu and choose either **Reset all filters** or **Reset my custom view**.

![](/files/za0HBpcBUkqMa3umyufj)


# Mixed

Combine a list and detail panel side by side for efficient qualitative review.

The mixed view splits the screen into two panels: a **submission list** on the left and the **full submission detail** on the right. Selecting an item in the list instantly loads its content in the detail panel — without leaving the view or opening a separate page.

## Layout

The left panel works like a filtered list: you can apply filters and scroll through results. The right panel simultaneously shows the full detail of the selected submission, including all its fields, photos, files, and map data.

This split layout means you can navigate from submission to submission in the left panel while keeping the detail visible at all times on the right — there is no back-and-forth between a list page and a detail page.

## Best for

The mixed view is particularly suited to **qualitative analysis** and **sequential processing** — situations where you need to read, assess, or act on submissions one by one:

* Reviewing submissions that contain **photos, files, or map locations**
* Conducting **audits or inspections** where you assess each submission in full
* **Actioning a batch of submissions sequentially** — for example, reviewing 20 submissions and updating their status one after the other. The mixed view keeps the list on the left so you can move to the next item immediately, without navigating back to a list page between each edit as you would in the table view
* Any scenario where skimming a list is not enough and you need to see and act on the full record

## Filtering

Use the filter toolbar to narrow down the list on the left. The right panel updates as you click each result. This makes the mixed view efficient for targeted review sessions: filter to a relevant subset, then step through submissions one by one without losing your place.

## Limitations

* It does not support mass actions (export, duplicate, delete) directly — switch to the table view for those.


# Calendar

Visualize submissions on a calendar based on date fields.

## Calendar view

The calendar view lets you visualize submissions over time and plan upcoming work.

![](/files/yBkI401ss3gqP5NxgcMB)

### Make sure your form is configured accordingly

For data to be displayed in this view, the form **must be configured**. It needs to have a **start date** and an **end date** (date/time type). This operation is performed in the **parameters tab** of your form, under the '**Data Representation**' section.

You can also set a default duration (optional) for the submission with the dedicated field below

<figure><img src="/files/ROIqc8fPEMsP7QYY9biA" alt=""><figcaption></figcaption></figure>

### Access to the calendar view

To access the calendar view, open **the side menu** — the same menu used to switch between the mixed, mosaic, and map views — and select **Calendar View**.

The calendar has **4 display modes**, selectable from the **top toolbar**:

<figure><img src="/files/tlGQKLbOMkfrmmkJoret" alt=""><figcaption></figcaption></figure>

* **Agenda**, which shows the content of the selected day
* **Week**, a weekly representation of your submissions
* **Month**, events scheduled for the desired month
* **Timeline**, which serves as a scheduling tool for your teams.

On the left side of the toolbar:

* The arrows allow you to navigate along the calendar.
* The 'Calendar' icon allows you to quickly return to **the current date**.

### Add a filter

As with all views, it is possible to **apply a filter** to improve **readability** or **find the information** you are looking for. **A filter button** next to the view selection allows you to open **the side menu** and access the filters panel.

![](/files/xOI1Hd6NjqwyKVPfhnnf)

This menu allows you to **select the filter(s)** to apply to your data. You will find a list of fields present in your form, with the option to **configure the corresponding filter**.

Once the configuration is done, you can filter your data by clicking the '**Apply**' button.

**An icon** will appear next to the field name to indicate an **active filter** on that column. **The field** will also be **displayed at the top** of the menu, allowing you to quickly see the active filters and remove them if needed

## Calendar Interactions

Please bear in mind that these interactions will run any automations you have configured on the form (if the triggers & conditions are met)

### Create a submission

You can **create** events **directly from your calendar** view. There are **two ways** to do this: first, the classic method by using the **plus button** located at the top right.

It is also possible to create a new event by **clicking directly on the desired date** in the calendar, where the start and end d**ates will automatically be filled** in the submission.

![](/files/cMbeUUcRQaYvYyxi1z5E)

### Move a submission

You can drag & drop submissions to change their schedule. It will automatically update the start and end dates of your submissions.

![](/files/rHZhsMfcLSBVOSZlsHvO)

When doing so, a dialog box opens towards the bottom of the screen in case you want to cancel your modifications. After 3 seconds, the submission is saved with your new dates.

### Change the duration of submissions

It's also possible to edit the duration of a submission by resizing the submission's card

![](/files/vU0e5FCrRUtyzr9T897y)

## Timeline view

The timeline view organizes submissions by assigned user on a horizontal time axis — best used for scheduling team workloads.

### Pre-Requisite: Adding an assignee

The timeline view will be unavailable as long as you did not define a user field serving as assignee in your form. To do so, you need to have a user field in your form, and head to the "Workflow" menu of the form builder. You will be able to select any user field of your form to define the assignee of the submission. Once this is done, the view won't be greyed out anymore.

![](/files/fzzEdu5281rixCFmZYqE)

{% hint style="info" %}
If the user field you select to act as assignee is restricted to a certain group (on the user field's option), only the users from that group will be displayed in the timeline view.
{% endhint %}

![](/files/VXvLdRGTbBAvmSOqk9HS)

### Overview

The timeline view allows you to navigate between 3 distinct time granularities (Day, Week, Month) through the + and - icons on the top right of the screen. By default, the granularity is set to the weekly one.

![](/files/7pCG4XZ3Wg66btyf41v6)

On the vertical axis, are displayed the active users of your workspace. A search bar is also there to allow you to search users efficiently. If a user's name is greyed out, it means that the user doesn't have any assigned submissions on the selected timeframe.

Submissions that are scheduled (having a start & end date and time) but don't have yet an assigned user will be displayed in the top row under "Not assigned".

{% hint style="info" %}
Currently, if a submission is not scheduled (no start & end date and time), you won't be able to visualize it in this view
{% endhint %}

## Timeline view interactions

On top of supporting all the actions of the calendar view described in this document, the timeline view also has another possible interaction

### Change the assignee of a submission

You can change the assignee of a submission by dragging and dropping a submission from one row to another.

![](/files/eP71cKnHsV3LIZro8Edw)

## Side panel : Submissions to plan & to assign

By clicking on the "grid" button, you can open a side panel

<figure><img src="/files/ORWjVojkmkxbu4irhWaj" alt=""><figcaption></figcaption></figure>

In this side panel, you will find 3 different sections, with different submissions and their count:

* **To assign & schedule:** submissions that don't have their start & end date filled, nor their assignee field filled
* **To assign:** submissions with start & end dates filled, but assignee not filled. Please note that in this panel, you will only see the submission with start & end dates that are within the timeframe displayed on the calendar. In the above example, it'll only show submissions that don't have an assignee, and have a start & end date between the 18th of May and the 24th of May
* **To schedule**: submissions with assignee filled, but not the start & end date.

### Drag & Drop from the panel to the calendar

You can drag & drop a submission from the left side panel to the calendar. Upon dropping the card, the [default duration](#make-sure-your-form-is-configured-accordingly) set in the form will apply. When the view doesn't allow to drop the card at a specific time (agenda, month, timeline, ...), the default start date will be set at 12:00pm

* **From "to assign" to the calendar:** Because the submission already has planned dates, you can only move a submission on a user name, in order to assign it to him

<figure><img src="/files/OwByVR4nCOtKmBO06Ai7" alt=""><figcaption></figcaption></figure>

* **From "to schedule" to the calendar:** Because the submission is already assigned, you can only move a submissions on the assigned user's row. It will schedule for that user

<figure><img src="/files/W7esuenGUGxEprplD0Y3" alt=""><figcaption></figcaption></figure>

* **From "to assign & schedule" to the calendar:** You can drop the card anywhere on the calendar.

<figure><img src="/files/uf7oydSQXppsNTgEIE1Y" alt=""><figcaption></figcaption></figure>

### Drag & drop from the calendar to the panel

* **From the calendar to "to assign":** It will remove the assignee, but keep the planned dates
* **From the calendar to "to schedule":** It will remove the planned dates, but keep the assignee
* **From the calendar to "to assign & schedule":** It will remove both the planned dates & the assignee

<figure><img src="/files/xwS5iLyO7tRY4vgHhBLM" alt=""><figcaption></figcaption></figure>

### Drag & drop from the panel to the panel

You can drag & drop cards between the different sections of the panel.

* **From "to assign" to "to assign & schedule":** Removes the planned dates
* **From "to schedule" to "to assign & schedule":** Removes the assignee

<figure><img src="/files/vhnk2rykGUEUZZZYzd56" alt=""><figcaption></figcaption></figure>


# Gallery

Display submissions as visual cards with thumbnails — ideal for photo-rich data.

The gallery view displays submissions as image cards. It is best used for:

* Qualitative image overviews
* Synergies with the [PowerPoint Report](/user-documentation/build/building-the-reporting/report-templates/ppt) feature — quickly generate a presentation from selected images

## Actions

![](/files/fSnxS5riW1Xj4RXGlavA)

From the toolbar (top right of the view), you can:

1. Create a new submission
2. Filter your submissions
3. Import submissions
4. Choose the image size: Small, Medium, or Large

## Cards

By default, the image shown on a card is the first image in the submission. You can change this in the general settings of your form by selecting a different image field. If the selected field allows multiple images, the first one is shown.

![](/files/wMqKFRp1QqYZ11lniLk5)

A card looks like this:

![](/files/z8Q5o916GcTuhrMmDggf)

**1 — Custom title:** The submission's custom title, configured in the form settings. You can include values from submission fields.

![](/files/3usrqKiOW859EEdmuPT4)

**2 — Submission number** *(read-only)*: The unique submission number. It cannot be replaced with other information.

**3 — Author** *(read-only)*: The first and last name of the user who created the submission.

**4 — Download photos:** Click to download all photos in the submission. A single image downloads as a file; multiple images are packaged as a zip.

**5 — Photo carousel:** Click to open a carousel of all photos from this submission.

![](/files/wNgN81nA768kodtLATNj)

**5A:** Click the circles to navigate between photos of the selected submission.

**5B:** Click the arrow to move to the next submission.

**6 — Select:** Tick the checkbox to select the submission. Once one or more submissions are selected, you can:

* Generate a report (requires a configured report template)
* Export the submissions
* Duplicate the submissions
* Update one or multiple fields across all selected submissions (same value applied to all)
* Delete the submissions


# Map

Plot submissions on an interactive map using geolocation data.

The map view displays submissions as pins on an interactive map, using their geolocation fields.

## Prerequisites

The map view requires your form to have at least one **geolocation field**. The values stored in that field determine where each submission is plotted.

## Navigating the map

The map supports zoom and pan. Use the scroll wheel or pinch gestures on touch screens. Zoom in far enough to see individual addresses.

## Pins and clustering

Each submission with a geolocation value appears as a pin on the map. In dense areas, nearby pins are automatically grouped into a **cluster** that shows a count badge. Click a cluster to zoom in and separate the individual pins.

## Opening a submission from a pin

Click any pin to open a summary popup. From the popup, click through to open the full submission layout.

## Filtering the map

The filter panel works the same as in other views — apply one or more field conditions to narrow down which submissions are shown. The map updates in real time to display only the matching pins.

## Map layers

**WMS layers** (Web Map Service) can be overlaid on the base map — for example cadastral maps, utility networks, or custom geographic data. **GeoJSON layers** are also supported. Both are configured at the workspace level by an administrator.

{% hint style="info" %}
Custom map layers (WMS, GeoJSON) are configured in the workspace settings. Contact your Daxium administrator to add or update layers.
{% endhint %}

## Best for

* Field operations with geographic scope
* Asset tracking and site management
* Route visualization and coverage analysis


# Actions from Views

Perform bulk actions from views — import, export and generate reports.

From any view, you can select one or more submissions and perform the following actions via the **Actions** menu:

* [**Import submissions**](/user-documentation/use/views/actions-from-views/import-submissions) — Import data from a file into a form
* [**Generate a report**](/user-documentation/use/views/actions-from-views/generate-a-report) — Generate a report from the selected submissions (requires a configured [report template](/user-documentation/build/building-the-reporting/report-templates))
* [**Export submissions & images**](/user-documentation/use/views/actions-from-views/export-submissions) — Export the selected submissions or images to a file
* [**Duplicate submissions**](/user-documentation/use/views/actions-from-views/duplication) — Create a copy of the selected submissions
* [**Modify & Delete submissions**](/user-documentation/use/views/actions-from-views/modify-and-delete-submissions) — Update or permanently remove the selected submissions


# Import Submissions

Import submissions in bulk into Daxium-Air using CSV files.

You can add or update submissions in bulk in the Daxium-Air back office using CSV files.

## Quick start — simple CSV import

The most common case: adding new submissions from a CSV file.

1. **Get a template:** In the table view, click **Actions > Export** and choose **Full export for import**. The downloaded CSV already has all the correct column headers for your form.
2. **Prepare your data:** Add your new rows. Delete the `submissionNumber` column so Daxium-Air creates new submissions rather than updating existing ones.
3. **Set the creator:** Fill the `userEmail` column with the email address of the user who should appear as the submission creator.
4. **Import:** In the table view, click **Import**, select your CSV file, set the insertion mode to **Add**, and click **Import**.

A background job runs the import. A notification appears when it finishes. If any rows failed, download the error CSV to see what went wrong.

For bulk updates to existing submissions, see [Differential import](#differential-import). For imports that include relationships between forms, see [Importing with relationships](#importing-with-relationships).

## Expected spreadsheet structure

Export existing data using **Full export for import** to get a correctly structured template, then modify the values as needed.

![](/files/C4bImliqmtw17cX0Q0Of)

To import new submissions, delete the `submissionNumber` column — otherwise you will update existing submissions instead of creating new ones.

## Default required columns

Every import must include the `userEmail` column, filled with the email address of the Daxium-Air user who will be designated as the submission creator.

## Field columns

Add one column per form field you want to populate. The column header must be the field's **system name**.

Not all fields need to be included. However, if a mandatory field is missing, the submission will not be saved — you will receive an error file explaining the problem.

**List field:** Populate using either the option's display value or its external identifier. Append a suffix to the system name:

* `systemname#name` — use the option's display value
* `systemname#external` — use the option's external identifier

Use only one of the two options per column.

**Date field:** Dates must be in ISO 8601 format. Example: `2018-04-30T17:00:00+02:00`

**File and image field:** Provide a public URL from which the file can be downloaded.

**Boolean field:** Value must be `true` or `false`. Any other value will cause an error.

**Location field:** Add 3 columns. If the system name is `address`:

* `address#address` — full address (e.g. `21A bd Gabriel Guist'hau 44 000 Nantes`)
* `address#lat` — latitude (e.g. `55.9967`)
* `address#lng` — longitude (e.g. `54.774`)

## Setting up the import

In the table view, click **Import**. Select your CSV file, choose the encoding and column separator. Use comma `,` by default when importing from Microsoft Excel.

![](/files/TJjCvrVw5F96vMI3kt7V)

Set the insertion mode to **Add** to create new submissions.

{% hint style="info" %}
When saving from Excel, choose **CSV UTF-8 (comma delimited)** as the file type. In the Daxium-Air import dialog, confirm the encoding is set to **UTF-8**.
{% endhint %}

![](/files/XeYDMIsZoxU66qh7qsmT)

![](/files/Wk2lH6mafd3H0Af4PAIf)

## Error handling

When the import finishes, if any submissions could not be saved, a CSV error file is available for download. It explains what went wrong for each failed row.

***

## Advanced

### Differential import

Differential mode updates existing submissions rather than creating new ones. Include the `submissionNumber` column to identify which submissions to update. Submission numbers appear in the first column of the table view — do not confuse them with the UUID, which contains letters.

![](/files/SWMIzT2StJDXgZnoRC4e)

Two differential options are available:

* **Differential without formula recalculation** — faster import. Parent-child formulas on related submissions are not recalculated.
* **Differential with formula recalculation** — slower import. Parent-child formulas on related submissions are recalculated.

**Empty cells:** When a column is present in the file but a cell is empty, choose how to handle it:

* **Keep the old value** — the empty cell is ignored; the existing value is preserved.
* **Delete the old value** — the empty cell replaces the existing value.

![](/files/WQxxyOF1hFy2cNPykRcQ)

### Importing with relationships

It is possible to import submissions linked together via relations using an Excel file.

#### File structure

**"Worksheet" tab**

The main tab for the primary submissions. It follows the same structure as a standard CSV import.

![](/files/mTosfaUKpOtydrcFVm70)

In **Differential** mode, include `submissionNumber` to identify the submissions to update.

In **Add** mode, still include a placeholder in `submissionNumber` — it is replaced on creation but is used to identify submissions within the file, particularly in the Relationships tab.

**"Relationships" tab**

Lists all the relations between submissions. Must have at least 4 columns, plus an optional fifth:

![](/files/lSTcIkKM8qmaRx8Aan20)

* `parent` — submission number from the Worksheet tab
* `relationship` — system name of the relation field linking the two submissions
* `child` — submission number from a related tab
* `id structure` — Daxium identifier of the form used to build the child form
* `count` *(optional)* — quantity in a quantifiable relation

**Related submission tabs**

Create one tab per related form.

![](/files/5iFV8G4gazjkUxYm7A75)

Each tab must be named: `SystemName FormId` (e.g. `SystemName 2951`). Enter `submissionNumber` values the same way as in the Worksheet tab.

#### Running the import

In the table view, click **Import** and select your Excel file. The column separator and encoding options have no effect for Excel files.

![](/files/Z0dyxACmsqF3qA2j9Rlc)

**Add** mode creates a new submission for each row. **Differential** mode updates existing submissions without creating new ones.

#### Limitations

* It is not currently possible to remove related submissions via a differential import.
* Parent submission formulas are not recalculated during import if those formulas reference a relation field containing more than 5 elements.


# Generate a Report

Generate a report from one or more submissions directly from a view.

To generate a report, go to the "Submissions" menu, select a submission, check the box to the left of the entry and click **Actions > Report**:

![](/files/K6Tcabka8nDBVe7uBRHc)

![](/files/hBJ6z8yDjn1emdr9iJCe)

Select the template, optionally rename the output file, and check the PDF box if needed. Click **Generate**. Once complete, a notification will appear next to the bell icon:

![](/files/ZXnXeXXumMHFi1LWAUT0)

Click the format button to download the file. If the button does not appear, the file has not yet been generated — refresh the page.

{% hint style="info" %}
You need to have a [report template](/user-documentation/build/building-the-reporting/report-templates) configured before you can generate a report.
{% endhint %}


# Duplicate Submissions

Duplicate submissions individually or in bulk from web and mobile.

On the web, as on mobile, it is possible to duplicate submissions individually or in bulk, except for submissions under a workflow that are not in the initial state.

## Configure data to duplicate

By default, when a submission is duplicated, all of the information it contains is copied. From the form, it is possible to define the values of the fields to duplicate in a submissions. This is configured in the advanced settings of your form:

![](/files/SMUXzzWGuOExGywi7kDh)

## From the web

### In bulk

From the table view, after selecting one or more cards, click on **Actions** then **Duplicate**:

![](/files/8smOstx8jkem9zDCrqKQ)

### Single

From the table view, open one submission and click on **Actions** then **Duplicate:**

![](/files/BlZtMGes8w7v91O2aA7H)

You will be redirected to a view allowing you to modify the duplicate submission before saving it. This way, you can duplicate a submission that is not in the initial workflow state. In return, for technical reasons, sub-content relation fields (see below) are not duplicated.

## From mobile

{% tabs %}
{% tab title="Android" %}

### In bulk

<div align="left"><img src="/files/a93hIgHggMDas75cm3ci" alt="" width="375"></div>

* Go to the "My Submissions" view
* Long-press a submission row to enter selection mode
* Tap the duplication icon in the top menu
* Confirm
* The submissions are duplicated as drafts
  {% endtab %}

{% tab title="iOS" %}

### Single

<div align="left"><img src="/files/7tHPkucFtxMBziXwLV5d" alt="" width="375"></div>

* Go to the "My Submissions" view
* Swipe left on a submission row to reveal the action menu
* Select **Duplicate**
* The duplicate submission is created as a draft
  {% endtab %}
  {% endtabs %}

## Special case of relation

When duplicating a submission, if a relationship field needs to be copied, we use the relationship parameters to know what to do.

Also be careful not to put the same system name on your relationship element fields (and formulas based on a child field) so that the form is duplicated.

**Relationship of the "Plan" type**

When duplicating a submission that contains a relation of the "Plan" type, the relation field will be emptied.

### Duplication behavior

When setting up your relation field, you will see an option related to duplication

![](/files/bdCKKDBPuDekinDIlUlG)

This allows you to choose how the relation field should be duplicated, amongst the 2 below options

* **Duplicate child submissions:** The child submissions that were in the relation field you are copying from will be duplicated. Meaning new entries will also be created for the child form
* **Link to existing child submissions**: The copied submission will have a link to the existing child submissions you are copying from. Meaning no new entries will be created for the child form. This is best used in relations of "Selection" type, when the child form you are selecting submissions from is acting as a "database". Ex: If you have a main form for *transactions*, and a child form for products, when duplicating the transaction you don't want to duplicate the products, as it will lead to duplicates in your *product* form


# Export Submissions & Images

Export submission data from views to CSV or Excel files.

## Bulk export of images

### Download all images from a submission

In the gallery view, click the download icon on a submission card to download all its images as a zip file.

### Download all images from a set of submissions

In the table view, select the submissions you want, then go to **Actions > Export**. In the export wizard, choose the format **Download all images**.

![](/files/lhQPpw6DxwCYT671P0Fw)

You can choose whether to include images from related submissions. If included, the zip file will contain images from submissions directly related to the ones you selected.

The export runs asynchronously. When it finishes, a notification appears in the bell menu (top right). The zip file is available to download from there.

In the zip file, images are organised into folders:

* **Submission images:** `submissionNumber / systemNameOfImageField`
* **Related submission images:** `parentSubmissionNumber / relationSystemName / relatedSubmissionNumber / systemNameOfImageField`


# Modify & Delete Submissions

Modify or delete one or more submissions in bulk from any view.

From any view, you can act on one or more submissions at once using the **Actions** menu. The **Modify** and **Delete** actions are asynchronous — once launched, Daxium-Air processes them in the background. You will be notified of the result in the notification bell when the operation is complete.

## Modify submissions

The **Modify** action lets you update one or more fields across a selection of submissions. Every selected submission will be set to the same value for each field you choose. This is particularly useful for bulk status updates — for example, changing the status field of a batch of submissions from a list field all at once.

**Step 1** — Select the submissions you want to modify.

**Step 2** — Under **Actions**, select **Modify**.

**Step 3** — Pick one or more fields from the drop-down.

**Step 4** — Enter the value(s) for the selected field(s).

**Step 5** — Confirm. The update will run in the background; check the notification bell for the result.

## Delete submissions

The **Delete** action permanently removes the selected submissions. Select the submissions you want to delete, then choose **Delete** under **Actions** and confirm. The deletion runs asynchronously — you will receive a notification in the bell when it is complete.

{% hint style="warning" %}
Deletion is permanent. Deleted submissions cannot be recovered.
{% endhint %}


# Submission Layout

Understand the different layouts for viewing and editing submissions in Daxium-Air.

When you open a submission in Daxium-Air, its content is displayed using a layout. Two layout types are available:

* [**Summary Layout**](/user-documentation/use/submission-layout/summary-layout) — A dashboard-style view configured by an administrator. Shows a curated selection of fields, metadata, and related submission data on a single page. Read-only; use the standard layout to edit.
* [**Standard Layout**](/user-documentation/use/submission-layout/standard-layout) — The default view when no summary layout is configured. Displays all form fields in their original order, and is the entry point for editing.

To modify a submission or leave notes, see [Editing Submissions](/user-documentation/use/submission-layout/editing-submissions) and [Commenting on Submissions](/user-documentation/use/submission-layout/commenting-submissions).


# Summary Layout

The summary layout provides a dashboard-style overview of a submission.

The summary layout provides a dashboard-style overview of a submission, addressing four major needs.

* The need to display a summary of your submission on a single page. Ideal for longer forms.
* The need to display fields from child submissions without having to enter the child submission itself.
* The need to access, from a child submission, the parent submission that refers to it.
* The need to display metadata for your submission (creation date, user who created it, etc.)

![](/files/VeCghLkgPqdpkErIIL19)

{% hint style="info" %}
This page covers the summary layout as your users experience it. To build one for a form, read [Summary Layout](/user-documentation/build/building-forms/summary-layout) in the Build section.
{% endhint %}

## Use the summary layout

When a form has an active summary layout, opening a submission from that form will open the summary, as you have configured it.

![](/files/o2T7HpFDI8K6sZNfNonU)

To navigate to the standard view, a "View Details" button allows you to switch to the standard layout. The "Edit" button also navigates to the standard layout, but in "Edit" mode.

In relationship fields, clicking on the relation will open the submission in a new browser tab. If the related form also has a configured summary, this will open by default.

The summary layout is also available for mobile devices, and looks like this:

<img src="/files/vtoKCapx4xIspoUTx8Go" alt="" width="188">

## Limitations

* The summary layout does not allow editing of the submission. It is a **read-only** view.


# Standard Layout

The standard layout displays the full form with all fields, history and actions.

The standard layout is the default way to view and edit a submission in Daxium-Air. It presents the complete form — all fields, organized by section — alongside metadata, history, and available actions.

The platform always falls back to the standard layout when no [Summary Layout](/user-documentation/use/submission-layout/summary-layout) is configured for that form, or when you explicitly switch from the summary layout to the standard one.

## Accessing the standard layout

**From a view (Table, Gallery, etc.):** click a row or card to open the submission. If no summary layout is active, the standard layout opens directly.

**From the summary layout:** click **View Details** to switch to the standard layout in read mode, or **Edit** to open it directly in edit mode.

**On mobile:** tap a submission card in any list to open it. The standard layout is the default display on mobile when no summary layout has been activated for that form.

## Layout sections

The standard layout is divided into five sections visible on the right-hand panel and the main body.

| Section         | Description                                                                        |
| --------------- | ---------------------------------------------------------------------------------- |
| **Form fields** | All fields from the form structure, organized by section and page                  |
| **History**     | Timeline of all changes, status transitions, and comments                          |
| **Info panel**  | Metadata — created by, creation date, last update, assigned to                     |
| **Actions**     | Available operations — change workflow status, generate a report, assign to a user |
| **Reports**     | Previously generated reports attached to this submission                           |

### Form fields

The main body of the standard layout shows every field from the form, grouped by page and section exactly as defined in the form builder. Fields are read-only until you click **Edit**.

{% hint style="info" %}
Calculated fields, read-only fields, and fields hidden by a visibility condition are not editable even in edit mode — this is controlled by the form configuration, not the layout.
{% endhint %}

### History

The history panel logs every event on the submission in reverse-chronological order:

* Field value changes (before/after)
* Workflow status transitions
* Assignment changes
* Comments (see [Commenting on Submissions](/user-documentation/use/submission-layout/commenting-submissions))
* Report generation events

### Info panel

The info panel shows fixed metadata that cannot be edited:

* **Created by** — the user who submitted the form
* **Creation date** — timestamp of the initial submission
* **Last updated** — timestamp and author of the most recent edit
* **Assigned to** — the user or group currently assigned to this submission (editable via the Actions section)

### Actions

The actions available depend on the form configuration and the current user's permissions:

* **Change workflow status** — move the submission to the next or a specific workflow state
* **Generate a report** — trigger a report template and attach the output to the submission
* **Assign** — assign or reassign the submission to a user or group

### Reports

Previously generated reports are listed here with their generation date. You can download any report from this section.

## Editing a submission

To edit fields, click **Edit** in the top-right corner. This unlocks all editable fields. When done, click **Save** to commit your changes or **Cancel** to discard them.

Edits are logged immediately in the History panel on save.

See [Editing Submissions](/user-documentation/use/submission-layout/editing-submissions) for full details on edit mode, bulk editing, and permission requirements.

## Web vs. mobile

The standard layout is available on both web and mobile. The structure is the same, but the mobile version stacks sections vertically and uses a bottom action bar instead of the right-hand panel.

On mobile, the History and Info panel sections are accessible via tabs at the top of the submission view.


# Editing Submissions

How to create, edit and manage submissions on web and mobile.

Submissions can be created and edited from both the web back-office and the mobile app.

## Creating a submission

1. Navigate to the relevant **view** or **structure**
2. Click **New submission** (web) or tap **+** (mobile)
3. Fill in the required fields
4. Save as **draft** or **submit** to advance the workflow

## Editing an existing submission

* Open the submission from any view
* Modify the fields you need to update
* Save your changes

{% hint style="warning" %}
Editing permissions depend on your group permissions and the current workflow status. Some fields or statuses may be locked.
{% endhint %}

## Offline mode (mobile)

The mobile app supports **offline editing**:

* Create and edit submissions without an internet connection
* Data is stored locally on the device
* Automatic sync when connectivity is restored

{% hint style="info" %}
To delete a submission or perform bulk edits across multiple submissions, see [Modify & Delete Submissions](/user-documentation/use/views/actions-from-views/modify-and-delete-submissions).
{% endhint %}


# Commenting Submissions

Add comments and notes to submissions for team collaboration.

Daxium-Air allows you to comment on submissions so your teams can exchange on the data they report. This is particularly useful for asking for details about a submission before validating it, for example.

{% embed url="<https://app.guideflow.com/player/lpx5gdwi4r>" %}

## Commenting on the web

The comment feature is available on **every submission**, regardless of which view (table, gallery, map, calendar, etc.) you are accessing it from.

The feature is also available in both submission layouts: standard and summary.

![Standard Layout](/files/qEF9VMaL5iQDt5ve3j1I)

![Summary Layout](/files/XlT4Do6WJHPxnINCvbvT)

### Reading & writing comments

Clicking the comments button opens a side panel with the comment section. The comment feature allows you to:

* Write a comment, and format it with markdown (Bold, Italic, Underline, Bullet & Numbered lists, URLs)
* Reply to a comment (the replies are collapsible & expandable)
* Delete a comment
* Edit a comment (it will have the "Edited" mention afterwards)
* Reorder comments from oldest to newest or the other way around.

![](/files/qUnM68XDhtBA5di6gYp2)

### Receiving notifications

The feature also includes a notification system. Each time a comment is added to a submission you are assigned to, you will get a notification. The notification will be available on the bell on the top right of your screen. Clicking on the link will lead you to the submission & comment.

{% hint style="info" %}
To receive notifications for **every** comment added to a submission, you must be [assigned to that submission](/user-documentation/build/building-forms/workflow-and-assignation#assignation). If you are not assigned to it, you will only be notified when someone replies to a comment you wrote yourself.
{% endhint %}

![](/files/e2sFqd9MLoT1sc03X7N6)

{% hint style="success" %}
**Tip — notify the submission creator of every comment.** If you want the person who created a submission to be notified each time someone comments on it, you can wire this up automatically:

1. Add a simple [workflow](/user-documentation/build/building-forms/workflow-and-assignation) to your form and set up [assignation](/user-documentation/build/building-forms/workflow-and-assignation#assignation) (a user field designated as the assignee in the workflow settings).
2. Create an [automation](/user-documentation/build/building-forms/automations) triggered **when the submission is created**, of the **Modify the value of a field** type. Select the user field that defines the assignee and fill it with the submission's creator.

This way the creator is automatically assigned at creation and receives a notification for every comment.

Remember a single user can only have **1,000 submissions assigned** at a time, so also set up an automation to **unassign** the creator after a delay (for example, once the submission reaches a final workflow state).
{% endhint %}

## Commenting on the mobile

The same features are available on mobile, both Android and iOS. Notifications are sent via the standard push notification system, like all other Daxium-Air mobile notifications.

## Limitations

* A submission is limited to 50 comments
* Each comment is limited to 1,000 characters
* You can't upload attachments in the comments
* You can't tag a user for him to be notified
* You can't import or export comments


# Send Data from Daxium

Create bridges between Daxium-Air and your existing systems.

Daxium-Air lets you create bridges between the platform and other systems so your data flows automatically into your existing workflows.

* [Planned Export](/user-documentation/connect/exporting-data/planned-export) — Schedule recurring exports of submissions, reports, and attachments to an FTP or SFTP server.
* [Webhooks](/user-documentation/connect/exporting-data/webhooks) — Send real-time HTTP notifications to external systems whenever a submission is created or updated.


# Planned Export

Schedule automatic data exports on a recurring basis.

This feature allows you to configure automatic sending, according to a defined frequency, of Daxium-Air elements : JSON of the submission, reports, attachements, images, files, signatures, ...

## Configuring integration with the FTP server

Go to **Settings > Webservices > Integrations:**

![](/files/MDupJPiBiVq9zcffnC7q)

If you do not have an "FTP" active:

Click the **"Add"** button at the top right and choose the "FTP" integration

![](/files/FzBXHaET7TKwwQAnCscq)

In the add screen, enter a name, check "Active", then fill in "User name" and "Password".

If your server uses the FTPS protocol (FTP with SSL), also check "SSL" :

![](/files/rmsKPROMecW3SCCbKEsS)

Click the **"Save"** button at the top right, reopen the integration and click the "Check connection" button at the top right. :

![](/files/xpJoBTn20QtpRJv9GeTZ)

If a green message "Connection successful" appears, you can continue.

If not, correct the settings and click on **"Save"**.

Then repeat the **"Check Storage Connection"** operation until you get a success message.

![](/files/Cc6RI9XpCNF9dq5iXLUM)

## Configuration for reports

### Prerequisite

* In Daxium-Air: If you want to export reports, you must have report templates (automatic or scheduled) previously configured in **Settings > Reports**

![](/files/C2dbgUBmDBcvTb2UyZ4M)

* Excluding Daxium-Air: The identifiers (login and password) of an account on an FTP or FTPS server (FTP with SSL), having rights to create folders and files.

### Configure the export

Go to **Settings > General > Planned Exports:**

![](/files/yPB7rnT6WkErBBTZK3AO)

Click at the top right on the button **"Add export"** and select "Periodic data export" :

![](/files/F1BU3bw2B5W4de55lik3)

In the **first section**, enter a name, check "Active" and choose the integration previously created and verified previously in the "Integration" list. You can also check the forms to include:

![](/files/abWhpZnKOat8qaL0ehLj)

In the **"Manual and automatic reports"** section, if you want to export reports, check "Active".

If necessary, edit the name of the "Directory" using the "Edit" to the right.

**Types of reports to export**:

* Manual reports: reports generated manually by all users of the workspace
* Automatic reports: automatic or scheduled reports generated on the workspace

**Report modes to export**:

* Listing reports: reports with the "Listing mode" option, which contains information from several submissions
* Individual reports: reports containing information from a single submission

![](/files/JpHL0Oes3xAPPSF1Svld)

{% hint style="info" %}
Favor exporting the bare minimum, so as not to export too many files and take up space unnecessarily.
{% endhint %}

## Add any other element (JSON, images, files, signatures, ...)

In the "**Directory or folder**" section, check the desired options. You can enter a custom path of your FTP for each element:

![](/files/wlZVcbDL0LwvhLRSMyv1)

## Scheduling

In the **"Export Scheduling"** section, choose a start time in at least 5 minutes, as well as other parameters as you wish:

![](/files/kuy7qAErJ9eMT4AP2hxT)

Finally, click at the top right on the button **"Save"**.

To check that your export is working correctly, return to the list of scheduled exports and take note of the values in the **"Last execution"** and **"Next execution" of your export:**

![](/files/Okfne4v9ZdQrkwdfbqGH)

Wait at least 10 minutes after the scheduled execution time of your export, then refresh the page.

If the export is successful, you will see that the values have been updated.

Your files are now available on your FTP server.

If that fails, click the "Show" in the column **"Last export message".**

Fix any configuration issues, then change the start time of your export to run it again.


# Real Time - Webhooks

Send submission data from Daxium-Air to external systems in real time.

## What is a webhook?

A webhook is an automated HTTP request that Daxium-Air sends to a target URL of your choice as soon as an event occurs on the platform — for example, when a submission is created or updated. Instead of another system having to poll Daxium-Air for changes, Daxium-Air pushes the data to that system the moment it becomes available.

## Using webhooks to integrate with other software

Webhooks are a lightweight way to connect Daxium-Air to any external tool that can receive an HTTP request: a CRM, an ERP, a messaging service, a database, a custom internal application, etc.

Once the webhook payload is received at the target URL, the data can be used as-is, or it can first be transformed by a **middleware** (a small service you host yourself) or by a **no-code automation tool** such as [Make](/user-documentation/connect/no-code-connectors/make) before being forwarded to the final destination system. This intermediate layer lets you reshape fields, enrich the payload, apply business rules, or fan the data out to several systems at once — without any custom development on the Daxium-Air side.

## Configuration in Daxium-Air

![Webhook configuration via a Daxium-Air automation](/files/TrMJYzItdVO5D3wgHaFn)

Webhooks in Daxium-Air are configured through the [Automations](/user-documentation/build/building-forms/automations) feature. Because automations live at the form level, each webhook is set up on the specific form whose submissions you want to push out: you open the form, create an automation, and select **"Send the submission to an external URL"** as its action.

Since webhooks rely on the automation engine, you also need to define **when** they are sent:

* **Trigger** — the event that fires the webhook (for example, a submission being created, updated, or reaching a specific workflow state).
* **Condition** *(optional)* — you can create and attach a [condition](/user-documentation/build/building-forms/conditions) so the webhook is only generated when the submission matches the rule you define (e.g. only when a status field equals "Validated", or only for submissions above a certain amount).

Once the trigger and (optional) condition are set, you can finish configuring the action:

* **Listening URL** — the HTTPS endpoint that will receive the webhook payload. This URL is provided by the system on the receiving end (your middleware, your no-code tool, or the third-party application). For a general introduction to webhooks and how a listening URL is set up, see [Make's webhooks documentation](https://help.make.com/webhooks). If you want to quickly create and inspect a listening URL for testing, you can use a free service such as [webhook.site](https://webhook.site), which generates a unique URL on the fly and displays every request it receives.

  <div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><p>Use webhook.site with caution: the URL it generates is <strong>public</strong>. Before using it, make sure you are allowed to expose the data in your submissions externally. For anything containing personal data, customer information, or other sensitive content, use a private endpoint you control instead.</p></div>
* **Header parameters** *(optional)* — you can add one or more custom HTTP headers (key/value pairs) to every request sent by the webhook. This is typically used to pass an authentication token, an API key, or any other metadata the receiving system expects.
* **Issue notification email** *(optional)* — you can specify an email address that will be notified whenever the webhook fails to be delivered (for example, if the listening URL is unreachable or returns an error).

## Payload format

The webhook sends a `POST` request with `Content-Type: application/json` to your listening URL. The body is the full JSON representation of the submission that triggered the event.

### Top-level fields

| Field                             | Type           | Description                                                                                    |
| --------------------------------- | -------------- | ---------------------------------------------------------------------------------------------- |
| `id`                              | UUID           | Submission identifier                                                                          |
| `type`                            | string         | Submission type (e.g. `"simple"`)                                                              |
| `submissionNumber`                | integer        | Sequential submission number                                                                   |
| `vmShort`                         | string         | Short name of the Daxium-Air instance                                                          |
| `title`                           | string \| null | Submission title, if set                                                                       |
| `isTaskModel`                     | boolean        | Whether the submission is a task model                                                         |
| `latitude` / `longitude`          | float \| null  | GPS coordinates of the submission, if captured                                                 |
| `createdAt` / `updatedAt`         | integer        | Creation and last update timestamps (UNIX)                                                     |
| `dataCreatedAt` / `dataUpdatedAt` | integer        | Data-level creation and update timestamps (UNIX)                                               |
| `structure`                       | object         | Form metadata: `id`, `version`, `name`, `hasTriggers`, `isLastVersion`                         |
| `user`                            | object         | User who last modified the submission: `id`, `email`, `first_name`, `last_name`, `groups`      |
| `items`                           | array          | List of all form fields with their values (see below)                                          |
| `settings`                        | object         | Submission settings: `tags`, `task`, `color`, `firstLevel`, etc.                               |
| `currentState`                    | object \| null | Current workflow state if the form has a workflow: `id`, `name` (multilingual), `color`, `end` |
| `defaultImage`                    | UUID \| null   | UUID of the submission's default image, if any                                                 |

### `items` array — field types

Each element in `items` always includes `name` (system name), `type`, `label`, and `value` (when applicable).

| Field type                                                        | `value` format                                                                                                                |
| ----------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| `text`, `number`, `boolean`, `date`, `email`, `phone`, `duration` | Scalar (string / number / boolean / UNIX timestamp)                                                                           |
| `location`                                                        | `{ lat, lng, address }`                                                                                                       |
| `image`, `signature`, `file`                                      | Array of objects: `{ id, name, size, mimeType, extension }` — **file content is not included; retrieve it via the Files API** |
| `list`                                                            | `{ ids: [...], lists: [{ id, rootId, name, url, color, externalId, imageId }] }` — **fully expanded with names and metadata** |
| `relation`                                                        | `{ submissions: [{ id, structure_id }] }` — **IDs only; retrieve full data via the Submissions API**                          |
| `user`                                                            | Array of `{ id }` objects                                                                                                     |
| `label`, `logo`                                                   | Display-only fields; no `value`                                                                                               |

{% hint style="info" %}
List values are **fully expanded** in the webhook payload (names, colors, external IDs, etc.), unlike the standard Submissions API which returns only IDs by default. Relation and file fields are **not** expanded — use the respective API endpoints to fetch their content.
{% endhint %}

### Authentication

Daxium-Air does not sign webhook payloads. To secure your endpoint, use the **Header parameters** field in the automation to pass an API key or bearer token that your receiving system can validate.

## Delivery and retry behaviour

* Daxium-Air expects an **HTTP 2xx** response from your endpoint within **30 seconds**. Any response outside the 2xx range, or no response within the timeout, is treated as a failure.
* Failed deliveries are **stored in Daxium-Air** and visible in the back office. They can be **retried manually** from there.
* No automatic retry is performed — manual intervention is required for failed calls.

## Report webhook (send report + submission URLs)

In addition to the submission webhook, the **report-sending automation** supports a separate webhook variant that posts the URLs of a generated report and its associated submission once the report is ready:

```json
{
  "report": "https://api.daxium-air.com/{app_short}/reports/{report_id}/results/{file_uuid}",
  "submission": "https://api.daxium-air.com/{app_short}/submissions/{submission_id}"
}
```

To configure it, enable **"Send my report to an external URL"** in the report automation and provide the target HTTPS URL. Custom headers and an issue notification email work the same way as for the submission webhook.


# Business Intelligence

Connect Daxium-Air to business intelligence tools for advanced analytics.

Leverage your Daxium-Air data in BI tools for advanced analytics, custom dashboards and cross-system reporting. Currently, [Power BI](/user-documentation/connect/business-intelligence/power-bi) is the supported integration.


# Power BI

Connect Daxium-Air to Microsoft Power BI for advanced dashboards and analytics.

The data from the files in Daxium-Air can be analyzed using the Microsoft Power BI tool which allows you to create dashboards with different visuals and filters:

![](/files/dCk7XHQ0GVPGBeb6Bn3l)

## Prerequisites

To set up a Microsoft Power BI dashboard, you must first set up 2 integrations and a planned export.

![](/files/kCPTxMhcmN5kAA3PDobs)

**1st integration: Local Storage**

![](/files/G8fbkvndfOKTg3ffvjFX)

Check **Active** and Save:

![](/files/SHufFKcvbGwmFSeUOjfD)

**2nd integration**: **PowerBI**

![](/files/Y77sn08iYcEYuWrq1MJa)

On the same browser, connect to [app.powerbi.com](http://app.powerbi.com/) then click on Authorization on PowerBI:

![](/files/PR2nni4uMkiDw8waO1tF)

From Power BI online, create a dedicated workspace:

![](/files/1Ox5ZQPnwI8m2QN9KzXe)

From Daxium-Air, select it in **Group** after authorization then Save:

![](/files/kAqcCI68ia8jvbiG7ndW)

**Scheduled export:**

![](/files/yPB7rnT6WkErBBTZK3AO)

Create a new scheduled export of type **Power BI**:

![](/files/WSODaHb12VDbVlnIIBUt)

Once created, check the **Active** box and select the first integration created **Local Storage**:

![](/files/fHyfJa8BRuHcFSoqfC9j)

## Configure the Daxium report template

The first step is to download Microsoft's Power BI tool: [https: //powerbi.microsoft.com/en-us/desktop/](https://powerbi.microsoft.com/en-us/desktop/)

For further information, please contact <support@daxium.com> to have them provide you the template in pbix format and the custom connector (.mez file).

In your documents, create a Microsoft Power BI Desktop folder containing a Custom Connectors subfolder to place the .mez file provided by support:

![](/files/F7HaPnUCiRZE9Qs4JBwE)

Open the template with Power BI Desktop and click on **File** at the top left then **Options and settings > Options:**

![](/files/sl39tzChtdwx4cFpDUJi)

In the options, go to the **Security > Data extensions** and check the option **(Not recommended) Allow loading of all extensions without validation or warning:**

![](/files/BdZbu7MnVdI1Ejw7kPGh)

Then click on **Transform data**:

![](/files/rcot9gOxqa9xlKkNdlRH)

Right-click on the **LoadEntityRow** query and select **Advanced Editor**:

![](/files/r426XM3JzDgI0WRSai65)

Replace `tools` with the **name of the workspace**, followed by the **ID of the planned export**:

![](/files/RhpsfF9heUn1wAG44Wii)

Next, click Data Source Settings to change the credentials:

![](/files/KuS73vnfhAdYBHOQ9TTE)

Click Sign in as different user

![](/files/a5SXvHwMmz51bQd7x1YO)

Then Daxium-Air login page opens. Enter the email then the password of the administrator account (also having Mobile permission) of the workspace:

![](/files/FFt8HbpCf0Klf8jOVd0o)

Click on **Accept** :

![](/files/YrcAVwi3DirTF35vQ7KG)

Then **Connect**:

![](/files/ZshcDUI9JqoqXMy0wC2w)

## Accessing your Data in Power BI

This section explains how to load different Daxium elements (submissions, lists, workflows, etc.) in your Microsoft Power BI report.

You will need the Daxium-Air Power BI template, provided by your project manager. It contains a set of preset functions allowing you to access the data.

The following queries have to be created as a "Blank Query" & then by inputting the below code.

### Users & Licencing

* The subscriptions of your workspace

```
= LoadEntityRows("subscription")
```

* The licenses of each user

```
= LoadEntityRows("subscription")
```

* The table of all users

```
= LoadEntityRows("user")
```

* The table of all groups

```
= LoadEntityRows("group")
```

* The groups of each user

```
= LoadEntityRows("user_group")
```

### Forms, Submissions & Lists

* The forms of your workspace

```
= LoadEntityRows("structure")
```

* All submissions (common data)

```
= LoadEntityRows("submissions")
```

* All tasks

```
= LoadEntityRows("task")
```

* All Lists

```
= LoadEntityRows("list")
```

* Submission History

```
= LoadEntityRows("submissions_history")
```

* All Relations

```
= LoadEntityRows("submissions_relation")
```

* All workflows

```
= LoadEntityRows("workflow")
```

* Submissions from a specific form. Here the *id* should be the one of your form. You can find it either in the URL of your form, or in the "structures" table

```
= LoadFormRawRows(id)
```

* One specific list. Here the *id* should be the one of your list. You can find it either in the URL of your list, or in the "list" table

```
= LoadList(id)
```

## Structuring data and creating graphs

We advise you to refer to the articles provided by Microsoft:

* [https://docs.microsoft.com/en-us /power-bi/guided-learning/](https://docs.microsoft.com/en-us/power-bi/guided-learning/)
* [https://docs.microsoft.com/en- us/power-bi/desktop-getting-started](https://docs.microsoft.com/en-us/power-bi/desktop-getting-started)

## Publish the dashboard to Power BI

From Power BI Desktop, log in then click on Publish:

![](/files/78ywwQrKMleclOBoRmvg)

Select the workspace created previously during the integration authorization:

![](/files/OIW4TctkufK4Z4psSZvF)

You can now view your report in Power BI apps.

## Plan data update

From Power BI online, configure automatic refresh

* Go to the workspace
* Click on "Schedule refresh" in front of your report

![](/files/pq54NWyFC2IGOE1NMuea)

* Click on **Scheduled refresh**
* Enable the **Configure a refresh schedule**
* Configure data refresh so that it takes place 30 minutes after the scheduled data export
* Select your preferred time zone and click on **Apply**

![](/files/6Ozt7pZLcnMg7t2ErOKO)

## View a Power BI report on Daxium-Air

Go to the **Statistics**:

![](/files/to8gBGJzqDtdpfbSsL1U)

Click on **+New** then **Power BI Report**:

![](/files/JoILQya9G0Q83sl0GoCW)

You will then have three parameters to enter:

* **Name**: name the selected dashboard
* **PowerBI connection**: select the Power BI integration previously created
* **Report**: select dashboard previously published

![](/files/e458yTJX5Q1sXhh85WMI)

Then click on **Save**.

To make this dashboard accessible to non-administrator users, open the dashboard you have just saved and create a shortcut from this view:

![](/files/sF3kW5c7Jpqxx0bg4tmS)


# No-code Connectors

Automate workflows between Daxium-Air and other apps using no-code connectors.

No-code connectors let you build automated workflows between Daxium-Air and hundreds of other applications — without writing any code.

Today, [Make](/user-documentation/connect/no-code-connectors/make) (formerly Integromat) is the documented connector.


# Make

Connect Daxium-Air to Make (formerly Integromat) for powerful no-code automation.

**Make** (formerly Integromat) is a no-code automation platform that connects Daxium-Air with thousands of other applications.

With the Daxium-Air module for Make, you can build automated scenarios that trigger actions across your entire tool stack.


# Presentation

Overview of the Daxium-Air module for Make and how to get started.

## What is Make?

Make is a visual automation platform that lets you connect apps and build workflows (called **scenarios**) using a drag-and-drop interface.

## Daxium-Air module

The Daxium-Air module for Make provides:

* **Triggers** — Start a scenario when a submission is created or updated
* **Actions** — Create, update or search submissions in Daxium-Air
* **Searches** — Look up existing submissions by field values

## Getting started

1. Create a free account on Make
2. Add the **Daxium-Air** module to a new scenario
3. Authenticate with your Daxium-Air API credentials
4. Build your automation


# Daxium-Air x Outlook - Create an event

Example scenario — automatically send an outlook invitation for a meeting/event from a Daxium-Air submission.

The goal of this use case is to present how to send an outlook invitation for a meeting/event from a Daxium-Air submission, leveraging the connector platform [Make](https://www.make.com/)

1. ### Prerequisites

* Having an account on [Make](https://www.make.com/)
* Having a Microsoft Outlook email address
* Have one admin & mobile licence on Daxium-Air
* A Daxium-Air form with 2 date & time fields (start & end date for the event), and 1 email field

1. ### Generating your Daxium-Air API Key

Go to the Daxium-Air settings menu, and under the "Webservices" section, click on "API Keys"

![](/files/qVQRi5irrAf64mFiCFDs)

Click on "New" on the top right of the screen

![](/files/t4etR1wEX2Qet4QCNTzw)

Add a description & store your key & secret securely

![](/files/srjcGKmCD3ToEoWxkhj2)

1. ### Create your Daxium-Air form

Create a form containing at least

* 2 date & time fields for the start & end date of your event
  * You can configure your end date so that it must be after your start date to be valid. To do so, click on the end date field and in the "Options or date" section, select under "start date" your start date & time field
* One email field
* One text field. It'll be used to store the id of the outlook event, in case you need to manage cancellation through Daxium-Air as well

![](/files/LhUlXiElJAdvB5z4KX6s)

1. ### Get your Make webhook URL

Create a new Make scenario, and as 1st module choose "Webhooks" and copy the URL

![](/files/LYTZYy16V7ELvhL7xBDs)

1. ### Configure the automation on your Daxium-Air form

On your form, go to the automations menu on the top right of the form builder. Create a new automation by

* Giving it a name
* Choosing your trigger (submission creation for instance)
* Choosing the "Send the submission to URL" option
* Enter the URL previously copied from the Make "Webhooks" module

1. ### Determine Webhook structure in Make

Detect your webhook data by

* Clicking on "(Re)Determine data structure.
* Sending a submission that triggers your automation (so creating a submission in this example)

![](/files/84RRGeZWRdRjSJ9gQeJ6)

![](/files/0gvTP4d5pK7dL57ozhLN)

Your submission data structure will automatically be mapped

![](/files/J83rvx5tHfHgHDIKu4uF)

1. ### Create variables to store the data you need from Daxium-Air

Add a new "Set multiple variables" module after the webhook module

![](/files/Y05DMTjz0zqnzeTvhT3H)

* Please refer to the [Daxium-Air API Documentation](https://doc-dev.daxium-air.com/index.en.html) to understand the JSON structure of a submission
* Please refer to the [Make Documentation](https://www.make.com/en/help/home) to know how to access different properties & objects of a JSON data structure

![](/files/Qc0o6vHyxoCakb0I72th)

1. ### Configure your Outlook invitation

Add a new "Create an event" module from "Microsoft 365 Calendar", after the variables module

![](/files/6RkDOvWzEI0pEaDBwyzv)

* Authenticate your Microsoft account. That account will be considered as sender for the invitations
* Enter the previously created variables for start date, end date & attendees fields
* Enter the email subject & body

![](/files/ayORVIIudRMtL62UAIXZ)

You are now ready to send outlook invitations through Daxium-Air.

1. ### Pushing the outlook event id back to the submission

If you wish to manage event cancellation, you'll need the outlook event id created when sending the invitation. Below, we will explain how to store it in a (hidden) text field in your submission

Add a new "Daxium-Air" module after the "Microsoft 365 Calendar" one, and authenticate with your Daxium-Air admin account, and the API Keys generated at the beginning of this tutorial

![](/files/sGubuSgBQhhGf2ARUHGn)

You can then configure your Daxium API call to[ update the submission](https://doc-dev.daxium-air.com/index.en.html#mettre-a-jour-une-fiche) with the outlook event id returned by the previous module

![](/files/L3YYqP3NX6TSZNeAtefQ)

Alternatively, you can also use the Daxium "Patch Form Submissions" module

![](/files/UEIEDkjv19f8yHAqfQVR)


# Email to Submission

Example scenario — create Daxium-Air submissions from incoming emails.

## Create submissions from emails

This scenario monitors an email inbox and automatically creates a Daxium-Air submission for each incoming message.

## Scenario steps

1. **Trigger:** Email — Watch for new emails in a mailbox
2. **Action:** Daxium-Air — Create a new submission with email subject, body and attachments

## When to use this

* Digitize requests received by email
* Automatically log incoming customer inquiries
* Convert email-based workflows to structured data


# API Documentation

Access the Daxium-Air REST API for custom integrations and advanced automation.

Daxium-Air provides a comprehensive **REST API** for developers who need to build custom integrations or automate workflows programmatically.

## What you can do

* **Read** submissions, structures and user data
* **Create and update** submissions programmatically
* **Search** submissions with advanced filters
* **Manage** users and groups
* **Generate** reports on demand

## Authentication

The API uses **token-based authentication**. You will need an API key generated from your Daxium-Air back-office.

## Getting started

1. Generate an **API key** in Administration > API
2. Use the base URL provided by your administrator
3. Include the API key in the `Authorization` header of your requests
4. Refer to the API reference for available endpoints

{% hint style="info" %}
The full API reference is available in the **API Reference** section of this documentation site.
{% endhint %}


# End User Support

Resources to help you support your end users on Daxium-Air.

This section covers the common situations you may encounter when supporting end users on Daxium-Air, and how to handle them.

* [Password Reset](/user-documentation/support/supporting-your-users/password-reset) — how to reset a user's password from the back office.
* [Get a data dump (Mobile)](/user-documentation/support/supporting-your-users/get-a-data-dump-mobile) — how to export all local data from the mobile app for troubleshooting purposes.


# Password Reset

How to reset your Daxium-Air password from the web platform or the mobile app.

## Reset your own password

If you forgot your password, you can reset it from the web platform.

On the login page, click **Forgotten password**.

<figure><img src="/files/IY0guckFT2e5EYX81gtt" alt=""><figcaption></figcaption></figure>

Enter your email address, then click **Reset password**.

<figure><img src="/files/Z2YfsTlQzaX1lF1lya7P" alt="" width="270"><figcaption></figcaption></figure>

An email will be sent to you with a link to set your new password.

<figure><img src="/files/vWb02V2NabX75xkSPAWy" alt="" width="266"><figcaption></figcaption></figure>

## Reset your password on mobile

{% tabs %}
{% tab title="iOS" %}
**Step 1** — On the login page, enter your email address.

**Step 2** — Choose your server.

**Step 3** — Tap **Forgot Password?**

**Step 4** — Re-enter your email address and tap **OK**. A reset link will be sent to your inbox.

<div align="left"><img src="/files/Qh6WAvZzIoVviRVFeAlE" alt="" width="375"> <img src="/files/cBJH6LeaVjHzSWUw11cc" alt="" width="375"></div>

<div align="left"><img src="/files/yg13MqfxpAMtFiW2edF1" alt="" width="375"> <img src="/files/wuYb2ewKfhDJhwDXo67I" alt="" width="375"></div>
{% endtab %}

{% tab title="Android" %}
{% hint style="info" %}
Android screenshots are coming soon.
{% endhint %}
{% endtab %}
{% endtabs %}

## Reset your users' passwords

Administrator users can reset or change the password of any user directly from the back office, without requiring the user to go through the email flow above. See the [Users](/user-documentation/build/managing-users/users) page for details.


# Get a Data Dump (Mobile)

Export data from the Daxium-Air mobile app for troubleshooting or analysis.

In order to better analyze the issues reported to our technical support, you may be asked to export the data from your Daxium-Air application. To do this, please follow the detailed steps depending on your operating system (Android or iOS).

{% tabs %}
{% tab title="Android" %}
**Step 1** — Open the left side menu and tap **Settings**.

**Step 2** — Tap **Backup the app**.

**Step 3** — Tap **Create**.

<div align="left"><img src="/files/U8alWF3mHsbtWTqZXuQU" alt="" width="375"> <img src="/files/9REEKYVNyQxkXOQnqe9t" alt="" width="375"></div>

<div align="left"><img src="/files/NYC8nuZIHHpmJphKHEMc" alt="" width="375"></div>

**Step 4** — Tap **Save**.

**Step 5** — Tap **Send**.

**Step 6** — Send the file to yourself or directly to [Daxium Support](/user-documentation/support/admin-support/escalating-to-daxium-support).

<div align="left"><img src="/files/3FnmBUQITSZB8eerb9Ao" alt="" width="375"> <img src="/files/VcVGMULGAMcvIfJ8S6sA" alt="" width="375"></div>

<div align="left"><img src="/files/uEDXcXRuebUuEh83jLLD" alt="" width="375"></div>

{% hint style="info" %}
If the backup exceeds 25 MB it cannot be sent directly. Cancel, then use a large-file transfer service and locate the backup file at the path you selected.
{% endhint %}
{% endtab %}

{% tab title="iOS" %}
**Step 1** — Open the left side menu and tap **Settings**.

**Step 2** — Tap **Backup the app**.

**Step 3** — Tap **Create**.

<div align="left"><img src="/files/Ah5Vumo3aq9T9TSsBh6J" alt="" width="375"> <img src="/files/nvewM2nI9C85051tUmIV" alt="" width="375"></div>

<div align="left"><img src="/files/0prdsZCemq3wVODTwOUU" alt="" width="375"></div>

**Step 4** — Tap **Save**.

**Step 5** — Tap **Send**.

**Step 6** — Send the file to yourself or directly to [Daxium Support](/user-documentation/support/admin-support/escalating-to-daxium-support).

<div align="left"><img src="/files/mmWKlJLFEAPMsNWHSoai" alt="" width="375"></div>

{% hint style="info" %}
If the file is too large to send by email, use an online transfer service (WeTransfer, OneDrive, etc.).
{% endhint %}
{% endtab %}
{% endtabs %}


# Admin Support

Reference material for administrators managing the Daxium-Air platform.

This section gathers reference material for administrators: how the platform behaves under the hood, and how to escalate an issue to Daxium when needed.

* [Submission Saving Rules](/user-documentation/support/admin-support/submission-saving-rules) — what happens, step by step, every time a submission is saved: validation, workflow transitions, automations, formulas, and notifications.
* [Offline Synchronisation Behaviour](/user-documentation/support/admin-support/offline-sync) — how the mobile app handles data when connectivity is lost, and what to tell users who report sync issues.
* [Escalating to Daxium Support](/user-documentation/support/admin-support/escalating-to-daxium-support) — when and how to contact the Daxium support team, and what information to include in your request.


# Submission Saving Rules

What happens, from a functional perspective, every time a submission is saved — validation, workflow transitions, automations, formulas, and notifications.

This page explains, from a functional perspective, what happens every time a [submission](/user-documentation/components-concepts-terminology#submission) is saved — from field validation and workflow transitions to formula recalculation, automation execution, and notifications.

Understanding this sequence helps you design forms, automations, and workflows that behave exactly as you expect.

## FAQ

<details>

<summary>When a workflow state changes, which state do conditions and formulas see — the old one or the new one?</summary>

**Always the new state.** The transition is applied during the save, before write automations, formulas, conditions, and read automations. From that point on, every step evaluates the submission with its new state. A condition like *"workflow state is Approved"* is true during the very same save that performed the *Approve* transition.

</details>

<details>

<summary>Can a write automation see formula values computed during the same save?</summary>

**No.** Write automations run before formulas are calculated, so they still see the formula values from the *previous* save. If an automation needs to react to a formula result, use a read automation instead — those run after formulas are recalculated and see the fresh values.

</details>

<details>

<summary>Can a read automation see formula values computed during the same save?</summary>

**Yes.** Read automations (reports, webhooks, emails, mobile notifications) run after formulas are recalculated, so the data they receive reflects the fully computed submission, including all formula fields freshly calculated during this save.

</details>

<details>

<summary>If a save fails, what gets rolled back?</summary>

Everything inside the protected save is cancelled: submission data, relation changes, and write-automation side-effects are not saved; uploaded files are not moved to permanent storage; no task is created. The sequential number reserved before the save is *not* reused (gaps are normal). Steps that run after the save — notifications, formulas, read automations — never execute if the save fails.

</details>

<details>

<summary>Are formulas on linked submissions recalculated every time I save?</summary>

On normal saves (web, mobile, single-record), yes — formulas on related submissions that reference the current one are recalculated, with large relation graphs handled in the background. For mass updates, imports, and migrations, this is deferred to a background job that runs afterward.

</details>

<details>

<summary>What is a "one-time calculation" formula?</summary>

A one-time calculation formula computes its value once — typically at creation — and then keeps it forever. On later saves the existing value is preserved and never re-evaluated. Use it to stamp a value that must never change, such as a "received at" date.

</details>

<details>

<summary>Do read automations fire when I edit a closed submission?</summary>

It depends on the save. A simple edit with no workflow transition on an already-closed submission skips read automations. A save that *transitions* the submission to a final state does run read automations for that save.

</details>

<details>

<summary>What is partial mode, and when is it used?</summary>

Partial mode disables required-field validation so a submission can be saved with mandatory fields still empty. It is used for mobile offline saves (a field worker saves a partially filled submission to sync later) and data imports (rows that don't contain every required field). Workflow transitions are not allowed in partial mode.

</details>

<details>

<summary>If I change a field a formula depends on, when does the formula update?</summary>

Formula fields are recalculated after the save is confirmed. The response returned to the screen after saving already contains the freshly computed values, so you see the update immediately.

</details>

## The big picture

Saving a submission is not a single instant operation. It runs as a sequence split into three phases:

1. **Before the save** — lightweight preparation (sequencing, loading the form definition, recording who is currently assigned).
2. **The save itself** — the core write, protected as all-or-nothing: validation, workflow transition, and write automations. If any step fails, the whole save is cancelled and nothing is partially written.
3. **After the save** — enrichment that runs once the save is confirmed: formulas, conditions, read automations, history, and notifications.

{% hint style="warning" %}
**The save itself is all-or-nothing.** If any step fails — a missing required field, a deleted [relation](/user-documentation/components-concepts-terminology#relation), an invalid workflow transition — the entire save is cancelled and nothing is saved.
{% endhint %}

## Phase 1 — Before the save

These steps run before the protected save begins.

| Step                    | What happens                                                                                                                                                                              | Why it matters                                                                                                                                                     |
| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Sequential number       | A new submission is assigned a unique, ever-increasing number within its form.                                                                                                            | The number is permanent — it never changes, even after edits. If the save ultimately fails, the reserved number is not reused, so gaps in the sequence are normal. |
| Form definition loading | The platform loads the fields, workflow, conditions, and formula configuration for the [version](/user-documentation/components-concepts-terminology#version) attached to the submission. | Validation always applies the rules of the version linked to the submission.                                                                                       |
| Workflow start state    | A new submission whose form has a workflow is automatically placed in the start state.                                                                                                    | A new submission always begins its lifecycle in the correct initial state, even if the user did not choose one.                                                    |
| Assignee snapshot       | For an existing submission, the platform records who is currently assigned and subscribed.                                                                                                | Only users who are *newly* assigned or subscribed will be notified later — not those who were already there.                                                       |

## Phase 2 — The save itself

### Form migration

If the form has been updated since the submission was last opened, the submission is automatically migrated to the latest active version before validation, so the most recent rules always apply.

**What you see:** you can save a submission even if the form changed since you opened it — the platform adapts it automatically. If migration is impossible, the save is rejected.

### Field validation

Every field is validated:

* **Standard fields** (text, number, date, list, user, files…) are checked for type, required rules, and format.
* **Relation fields** are checked for cardinality (minimum / maximum linked submissions) and that the linked submissions still exist.
* **System fields** cannot be written by the user and are ignored.
* In **partial mode** (mobile offline saves, imports), the required-field rule is skipped so incomplete submissions can be saved progressively.

{% hint style="info" %}
**Inactive user in a user field:** assigning an inactive user to a user field is rejected — unless that same inactive user was already in the field before the save, in which case the value is preserved to avoid breaking existing data.
{% endhint %}

### Workflow transition

This is where the workflow state actually changes. When a save includes a workflow action (the user clicked a transition such as *Submit for validation* or *Approve*), the platform applies the transition here and recomputes the submission's visibility conditions against the new state.

**From this point on, every later step — write automations, formulas, conditions, read automations — sees the new workflow state.**

### Write automations

Write automations modify the submission's own data as part of the save. They run right after the workflow transition and always see the new state. Because they run inside the protected save, if one fails the whole save is cancelled.

| Write automation          | What it does                                                                                |
| ------------------------- | ------------------------------------------------------------------------------------------- |
| **Change assignation**    | Assigns or reassigns the submission to a user or group based on conditions.                 |
| **Change workflow state** | Forces a second workflow transition automatically (for example, auto-close after approval). |
| **Modify field value**    | Sets or clears the value of fields on the submission.                                       |

{% hint style="warning" %}
A write automation's condition is evaluated against the field values as saved by the user and the new workflow state. It does **not** yet see formula results — formulas are calculated later, after the save. If your automation needs to react to a formula, use a read automation instead.
{% endhint %}

### Files and tasks

Uploaded files are moved to their permanent storage only once the save is confirmed, so a failed save never leaves orphaned files. If the form is configured to create a [task](/user-documentation/components-concepts-terminology#task) automatically, that task is created and linked here.

## Phase 3 — After the save

Once the submission is safely saved, a second sequence of enrichment and notification steps runs. These steps do **not** cancel the save if they fail — the submission is already saved.

### Push notifications

The platform compares the current assignee and subscriber list against the snapshot taken before the save. Any newly assigned or newly subscribed user receives a mobile push notification.

### Formula calculation

All formula fields are recalculated here, on the saved submission — so they see the new workflow state, the user-saved values, and any changes made by write automations.

* If the submission is linked to other submissions through relation fields, formulas on those related submissions may also be recalculated (for example, an aggregation formula on a parent submission). For large relation graphs, this is handled in the background to keep saves fast.
* For mass updates, imports, and migrations, recalculation on related submissions is deferred to a background job to avoid overloading the platform.
* **One-time calculation formulas** compute their value once and then keep it forever — useful for stamping a "received at" date or a "created by" value that must never change.

### Conditions

All conditions (field visibility, required-field overrides, section visibility) are recomputed against the final state of the submission, with formulas already applied, and the result is cached so the next time the submission is displayed the correct field visibility is immediately available.

### Read automations

Read automations react to the save but do not modify the submission's data. They run after formulas and conditions, so they see the fully enriched submission.

| Read automation         | What it does                                                                                                               |
| ----------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| **Simple report**       | Generates a [report](/user-documentation/components-concepts-terminology#report) from a template and attaches or sends it. |
| **Mobile notification** | Sends a targeted push notification to specified users or groups.                                                           |
| **Webhook**             | Calls an external endpoint with the submission's data, for integration with third-party systems.                           |
| **Send email**          | Sends a formatted email to configured recipients.                                                                          |

{% hint style="warning" %}
**Closed submissions:** if a submission is already in a final (closed) state and the save does not include a workflow transition, read automations are skipped — this prevents spurious notifications or reports on minor edits to closed submissions. If the save is the transition that *brings* the submission to a final state, read automations do run for that save.
{% endhint %}

### Restoration history

A snapshot of the submission's field values (as they are after the full save) is stored in the history log. This snapshot is what lets administrators restore a submission to a previous state.

## Special cases

| Scenario                                  | What changes                                                                                                                                      |
| ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Partial mode** (mobile offline, import) | Required-field and cardinality minimums are not enforced. Workflow transitions are not allowed.                                                   |
| **Pre-fill**                              | All automations are skipped; formulas return only pre-fill values. Used to pre-populate a submission before it is officially created.             |
| **Mass update / import / migration**      | Formula recalculation on related submissions and scheduled-job updates are deferred to protect the platform when many submissions change at once. |
| **Created on behalf of another user**     | The submission is attributed to the target user, and the history records the ownership change.                                                    |
| **Restored from history**                 | The restored data is applied as a normal save; automations and formulas run as usual, and the workflow state from the snapshot is reinstated.     |


# Offline Behaviour and Synchronisation

How the Daxium-Air mobile app handles data when offline and syncs when connectivity is restored.

The Daxium-Air mobile apps are built to work **offline first**. Your teams can keep collecting data in the field with no network — in a basement, a remote site, or on a plane — and the app takes care of synchronizing everything once a connection is back.

## Working offline

Everything your users need is stored locally on the device: the forms, the lists and lookups, and the data entries themselves. With no connection, users can:

* create new submissions,
* edit existing submissions,
* save drafts,
* add photos, signatures, and attachments.

Nothing is lost while offline. Work stays safely on the device until it is either sent to the server or deleted. Synchronization is what later pushes your changes up to the server and pulls the latest data down.

## What synchronization does

Synchronization works in two directions:

* **Download (server → device):** forms, lists, permissions, and the submissions that concern the user (assigned to them or broadcast to their team).
* **Upload (device → server):** submissions created or edited while offline, along with their photos and attachments and comments.

### Required vs. background steps

Not all synchronization steps carry the same weight. Some are **required before the app is usable**; others run in background.

**Required steps, completed before you can start working.** The app stays on the synchronization screen until these finish:

| # | Step                           | What it does                                       |
| - | ------------------------------ | -------------------------------------------------- |
| 1 | *Fetching forms*               | Downloads your forms.                              |
| 2 | *Fetching account information* | Retrieves your account configuration and settings. |
| 3 | *Fetching form dependencies*   | Loads everything the forms rely on.                |
| 4 | *Fetching lists*               | Downloads lists and lookup values.                 |
| 5 | *Fetching automatisms*         | Loads automation rules.                            |

**Background steps, run while you are already using the app.** Once the required steps are done, the app opens and the others continue in background. A failure here does not block you and retries on the next synchronization:

| #  | Step                               | What it does                                                                           |
| -- | ---------------------------------- | -------------------------------------------------------------------------------------- |
| 6  | *Sending pending submissions*      | Uploads submissions created or edited offline (photos and attachments are sent first). |
| 7  | *Fetching assigned submissions*    | Downloads submissions assigned to you.                                                 |
| 8  | *Fetching broadcasted submissions* | Downloads submissions shared with your team.                                           |
| 9  | *Fetching tasks*                   | Downloads your tasks.                                                                  |
| 10 | *Fetching related submissions*     | Downloads linked submissions referenced by your forms.                                 |
| 11 | *Fetching comments*                | Downloads comments attached to submissions.                                            |
| 12 | *Fetching resources*               | Downloads media and map resources.                                                     |
| 13 | *Updating synchronization data*    | Finalizes the sync and records the new synchronization date.                           |

{% hint style="info" %}
If a required step fails, the sync stops and an error is shown. Background steps are best-effort: a failure is logged and retried later, without blocking the app.
{% endhint %}

## When does the app synchronize?

**Automatically:**

* At login, if the app has just been updated, has never synchronized before, or if the last sync is more than about a day old.
* When the connection comes back, if submissions were waiting to be sent.

**Manually:**

* Users can trigger a synchronization on demand at any time (sync action in the app) if the configuration allows it.

The date of the last synchronization is shown in the app settings. Sync progress is displayed on screen while it runs, and a running synchronization can be cancelled, it will resume on the next sync.

## Submission statuses

Every submission carries a status that tells you where it stands between the device and the server:

| Status                     | What it means                                   | Editable?                      | Sent to server?     |
| -------------------------- | ----------------------------------------------- | ------------------------------ | ------------------- |
| **Draft**                  | Created or edited locally, not yet finalized    | Yes                            | No                  |
| **Pending**                | Finalized and queued, waiting to be sent        | Yes, until sent                | Not yet             |
| **Updated**                | Already on the server, then edited locally      | Yes                            | Not yet             |
| **Error**                  | The server refused the upload                   | Yes — can be fixed and retried | Attempted, rejected |
| **Synchronized**           | Sent to the server and confirmed                | Yes                            | Yes                 |
| **Remote / search result** | Exists only on the server, not modified locally | No — read-only                 | Yes                 |

The normal lifecycle of an offline submission is: **Draft → Pending → Synchronized**. The **Error** status is the one to watch — it means something needs the user's attention before the submission can be sent.

## Conflict rules

A conflict happens when the same submission changes in at least two places, for example offline on a device, and on the server, before the device has had a chance to sync.

### Offline work is protected during downloads

Routine downloads never overwrite a submission you have changed locally. As long as your submission is a `Draft`, `Updated`, `Pending`, or in `Error`, your local version is kept and the incoming server version is set aside. Your work is always kept, background syncs cannot silently erase what a user is editing.

### Rule : last write wins

There is no conflict management when a submission is sent, the last sent overrides existing data, but all previous versions are saved on the server.

### Deletions

* Deleting a **local draft** removes it on the device only, nothing is sent.
* A submission **deleted on the server** disappears from the user's lists on the next synchronization if it is assigned or broadcast. If it came from the search, it is not sendable to the server and should be manually deleted.

## Other rules

**Media before the form.** Photos, signatures, and attachments are uploaded before the submission they belong to. If a file fails to send, the whole submission stays `Pending` and the app retries later. This guarantees a submission is never stored on the server with missing attachments.

**Linked submissions (parent / child).** A child submission cannot be sent before its parent, so links between submissions are never broken. Depending on how the relation is configured, children may have to wait for their parent to be sent first.

## For administrators

A few back-office configuration choices directly influence what users experience during synchronization:

* **Form design and validation.** Required fields and validation rules are enforced by the server. A submission that doesn't satisfy them will be rejected on upload and flagged in `Error`, so well-designed forms reduce sync errors for field teams.
* **Relations between forms.** Relation settings affect the send order of linked submissions (parents before children) and whether children wait for their parent.
* **Lists and lookups.** These must be downloaded before the corresponding forms can be filled — large lists add to the initial sync time.

## FAQ

<details>

<summary>Will I lose my work if I'm offline?</summary>

No. Everything you create or edit offline is kept safely on the device until it is sent to the server or you delete it yourself.

</details>

<details>

<summary>Why did my submission end up in "Error"?</summary>

Most often because the server refused it — either a validation rule wasn't met, or the same submission was changed on the server while you were editing it offline. Open the submission, check it against the latest data, and send it again.

</details>

<details>

<summary>How long does synchronization take?</summary>

It depends on the volume of forms, lists, and media, and on the quality of the connection. The required steps run first; everything else continues in the background without blocking the app.

</details>


# Escalating to Daxium Support

How to contact Daxium support and what to include in your request.

When you encounter an issue that cannot be resolved through the documentation, the Daxium support team is available to help.

## Contact

**Daxium Support — Dubai office**\
Email: <dubai.support@daxium.com>\
Hours: Monday to Friday, 9 am – 6 pm (Gulf Standard Time, UTC+4)

## What to include in your request

The form below will guide you through the information expected. Please fill it in as completely as possible.

**General description of the issue**\
Describe what you were trying to do, what you expected to happen, and what actually happened.

**When the issue appeared**\
When did you first notice the problem?\
Has it occurred again since, or was it a one-off?

**Steps to reproduce**\
Do you know how to reproduce the problem?\
If possible, list the steps that led up to the issue.

**Environment**\
On which environment are you experiencing the problem?

* Back Office (web)
* Android v2
* iOS

**Mobile app version**\
If the issue concerns a mobile environment (Android or iOS), which version is installed?\
This information is available in Settings, accessible from the app's main menu.

**Affected user account(s)**\
Indicate only the account(s) concerned.

{% hint style="warning" %}
Do not include the passwords of these accounts.
{% endhint %}

**URLs of the affected elements (Daxium back-office)**\
Fill in only what applies to your case:

* Form:
* Example submission:
* List:
* Report:

**Additional information**\
Provide any information you consider relevant to resolving the issue, for example:

* Screenshots
* Screen recording of the action on mobile ([Android](https://support.google.com/android/answer/9075928?hl=en) / [iOS](https://support.apple.com/en-us/102653))
* If the issue concerns a report: an example of a generated file

{% hint style="info" %}
The more detail you provide upfront, the faster the team can diagnose the issue without needing to ask for clarification.
{% endhint %}


# News

Feature releases and improvements to Daxium-Air.

Discover what's new and improved in Daxium-Air, feature releases and enhancements. Select a card to read the full update.

{% updates format="full" %}
{% update date="2026-08-12" tags="improvement,web" %}

## Choose what appears in your side menu

The side menu's four default buttons (Home, Submissions, Tasks and Help) are now system shortcuts: disable them, rename them, or restrict them to specific groups from the shortcut manager.

<div align="left"><figure><img src="/files/rqXRUW67aYyYFibJzobL" alt=""><figcaption></figcaption></figure></div>

<a href="/pages/5nWJh6aacQxLDsdMOwMe" class="button primary">Read full update</a><a href="https://www.center.daxium-air.com/user-documentation/build/organising-the-platform/shortcuts" class="button secondary">Documentation</a>
{% endupdate %}

{% update date="2026-08-05" tags="feature,web,mobile" %}

## Read any submission at a glance with the summary layout

The summary layout condenses one submission onto a single page: only the fields and metadata you choose to expose, including data from its related submissions.

<div align="left"><figure><img src="/files/oXkmrPk0M0v2QNt1GsL9" alt=""><figcaption></figcaption></figure></div>

<a href="/pages/m19TDIQI8davKuYlqAqG" class="button primary">Read full update</a><a href="https://www.center.daxium-air.com/user-documentation/build/building-forms/summary-layout" class="button secondary">Documentation</a>
{% endupdate %}

{% update date="2026-07-16" tags="feature,web" %}

## Schedule and assign submissions right from the calendar

A new side panel on the calendar lists every submission still waiting to be scheduled or assigned, ready to drag straight into place.

<div align="left"><figure><img src="/files/yxHMoZEUoq3g7hGV9dks" alt=""><figcaption></figcaption></figure></div>

<a href="/pages/Q30oZBQ9f3uEiRmE9rA1" class="button primary">Read full update</a><a href="https://www.center.daxium-air.com/user-documentation/use/using-the-platform/views/calendar" class="button secondary">Documentation</a>
{% endupdate %}

{% update date="2026-07-02" tags="feature,web" %}

## Take control of your filters

Configure which fields appear in the filter pane, and see your active filters as removable chips at the top of every view.

<div align="left"><figure><img src="/files/nteh7SDw1c9KHk5SRS6t" alt=""><figcaption></figcaption></figure></div>

<a href="/pages/LhEuNLFY5cxul8NLLBEd" class="button primary">Read full update</a><a href="https://www.center.daxium-air.com/user-documentation/use/views/filtering-system" class="button secondary">Documentation</a>
{% endupdate %}

{% update date="2026-07-01" tags="improvement,web" %}

## A cleaner, more polished table view

The Web table view has been refined with smarter columns, a softer visual design, and smoother filtering.

<div align="left"><figure><img src="/files/Wuw1oLiHq9jIbpOkYi3N" alt=""><figcaption></figcaption></figure></div>

<a href="/pages/EH8qgoOzqHloIRmMNIK0" class="button primary">Read full update</a><a href="https://www.center.daxium-air.com/user-documentation/use/views/table" class="button secondary">Documentation</a>
{% endupdate %}

{% update date="2026-05-20" tags="feature,web,mobile" %}

## Collaborate with comments on submissions!

The comment thread is now available directly on every Daxium-Air submission, so your teams can discuss interventions without ever leaving the tool.

<div align="left"><figure><img src="/files/diY5rqnx47225DBSrLEO" alt=""><figcaption></figcaption></figure></div>

<a href="/pages/SPX1zFygXvenZu0BPbZQ" class="button primary">Read full update</a><a href="https://www.center.daxium-air.com/user-documentation/use/using-the-platform/submission-layout/commenting-submissions" class="button secondary">Documentation</a>
{% endupdate %}

{% update date="2026-03-16" tags="feature,web" %}

## New Timeline view in the Daxium-Air calendar

A new timeline view now lets you visualize operations by user and instantly see team availability.

<div align="left"><figure><img src="/files/uba8OcCKS3Y7idrSFAY3" alt=""><figcaption></figcaption></figure></div>

<a href="/pages/MeYvuGnSneNnOuE9xGfv" class="button primary">Read full update</a><a href="https://www.center.daxium-air.com/user-documentation/use/using-the-platform/views/calendar" class="button secondary">Documentation</a>
{% endupdate %}

{% update date="2026-03-06" tags="improvement,web" %}

## A new homepage for enhanced efficiency

The web portal homepage has been redesigned with customizable shortcut folders and a refreshed visual design.

<div align="left"><figure><img src="/files/jCUbqmrUSvU6B7uO7rB7" alt=""><figcaption></figcaption></figure></div>

<a href="/pages/GalXHorXHsk5T1Tadf25" class="button primary">Read full update</a><a href="https://www.center.daxium-air.com/user-documentation/build/building-the-platform/organising-the-platform/shortcuts" class="button secondary">Documentation</a>
{% endupdate %}

{% update date="2026-01-12" tags="improvement,mobile" %}

## 10 key tips for a successful migration to Daxium-Air iOS (V2)

Everything you need to know before migrating from the V1 iOS app to the new V2 app.

<div align="left"><figure><img src="/files/RA3o3N34ywSWV3sMuXCT" alt=""><figcaption></figcaption></figure></div>

<a href="/pages/EgtLykuZTvSoZrcWfq1z" class="button primary">Read full update</a>
{% endupdate %}

{% update date="2025-10-27" tags="feature,mobile" %}

## Selecting a related submission via NFC

Scan an NFC badge or tag to instantly select the right related submission in Daxium-Air, no more manual search or QR code required.

<div align="left"><figure><img src="/files/Tvyzp2R1Hot3Kj2Zr5Vw" alt=""><figcaption></figcaption></figure></div>

<a href="/pages/JQhYcJmYi6OIGn8hHIZ8" class="button primary">Read full update</a><a href="https://www.center.daxium-air.com/user-documentation/build/building-the-platform/building-forms/fields/relations" class="button secondary">Documentation</a>
{% endupdate %}

{% update date="2025-10-08" tags="feature,web" %}

## PDF files embedded in reports

Insert PDF documents directly into your Daxium-Air reports using the file attachment field and the FileImage function.

<div align="left"><figure><img src="/files/7zeYQrc9wfZCirFvV2HR" alt=""><figcaption></figcaption></figure></div>

<a href="/pages/YAT16IPimzotmX5E0zof" class="button primary">Read full update</a><a href="https://www.center.daxium-air.com/user-documentation/build/building-the-platform/building-the-reporting/" class="button secondary">Documentation</a>
{% endupdate %}

{% update date="2025-06-05" tags="improvement,web" %}

## Optimized file loading

The file upload module has been redesigned. Drag and drop multiple files at once, follow progress in real time, and get clear error messages.

<div align="left"><figure><img src="/files/VvxpID8MHQ1PlNzP2DgV" alt=""><figcaption></figcaption></figure></div>

<a href="/pages/F89FPkgdcwddt00dkP1X" class="button primary">Read full update</a>
{% endupdate %}

{% update date="2025-05-06" tags="feature,mobile" %}

## Colored map pins now available on Android

After web and iOS, Daxium-Air Android v2.4.5 brings colored map pins to field users.

<div align="left"><figure><img src="/files/0L7XkUyj7ghoF6mIuBsc" alt=""><figcaption></figcaption></figure></div>

<a href="/pages/5DtpC8CEylMjOZKPkaWp" class="button primary">Read full update</a>
{% endupdate %}

{% update date="2025-03-28" tags="improvement,web" %}

## Shortcuts management redesigned

The web shortcuts management page has been redesigned for better clarity and ease of use.

<div align="left"><figure><img src="/files/VNgZuMg1COIXDWDk8jt6" alt=""><figcaption></figcaption></figure></div>

<a href="/pages/sblBvI8UAdvBem2Uw3wy" class="button primary">Read full update</a><a href="https://www.center.daxium-air.com/user-documentation/build/building-the-platform/organising-the-platform/shortcuts" class="button secondary">Documentation</a>
{% endupdate %}

{% update date="2025-03-28" tags="feature,web" %}

## External link shortcut

You can now add shortcuts to external URLs from your homepage.

<div align="left"><figure><img src="/files/uhUanywL24ASkYXZIdNJ" alt=""><figcaption></figcaption></figure></div>

<a href="/pages/rSETq0DtpY9q9RsDYjNB" class="button primary">Read full update</a><a href="https://www.center.daxium-air.com/user-documentation/build/building-the-platform/organising-the-platform/shortcuts" class="button secondary">Documentation</a>
{% endupdate %}

{% update date="2025-03-13" tags="feature,web" %}

## New Mosaic view (web)

Try the new Mosaic view. Select records, run bulk actions, and use the new filter system.

<div align="left"><figure><img src="/files/8CoIjsyDDkU8phHr37rD" alt=""><figcaption></figcaption></figure></div>

<a href="/pages/mXUHC1CRFQ3yKEZH8YrB" class="button primary">Read full update</a>
{% endupdate %}

{% update date="2025-02-10" tags="feature,web,mobile" %}

## OpenID Connect (OIDC) SSO is now supported

In addition to SAML 2.0, Daxium-Air now supports Single Sign-On via OpenID Connect (OIDC).

<div align="left"><figure><img src="/files/LKExQn7CI9aGT2UOfnTN" alt=""><figcaption></figcaption></figure></div>

<a href="/pages/ilGEJdAHD0gacpWIAZi3" class="button primary">Read full update</a><a href="https://www.center.daxium-air.com/user-documentation/build/building-the-platform/managing-users/subscriptions-licencing-sso" class="button secondary">Documentation</a>
{% endupdate %}

{% update date="2025-01-10" tags="feature,web,mobile" %}

## Location formula type

A new formula type returns a typed "address and coordinates" result, usable wherever a location field is expected.

<div align="left"><figure><img src="/files/2DKKX4RNQCkReJWPLnVt" alt=""><figcaption></figcaption></figure></div>

<a href="/pages/ndU1UsYpempkq8Zcv9JV" class="button primary">Read full update</a><a href="https://www.center.daxium-air.com/user-documentation/build/building-the-platform/building-forms/fields/formulas" class="button secondary">Documentation</a>
{% endupdate %}

{% update date="2025-01-03" tags="feature,web" %}

## PowerPoint reports

Generate Daxium-Air reports in PowerPoint format for more impactful, visual reporting.

<div align="left"><figure><img src="/files/QcDXc9PAXVrzQK7P4fdC" alt=""><figcaption></figcaption></figure></div>

<a href="/pages/yNZdp7XUJRdma1i0qHH9" class="button primary">Read full update</a><a href="https://www.center.daxium-air.com/user-documentation/build/building-the-platform/building-the-reporting/report-templates/ppt" class="button secondary">Documentation</a>
{% endupdate %}
{% endupdates %}


# Choose what appears in your side menu

The side menu's four default buttons are now ordinary shortcuts, so you can turn them off, rename them, or reorder them like any other.

**Published on August 12, 2026**

**Improvement: the side menu's default buttons are now shortcuts.**

Every workspace opened with the same four buttons at the top of its side menu: Home, Submissions, Tasks and Help. You could add your own shortcuts underneath, but those four were fixed.

Those four are now **system shortcuts**. You manage them like the ones you create yourself, with one safeguard: they cannot be deleted, only disabled.

![](/files/ifUt0yaVGqGDVbdcc0us)

**Find them in the shortcut manager.** Open the "Shortcuts" menu and go to the Side menu tab: Home, Submissions, Tasks and Help now sit in the Shared shortcuts section, next to the shortcuts you built.

**Disable the ones you don't need.** Select a system shortcut and use the Disable button. It leaves the side menu, stays in the manager, and comes back whenever you enable it again.

**Show them only to the groups that need them.** System shortcuts are shared shortcuts, so the Groups selector applies to them too. Leave it empty and everyone keeps the shortcut; pick a group or two and only those users see it. That is how you give one profile the Submissions button and another profile a side menu without it.

**Rename and reorder them.** Give them the wording your teams use, in each of your platform languages, and drag them where they belong among your shared shortcuts. Help is the one exception: it always comes last, below your own shortcuts.

**Send Help wherever you want.** Help is an external link shortcut, pointing at this documentation site by default. Replace the URL and it opens your own internal documentation instead. You can change its icon too.

**Home is always within reach.** Even with the Home shortcut disabled, a home button sits next to the Daxium-Air logo at the top of the screen, so nobody gets stranded.

**Nothing changed on your workspace.** The four shortcuts were added to every existing workspace already enabled and in their usual order, so your side menus look exactly as they did. The change only starts when you decide to make one.

{% hint style="info" %}
Disabling the **Submissions** shortcut, or restricting it to a group, is a practical way to keep a profile within the shortcuts you prepared for them, rather than in the full list of forms they have access to.

Be aware that this hides a route, it does not remove a permission. A user who still has rights on a form can reach its submissions another way, for instance through a relation. When you need an actual restriction, set it with group permissions.
{% endhint %}

Available on: **Web**

{% hint style="info" %}
Learn more in the [Shortcuts](https://www.center.daxium-air.com/user-documentation/build/organising-the-platform/shortcuts) documentation.
{% endhint %}


# Read any submission at a glance with the summary layout

The summary layout condenses one submission onto a single page, and it is the first place in Daxium-Air where you can surface data from a submission's parent relations.

**Published on August 5, 2026**

**New feature: the summary layout.**

A form that captures everything is a good form. It is also a long one, and once the submission comes back from the field, the information you need to act on it sits buried among dozens of fields. The summary layout gives you a second, condensed view of that same submission: one page, showing only what you choose to expose.

<figure><img src="/files/Hhmdhb93hhVj2dpHLi26" alt=""><figcaption></figcaption></figure>

**What is it?**

A dedicated builder, opened from the form editor with the "Summary layout" button. Drag the fields and metadata that matter into sections, and leave the rest of the form untouched. A section holds at most two columns, so the result stays readable on a phone as well as on a screen.

<figure><img src="/files/QFvSpiXF4qxqBvFR2oG5" alt=""><figcaption></figcaption></figure>

**Parent relations, finally within reach.** This is the part we expect to change the most for you. In the standard form editor, a submission can show its own fields and reach down into its children, but the submissions it belongs to, its client, its site, its contract, stay out of reach. The summary layout lifts that limit: parent relations appear in the metadata selector, so the data of a submission's parent sits right on the page, next to the submission's own fields. The context someone needs in order to decide something no longer lives one or two clicks away.

<figure><img src="/files/kuakz2wKUHlX9SLkFNhx" alt=""><figcaption></figcaption></figure>

**Reach into related forms as well.** Click the arrow to the right of a relation field to browse into the related form and pick fields from there.

**Customize what each section shows.** Rename a field for the summary only, give it half or full width, and apply a visibility condition so a section appears only when it is relevant. The same field can appear more than once, in different sections.

**Turn it on where you need it.** When you activate a summary layout, you choose the platforms it applies to: web, mobile, or both. Every submission of that form then opens in the summary layout, with a button to switch back to the standard view. You can also save without activating, and keep working on the draft.

Available on: **Web**, **iOS**, **Android**

{% hint style="info" %}
Learn more in the [Summary Layout](https://www.center.daxium-air.com/user-documentation/build/building-forms/summary-layout) documentation.
{% endhint %}


# Schedule and assign submissions right from the calendar

A new side panel on the calendar lists every submission still waiting to be scheduled or assigned, ready to drag straight into place.

**Published on July 16, 2026**

**New feature: the scheduling & assignation panel.**

Submissions missing a date, an assignee, or both are easy to lose track of once they're buried in a table view. A new side panel on the calendar view brings them all together in one place.

**What is it?**

Open the panel from the **grid icon** in the calendar view to see three lists: **To assign & schedule**, **To assign**, and **To schedule**, each showing exactly what's missing and how many submissions are waiting.

<figure><img src="/files/hIQNKwUBUlec0tbFmj2T" alt=""><figcaption></figcaption></figure>

**Drag straight onto the calendar.** Drop a card from the panel onto a date to schedule it, onto a user's row to assign it, or anywhere on the calendar to do both at once. Drag a submission back onto the panel to clear its schedule, its assignee, or both, and it moves to the matching list automatically.

Available on: **Web**

{% hint style="info" %}
Learn more in the [Calendar](https://www.center.daxium-air.com/user-documentation/use/using-the-platform/views/calendar) documentation.
{% endhint %}


# Take control of your filters

Configure which fields appear in the filter pane, and see your active filters as removable chips at the top of every view.

**Published on July 2, 2026**

Filtering just got a major upgrade on the Web portal. Two complementary improvements make it easier to focus on the records that matter: a filter pane you can tailor to your team, and active filters you can see and remove at a glance.

## Configure your filter pane

**New feature: filter manager.**

As your forms grow more complex, so does the filter pane. Hidden formula fields, fields filled automatically by workflows, duplicated fields for different scenarios... they all end up cluttering the filter panel, making it harder for users to find the filters that actually matter.

Admins can now configure which fields appear in the filter pane, and in what order. The result: a clean, relevant filter panel for everyone, without touching the form structure.

The configuration is done directly from the filter pane itself, via the **Configure filters** icon at the top right. It applies to all views of the form (table, gallery, mixed, map, calendar) for every user.

<figure><img src="/files/6Y5PRollTLvq8Ne0itxi" alt=""><figcaption></figcaption></figure>

## See your active filters at a glance

**New feature: filter chips.**

Once your filters are set, it's just as easy to see what's actually being filtered. Every active filter appears as a chip on the top bar of the view, so you no longer need to open the filter pane to know what you're looking at.

<figure><img src="/files/0tFrchjDxUpyNq684idw" alt=""><figcaption></figcaption></figure>

This is particularly handy when:

* Taking screenshots of a view to share or document
* Screensharing during a call, so everyone can see what's filtered without you explaining it
* Opening a shortcut and not remembering which filters it applies

**Remove a filter in one click.** Click the **X** on a chip to instantly remove that filter, without opening the pane.

**Clearer filter pane.** Inside the pane itself, the filtered value of each field is now shown directly, so you can review your filters without expanding every field's settings.

Available on: **Web**, across all views (table, gallery, mixed, map, and calendar).

{% hint style="info" %}
Learn more in the [Filtering System](https://www.center.daxium-air.com/user-documentation/use/views/filtering-system) documentation.
{% endhint %}


# A cleaner, more polished table view

The Web table view has been refined with smarter columns, a softer visual design, and smoother filtering.

**Published on July 1, 2026**

The table view on Web has received a round of visual and usability improvements, making it easier to read and more pleasant to use.

<figure><img src="/files/Ma8s1suzstPShBW3mVYr" alt=""><figcaption></figcaption></figure>

**Smarter columns.**

* Columns automatically resize to fit their content when you open a view.
* Hide a column you don't need straight from its header menu.
* Two rarely used system columns (**First Save on Web**, **Version**) are hidden by default; re-enable them anytime from the Columns panel.

**Easier to read.** A data-type icon next to each column name helps you spot a date, number, or list field at a glance, and hovering over a truncated value shows its full content.

**A softer look.** Refreshed colors, a lighter font, and tighter header padding make the table easier on the eyes. Header action icons now appear only on hover.

**Smoother filtering.** Filtering from a column header is now noticeably more fluid.

Available on: **Web**

{% hint style="info" %}
Learn more in the [Table view](https://www.center.daxium-air.com/user-documentation/use/views/table) documentation.
{% endhint %}


# Collaborate with comments on submissions!

The comment thread is now available directly on every Daxium-Air submission, so your teams can discuss interventions without ever leaving the tool.

**Published on May 20, 2026**

**New feature — the comment thread.**

Do your teams still discuss an intervention over email? On WhatsApp? In a Teams channel? Those days are over. The comment thread is now available directly on every Daxium-Air submission.

**What is it?**

A comment panel accessible from any submission view. Open or collapse it in a single click to exchange with your team without ever leaving the tool — and in context!

<figure><img src="/files/os8Jgka6kZT1CUvQFSsI" alt=""><figcaption></figcaption></figure>

Available on: **Web · iOS · Android**

{% hint style="info" %}
Learn more in the [Commenting on Submissions](https://www.center.daxium-air.com/user-documentation/use/using-the-platform/submission-layout/commenting-submissions) documentation.
{% endhint %}


# New Timeline view in the Daxium-Air calendar

A new timeline view now lets you visualize operations by user and instantly see team availability.

**Published on March 16, 2026**

Organizing operations becomes even simpler in Daxium-Air.

We're introducing a new **timeline** view that lets you visualize your operations by user and immediately get a **clear view of team availability**.

<figure><img src="/files/uba8OcCKS3Y7idrSFAY3" alt=""><figcaption></figcaption></figure>

### What's new

* **Resources at the heart of the schedule:** Users can now be displayed on the y-axis, so you can instantly see who is scheduled and when.
* **Multiple zoom levels:** Easily switch between daily, weekly, or monthly views depending on your management needs.
* **Instant reorganization:** Reassign or move an operation simply by drag-and-drop.

### Why it's useful

The timeline view allows you to:

* Better visualize team workload
* Quickly reassign interventions
* Optimize operational organization

Designed to gain visibility and responsiveness in managing your field operations.

{% hint style="info" %}
Available now in the Daxium-Air calendar. See the [Calendar view](https://www.center.daxium-air.com/user-documentation/use/using-the-platform/views/calendar) documentation for more details.
{% endhint %}


# A new homepage for enhanced efficiency

The web portal homepage has been redesigned with customizable shortcut folders and a refreshed visual design.

**Published on March 6, 2026**

Here's the web portal homepage, redesigned for your ease of use.

![](/files/NIqiuD7ziAIuU3xSEhSN)

* **Shortcut folders:** Gain clarity and customization thanks to shortcut folders. Create folders tailored to your organization, and group your shortcuts by theme, region, population, or any other criterion.
* **Design:** More modern and more compact shapes for better visual harmony. We hope you like it!

{% hint style="info" %}
Want to know more? Check out the [Shortcuts](https://www.center.daxium-air.com/user-documentation/build/building-the-platform/organising-the-platform/shortcuts) documentation.
{% endhint %}


# 10 key tips for a successful migration to Daxium-Air iOS (V2)

Everything you need to know before migrating from the V1 iOS app to the new V2 app.

**Published on January 12, 2026**

The new Daxium-Air iOS app is now available.

<figure><img src="/files/RA3o3N34ywSWV3sMuXCT" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
Please read the information below carefully before migrating.
{% endhint %}

**1. A new app, not an update.** The new Daxium-Air iOS app (V2) is a separate application from the previous iOS version (V1). It does not automatically replace the old app.

**2. Download via the App Store.** V2 is available on the App Store: [Download Daxium-Air V2](https://apps.apple.com/fr/app/daxium-air/id1577952851).

**3. Same credentials, same environment.** You log in using the same credentials (email / password). Users will find their menus, their forms, and their working environment.

**4. Both apps can coexist.** V1 and V2 can be installed side by side on the same iPhone or iPad. V2 does not update or uninstall V1. Both apps use separate local databases.

**5. Using both apps in parallel is not recommended.** V2 is intended to replace V1. V1 can be kept temporarily as a backup, until you confirm the migration is fully completed. Long-term simultaneous use of both apps is not recommended.

**6. Local data from V1 is not automatically transferred.** Data stored locally in V1 (unsynced records, local history) is not automatically transferred to V2. Before migrating, sync your data in V1 and make sure distribution / assignment rules are properly set up if needed.

**7. No additional training required.** V2 supports the same use cases as V1, with similar user journeys and a deliberately familiar interface. A few adjustments exist (buttons, wording, display), but no specific training is required for field users.

**8. Some specific features may require support.** V2 supports V1 features and brings new capabilities. Some advanced features or specific use cases may require configuration updates on the admin side. Contact us if you have any questions.

**9. Regular updates.** V2 benefits from frequent updates (new features, bug fixes, improvements). We strongly recommend enabling automatic updates in the App Store to continuously benefit from enhancements.

**10. An app ready for future developments.** With V2, you benefit from a modernized technical foundation, better performance, and an application designed to support future Daxium-Air features. This is now the version on which we will focus future developments.


# Selecting a related submission via NFC

Scan an NFC badge or tag to instantly select the right related submission in Daxium-Air — no more manual search or QR code required.

**Published on October 27, 2025**

## Context

Until now, selecting a related submission (personnel, equipment, gear, etc.) was only possible via **manual entry** (searching in the list) or by scanning a **QR code**.

A new option is now available: **NFC selection**.

Simply scan a configured NFC badge or tag, and Daxium-Air instantly identifies and opens the right submission.

![](/files/v600hrhXgLT7cjqGgkK2)

## How does it work?

**1. Configure the related submission** (e.g. an employee, a piece of equipment).

**2. Associate an NFC badge or tag** with that submission, directly from the Daxium-Air app.

**3. Scan the tag** from a mission, a form, or a workflow step — the corresponding submission is automatically selected.

## Use cases

**Assigning an employee to a mission.** The operator scans the employee's NFC badge — Daxium-Air automatically selects their submission and links it to the current mission. No risk of selection errors, and time saved on every assignment.

**Identifying equipment during a maintenance visit.** The technician scans the NFC tag attached to the machine — the app opens the submission for the correct equipment directly. Daxium-Air logs the read as proof of visit, for perfect traceability.

## Key benefits

* **Instant:** no more searching — a single NFC read is enough.
* **Error-free:** each badge or tag is unique and tied to a single submission.
* **Secure:** the tag only contains an identifier, and access remains governed by user permissions.
* **Enhanced traceability:** every read is logged and proves on-site presence.

{% hint style="info" %}
Check out the [Relations](https://www.center.daxium-air.com/user-documentation/build/building-the-platform/building-forms/fields/relations) documentation for more details on how to configure this feature.
{% endhint %}


# PDF files embedded in reports

Insert PDF documents directly into your Daxium-Air reports using the file attachment field and the FileImage function.

**Published on October 8, 2025**

![](/files/qkE6xNRqP0fkeWy3ZhD0)

Good news for fans of comprehensive reports — Daxium-Air now lets you embed your PDF documents directly into your reports.

## File attachment field in reports

Thanks to the **file attachment** field, you can automatically insert a preview of the PDF pages into your reports, using the `FileImage` function.

Example syntax:

```
<%FileImage('Fichier', 'All', 600)%>
```

Your PDF is then displayed directly in the report, page by page. Ideal for attaching a contract, an intervention report, or supporting documents.

{% hint style="info" %}
Check out the [Reporting](https://www.center.daxium-air.com/user-documentation/build/building-the-platform/building-the-reporting/) documentation to learn more.
{% endhint %}


# Optimized file loading

The file upload module has been redesigned — drag and drop multiple files at once, follow progress in real time, and get clear error messages.

**Published on June 5, 2025**

We're happy to announce a significant improvement to the file loading module in Daxium-Air.

![](/files/396iTg5JGnZnjj8D69um)

This new, more intuitive version makes day-to-day document management easier.

## What's changing

**Drag and drop multiple files at once.** No more adding files one by one — you can now select and drag several files simultaneously into a file field from your computer.

**A clear, guided interface.** Each step is easier to read:

* A progress bar keeps you informed of upload status in real time.
* Files are identified by type (PDF, image, document, etc.) and sorted cleanly.
* In case of an error (unsupported file, file too large), a clear message alerts you immediately.

{% hint style="info" %}
Already available to all Daxium-Air users. Stay tuned for more updates!
{% endhint %}


# Colored map pins now available on Android

After web and iOS, Daxium-Air Android v2.4.5 brings colored map pins to field users.

**Published on May 6, 2025**

Good news for Daxium-Air Android users. After the web and iOS apps, your map pins finally come in color on **Daxium-Air Android v2.4.5** — more visual and more efficient for field users.

![](/files/EC4GUY3canc8EzQgu5M1)

## How does it work?

If your forms use a [workflow](https://www.center.daxium-air.com/user-documentation/build/building-the-platform/building-forms/workflow-and-assignation) or a functional status with a list containing colors, then the map pins automatically take on the color associated with each status. A single glance is now enough to see where things stand.

{% hint style="info" %}
Remember to update your app to benefit from this feature.
{% endhint %}


# Shortcuts management redesigned

The web shortcuts management page has been redesigned for better clarity and ease of use.

**Published on March 28, 2025**

For better ease of use and more clarity, we've redesigned the web shortcuts management page.

**A new organization around the three types of shortcuts.**

![](/files/cK3rn7buglk3yePVmBfg)

**Better segmentation** between shared shortcuts and personal ones (My shortcuts).

![](/files/D0esimV0Kxqvj9NrZhFt)

**Improved readability** of shortcut settings.

![](/files/fSPghDdjBgjg8dklvKwU)

{% hint style="info" %}
Check out the [Shortcuts](https://www.center.daxium-air.com/user-documentation/build/building-the-platform/organising-the-platform/shortcuts) documentation to learn more. Let us know what you think!
{% endhint %}


# External link shortcut

You can now add shortcuts to external URLs from your homepage.

**Published on March 28, 2025**

Many of you asked for it — it's here! The **external link shortcut** (URL) is now available.

This feature lets you easily insert links to external sites directly from your homepage. Whether you want quick access to your intranet or to a tool page that's essential to your activity, this feature is for you.

![](/files/MyjQt8DWbJGrGdCguLSI)

Simply click **Add a shortcut**, select **External link**, and you're done. In just a few clicks, you can customize your homepage to include the links you need, improving your efficiency and productivity.

{% hint style="info" %}
The URL is currently limited to 250 characters. This limit will be increased soon. In the meantime, you can use a URL shortener such as [urlr.me](https://urlr.me/).

See the [Shortcuts](https://www.center.daxium-air.com/user-documentation/build/building-the-platform/organising-the-platform/shortcuts) documentation for more details.
{% endhint %}


# New Mosaic view (web)

Try the new Mosaic view — select records, run bulk actions, and use the new filter system.

**Published on March 13, 2025**

Why not try the new **Mosaic view**? Simply switch to it.

![](/files/agyI5tEn619mEvKY1zpw)

The new interface lets you:

* Select records and perform bulk actions (export, duplicate, edit, etc.).
* Use the new filter system.

{% hint style="info" %}
Let us know what you think!
{% endhint %}




---

[Next Page](/llms-full.txt/1)

