Automation section
This page describes the actions and parameters that can be configured in an
automation section (MarkupJob) in the template. Actions run as background jobs
when the automation section is triggered by an event (for example after saving, after
loading data, or on cell changes).
Tasks run sequentially: the next active row starts only after the current row completes successfully.
When you add rows, extend the named cell range of the automation section, or new steps are ignored.
Triggers and scheduling
A job can be triggered by a user interaction (like a cell action — value changed, cell click, or file events) or run on a schedule via a CRON entry. When a model has a CRON job, it shows a clock icon in the Cell Storage Explorer in Design mode, where you can start/stop it or run it now.
JobRanges and workflow setup currently require database configuration (tables
u1.MarkupJob and u1.MarkupJobTrigger, CRON entries).
Automation section table structure
Each row defines one action (task). The columns have the following meaning:
| Column | Field | Description |
|---|---|---|
| 1 | Name | Name of the action (free text; appears in logs). |
| 2 | Type | Technical name of the action type (see below). Case-insensitive. |
| 3 | Run | 1 = action runs; empty or 0 = row is skipped. |
| 4 | Success message | Optional text logged on successful completion. |
| 5 | Error message | Optional text logged on failure. |
| 8 | Status | Output: progress / completion status (filled by the system). |
| 9 | Result | Output: result text (filled by the system). |
| 10–11 | Started by / at | Output: who started the action and when. |
| 12 | Completed at | Output: time of completion. |
| From column 15 | Parameter 1 … n | Action-specific input values (see each action section below). |
Note: Parameters start at column 15 (first parameter = column 15, second = column 16, and so on).
Action type overview
| Type (column 2) | Description |
|---|---|
MatrixDataCopy | Copy data from one dataset selection to another. |
MatrixDataRecalc | Recalculate datasets (including optional import). |
StateClose | Close inactive open dataset histories. |
StateDeleteInactive | Clean up and delete closed, inactive dataset histories. |
BidataExportStart | Start a data export (BI export). |
DataPumpCsv | Import a CSV file into a SQL table. |
LinkCommand | Execute a data query command (BxLink command). |
Execution and error handling
- When the automation is triggered, all rows with Run = 1 are read.
- Unknown types in column 2 are ignored (with a notice in the app).
- Actions run sequentially. If an action fails, subsequent job rows are cancelled and an error notice is shown.
- The Status, Result, and timestamp columns are updated by the system during and after execution (if the section is configured for this).
Quick reference: parameters per action
| Action | Param 1 (Col. 15) | Param 2 (Col. 16) | Param 3 (Col. 17) | Param 4+ |
|---|---|---|---|---|
MatrixDataCopy | Model code | Overwrite (0/1) | Target selections, then source selections | … |
MatrixDataRecalc | Model code | Options (JSON/Legacy) | Selections | … |
StateClose | Model code / ##ALL## | (reserved) | Minutes | — |
StateDeleteInactive | Model code / ##ALL## | (reserved) | Minutes | — |
BidataExportStart | Export name | Full sync (0/1) | Schema change (0/1) | — |
DataPumpCsv | JSON settings | CSV path | BCP XML path | BxLink, schema, table |
LinkCommand | JSON parameters | Command name | — | — |
Common placeholders for selection parameters
For MatrixDataCopy and MatrixDataRecalc, selection parameters refer to the
dataset selections of the specified model (in the order defined in the model
configuration):
| Value | Meaning |
|---|---|
| (data label code) | A specific data label from its data label collection, for example 2024 or DE. |
##ALL## | All labels of the selection. |
##NULL## | No label / empty selection. |
For optional or additional selections, an empty or unknown code may be tolerated; for required selections, a valid data label must be provided.
Action descriptions and parameters
MatrixDataCopy — Copy dataset data
Copies cell values from a source selection to a target selection in the specified model. Subordinate datasets can be included recursively.
Parameters
| Parameter | Column | Description |
|---|---|---|
| Model code | 15 | Code of the model in which data is copied. The most recently published template version is used. |
| Overwrite | 16 | 1 = overwrite existing target data; 0 or empty = do not overwrite. |
| Target selection 1 … n | 17 … | One data label code (or placeholder) per dataset selection — target. |
| Source selection 1 … n | … | Then one value per selection — source (same count as target). |
Example
Model PLAN with two selections (year, version):
| 15 | 16 | 17 | 18 | 19 | 20 |
|---|---|---|---|---|---|
PLAN | 1 | 2025 | ACTUAL | 2024 | ACTUAL |
| → Copies actual data from 2024 to 2025 (actual), overwriting existing target data. |
MatrixDataRecalc — Recalculate datasets
Recalculates datasets for the specified selections. Optionally, import templates and filter options can be set.
Parameters
| Parameter | Column | Description |
|---|---|---|
| Model code | 15 | Code of the model. |
| Options | 16 | JSON object or legacy format for import (see below). Empty = default behavior. |
| Selection 1 … n | 17 … | One data label code (or placeholder) per dataset selection. |
Options (column 16)
As JSON (recommended):
{
"onlyExistingDatasets": "true",
"migrationName": "MyImportTemplate",
"migrationDocId": "12345"
}
| JSON key | Description |
|---|---|
onlyExistingDatasets | true = recalculate only already existing datasets. |
migrationName | Name of an import template in the current template version (optional). |
migrationDocId | Numeric ID of the import document (required when migrationName is set). |
Legacy format (still supported):
<importTemplateName>##<documentId>
Example: Jahreswechsel##4711
StateClose — Close inactive datasets
Closes open dataset histories from the history that have been inactive for longer than the specified time (reducing parallel-processing warnings). Only datasets of the current tenant are considered; app and tenant are taken from the running session.
Parameters
| Parameter | Column | Description |
|---|---|---|
| Model code | 15 | Code of the model. ##ALL## = all models. |
| (reserved) | 16 | Not currently evaluated — leave empty. |
| Inactivity (minutes) | 17 | Minimum inactivity duration in minutes. Only values > 0 trigger execution. |
Example
| 15 | 16 | 17 |
|---|---|---|
PLAN | 120 | |
| → Closes open PLAN datasets that have been inactive for more than 120 minutes. |
StateDeleteInactive — Delete inactive datasets
Permanently removes closed, inactive dataset histories (deletion stage). Tenant and app are taken from the running session.
Parameters
| Parameter | Column | Description |
|---|---|---|
| Model code | 15 | Code of the model. ##ALL## = all models. |
| (reserved) | 16 | Not currently evaluated — leave empty. |
| Inactivity (minutes) | 17 | Minimum inactivity duration in minutes since closing. Only values > 0 trigger execution. |
BidataExportStart — Start a data export
Starts the synchronisation of a configured data export (BI schema).
Parameters
| Parameter | Column | Description |
|---|---|---|
| Export name | 15 | Caption (name) of the data export definition in the app. |
| Force full export | 16 | 1 = force a full export; otherwise empty/0. |
| Allow schema changes | 17 | 1 = allow schema/table changes at the export target; otherwise empty/0. |
If an export job for the same definition is already running, the new job is cancelled.
DataPumpCsv — CSV import
Imports a CSV file into a SQL table using a BCP format XML file via a data integration (BxLink).
Parameters
| Parameter | Column | Description |
|---|---|---|
| Import settings (JSON) | 15 | Optional JSON configuration (see below). Empty = default values. |
| CSV file path | 16 | Full path to the CSV file on the server. |
| BCP format XML path | 17 | Full path to the XML file with the BCP column definitions. |
| Data integration | 18 | Name of the SQL data integration (BxLink). |
| Database schema | 19 | Target schema in the database. |
| Target table | 20 | Name of the target table. |
Import settings (JSON, column 15)
{
"Delimiter": ";",
"HasHeader": true,
"Culture": "de-DE",
"Encoding": "UTF8",
"DropTmpTable": false,
"UseExistingTable": false,
"IdentityColumnName": "Id",
"CommandTimeoutSec": 600,
"NoEscape": true
}
| Field | Description |
|---|---|
Delimiter | Column delimiter in the CSV file. |
HasHeader | true = first row contains column headers. |
Culture | Culture for number and date formats, for example de-DE. |
Encoding | Character encoding, for example UTF8. |
DropTmpTable | Delete the temporary import table after completion. |
UseExistingTable | true = use the existing target table (no rebuild). |
IdentityColumnName | Name of the identity column on table creation (default: Id). |
CommandTimeoutSec | SQL timeout for bulk steps in seconds. |
NoEscape | true (default) = treat quotes as regular characters; false = RFC-4180 quoting. |
LinkCommand — Execute a data query command
Executes a configured data query command (BxLink command) and loads the data into the app.
Parameters
| Parameter | Column | Description |
|---|---|---|
| Command settings (JSON) | 15 | Optional parameters for the command (see below). Empty = default. |
| Command name | 16 | Name of the data query command in the app. |
Command settings (JSON, column 15)
{
"Parameters": {
"Year": 2025,
"Tenant": "ACME"
}
}
The keys under Parameters correspond to the parameter names of the command in
the data integration configuration.