# Data

The **Data** category is where Ondeva’s power as a backend platform comes to life. These steps allow you to load, transform, persist, and delete structured data from tables or forms. Whether your data originates from a form, API, or external file — you can capture, manipulate, and store it precisely.

### **Load Query**

**Purpose:**

Executes a saved query and loads its result into the session for later use in the workflow or UI.

**Key Options:**

* **Source**: Choose from any prebuilt query in your project.

**When to Use:**

* Preloading data before branching logic.
* Feeding a “For Each” loop.
* Populating UI components with live query results.

***

### **Save Entry**

**Purpose:**

Creates or updates an entry in a database table.

**Key Options:**

* **Table**: Select which table to write into.
* **Query**: Define filters to find an existing entry (optional). If left blank, a new entry will be created. If filled only matching entries will be updated. The system will not “upsert” records.
* **Fields**: Set which fields to update or insert, and their values (supports function editor and session variables).

**When to Use:**

* Updating rows based on form inputs or calculations.
* Storing processed data from APIs or loops.

***

### **Delete Entry**

**Purpose:**

Deletes a specific row from a table based on its ID.

**Key Options:**

* **Table**
* **Entry ID**: Static or calculated via formula.

**When to Use:**

* Cleanup after user deletion or canceled transactions.
* Removing outdated records via time-based workflows.

***

### **Duplicate Entry**

**Purpose:**

Creates a copy of a specific entry (row) from a table.

**Key Options:**

* **Entry ID**: The original entry to copy.

**When to Use:**

* Cloning templates (e.g., tasks, documents).
* Generating reusable rows from predefined models.

***

### **Read File**

**Purpose:**

Loads data from an external file (Excel, CSV, JSON) into the session for manipulation or saving.

**Key Options:**

* **Path**: File location: You can load a file from three different sources:
  * an external URL
  * a file that was uploaded by the user and the current workflow is executed after upload completion. In that case use the variable `{var_file-path}`
  * or read a JSON file directly, in which case you can reference a variable holding your JSON data in the field.
* **File Type**: Select the file type to load
* **Parsing Options**: Header, sheet number (Excel), date/number format (CSV), JSON path (for nested parsing).

**When to Use:**

* Importing datasets via workflows.
* Syncing data from external exports.
* Processing uploaded files on form submission.

***

### **User Data**

**Purpose:**

Manipulates user-related information such as resetting passwords, managing roles, or triggering invitations.

**Key Actions:**

* Create user
* Send invitation/reset links
* Update roles (add/remove)
* Generate API token
* Logout user

**When to Use:**

* Onboarding flows.
* Automating user role changes.
* Integrating with external identity providers.

***

### **Read Form Fields**

**Purpose:**

Extracts values from a form submitted by a user.

**Key Options:**

* **Form**: The form you're targeting. The form must be present on the page and the workflow must be executed on form submit.
* **Variables**: Map each form field to a named variable for later use.

**When to Use:**

* Triggering workflows from form submissions.
* Capturing input for condition checks, database saves, or emails.
* Replacing backend form handlers with Ondeva-native logic.

***

### **Set Form Validation**

**Purpose:**

Sets whether a form submission passes or fails validation based on custom workflow logic.

**Key Options:**

* Can be dynamically used after `Check Condition` or external checks (e.g. API, duplicate check).

**When to Use:**

* Implementing custom validations (e.g., email uniqueness, license limits).
* Returning dynamic error messages to the user interface.

***

### Best Practices

* Combine **Read Form Fields** → **Save Entry** for complete form handling pipelines.
* Use **Load Query** + **For Each** for bulk data updates.
* Remember: session parameters persist across steps and allow data reuse within the same workflow.
