Workflow Action Reference
Actions are modular, executable building blocks that define specific operations within a workflow. Each action performs a discrete task, such as manipulating data, interacting with APIs, controlling logic flow, or performing system-level operations.
This article provides a quick reference to all available workflow actions, along with their parameter descriptions and usage details. Use it to understand what each action does and how to configure it when building or troubleshooting workflows.
General Info
Most action parameters support two modes:
- Static: Assigns a constant value that remains unchanged throughout the workflow.
- Dynamic: Assigns a variable or object whose value is resolved at runtime and may change during execution.
Display Settings
Each action module includes customizable display settings that control how it appears in the interface:
- Background Color: Sets the background color of the action module.
- Text Color: Defines the color of the text displayed within the module.
- Action Display Name: Allows you to specify a custom name for the action module.
- Display Description: A brief description that provides context or details about the module’s purpose.
AddJobTags (V1)
The AddJobTags action assigns one or more tags to the current workflow job. Tags are used for categorization, filtering, monitoring, and reporting purposes.
This action does not alter workflow execution logic — it enriches the workflow job with metadata.
Functionality
Input:
- A list of tags (
TAGS)
Process:
- Reads the provided list of tag strings.
- Adds the tags to the current workflow job.
- Existing tags remain unchanged unless system behavior defines duplicate handling internally.
Output:
- The workflow job is updated with the specified tags.
- Execution continues normally.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| TAGS | Static | List<String> | One or more tags to assign to the current workflow job. |
- Tags can be used for:
- Filtering workflow jobs in monitoring views
- Grouping related executions
- Triggering external reporting or analytics
- Use consistent naming conventions (e.g.,
Finance,HighPriority,ImportJob,Customer:ABC) to ensure reliable filtering. - Multiple tags can be applied in a single action.
- Job tags assigned to workflow job will be listed under workflow job for that instance.
Tags are metadata only and do not influence workflow logic unless explicitly referenced elsewhere.
Avoid inconsistent or free-form tag naming, as this reduces filtering reliability.
AddTime
The AddTime action adjusts a date/time value by adding or subtracting a specified duration. The result is stored in a target variable as a DateTimeOffset. This block is commonly used for scheduling, calculating expirations, or adjusting timestamps.
Functionality
Input:
A base DateTimeOffset value, an operation (+ or -), and a duration string (e.g., 2d, 5h30m).
Process:
Performs the time addition or subtraction.
Duration is interpreted as days, hours, minutes, and seconds.
Output:
A new DateTimeOffset value stored in RESULT_VAR.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| DATETIME | Static/Dynamic | DateTimeOffset | Base date/time value to adjust. |
| OPERATION | Static/Dynamic | String | Must be "+" (add) or "-" (subtract). |
| VALUE | Static/Dynamic | String | Time string in format like 1d2h30m10s. |
| RESULT_VAR | Static | String | Variable name to store the resulting DateTimeOffset. |
⏱ Time Format Examples
2d→ 2 days5h30m→ 5 hours and 30 minutes10s→ 10 seconds1d2h15s→ 1 day, 2 hours, 15 seconds
Do not use negative values inside VALUE. To subtract time, set OPERATION = "-".
CastBool
The CastBool action converts an object value into a Boolean (true or false) and stores the result in a workflow variable.
This block is often used when values are extracted as generic objects (for example, usnig JsonPathValue) but need to be explicitly interpreted as Boolean values for conditions or branching logic.
Functionality
Input:
A source object (SOURCE_VAR) that contains a value representing a Boolean.
Process:
Casts the object into a Boolean.
Output:
The resulting Boolean value is stored in RESULT_VAR.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| SOURCE_VAR | Static/Dynamic | Object | Input object containing a value to be cast into a Boolean. |
| RESULT_VAR | Static | String | Variable name to store the resulting Boolean. |
Use CastBool after JsonPathValue when extracting Boolean values from JSON. Since JSON booleans are often stored as generic objects, this ensures they are converted into usable Boolean workflow variables.
The action will fail if the input is null or if the value is not recognizable as a Boolean (e.g., "abc").
CastDateTime
The CastDateTime action converts a DateTime object into a proper workflow variable that can be used in the workflow.
It is especially useful when values are extracted using actions like JsonPathValue, which store date fields as generic objects instead of typed DateTime variables.
Functionality
Input:
A source object (SOURCE_VAR) that must already contain a DateTime value.
(For example, a JSON field like "2025-05-21T15:30:00Z" extracted into an object.)
Process:
Casts the object into a DateTime variable.
Output:
The resulting DateTime value is stored in RESULT_VAR.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| SOURCE_VAR | Static/Dynamic | Object | The input object that contains a DateTime value. |
| RESULT_VAR | Static | String | Variable name to store the resulting DateTime. |
Use CastDateTime after JsonPathValue when you need to convert a JSON-extracted date (stored as an object) into a proper DateTime variable for workflow logic.
This action will not convert arbitrary objects. The input must be an object containing a valid DateTime.
CastDateTimeOffset
The CastDateTimeOffset action converts a DateTime object with offset information into a proper workflow variable.
This is particularly useful when values are extracted as generic objects (for example, using JsonPathValue from a JSON payload). In such cases, the block ensures the value is converted into a usable, time zone–aware DateTime variable.
Functionality
Input:
A source object (SOURCE_VAR) that contains a DateTime value with offset or UTC information.
Process:
Attempts to cast the object into a DateTimeOffset variable.
Supported formats include:
- ISO 8601 →
"2025-05-21T14:45:00+05:30" - UTC string →
"2025-05-21T09:15:00Z"
Output:
The resulting DateTimeOffset is stored in RESULT_VAR.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| SOURCE_VAR | Static/Dynamic | Object | Input object containing a DateTime value with offset (often extracted via JsonPathValue). |
| RESULT_VAR | Static | String | Variable name to store the resulting DateTimeOffset. |
Use CastDateTimeOffset after JsonPathValue when extracting timestamp fields from JSON payloads. This ensures the value is converted into a proper, time zone–aware DateTime variable for workflow calculations.
The input must be an object containing a valid DateTime with offset.
If the object is null or in an invalid format, the action fails.
CastDecimal (V1)
The CastDecimal action casts a given object into a Decimal and stores the result in a workflow variable.
Functionality
Input:
A source object (SOURCE_VAR) that must represent a value convertible to a decimal.
Process:
Attempts to cast the object into a Decimal.
Output:
The resulting decimal value is stored in RESULT_VAR.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| SOURCE_VAR | Static/Dynamic | Object | Input object to be cast into a decimal. |
| RESULT_VAR | Static | String | Variable name to store the resulting decimal value. |
The action fails if the source is null or cannot be converted to a decimal.
CastDictionary
The CastDictionary action converts a source object into a Dictionary<string, object> and stores it in a workflow variable.
This is especially useful when values are extracted as generic objects (for example, using JsonPathValue from JSON payloads) but need to be handled as a structured dictionary for further processing.
Functionality
Input:
A source object (SOURCE_VAR) that must be compatible with a dictionary structure.
Process:
Attempts to cast the object into a Dictionary<string, object>.
- Works well with deserialized JSON objects.
- Supports generic objects returned by APIs or workflows.
Output:
The resulting dictionary is stored in RESULT_VAR.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| SOURCE_VAR | Static/Dynamic | Object | The source object to cast into a dictionary (commonly extracted via JsonPathValue or from deserialized JSON). |
| RESULT_VAR | Static | String | Variable name to store the resulting dictionary object. |
Use CastDictionary when working with JSON data or API responses where objects are returned as generic types. Casting them into dictionaries makes it easier to access keys and values in workflows.
CastDictionaryList(V1)
The CastDictionaryList action converts an object into a List<Dictionary<string, object>> and stores the result in a workflow variable.
This is particularly useful when handling JSON arrays or API responses that return lists of key–value pair objects. It ensures that tabular or structured data represented as generic objects can be safely cast and used in workflows.
Functionality
Input:
A source object (SOURCE_VAR) that must represent a list of dictionaries (with string keys).
Process:
Attempts to cast the object into a List<Dictionary<string, object>>.
- Works well with JSON arrays of objects.
- Supports tabular-style data transformations.
Output:
The resulting list of dictionaries is stored in RESULT_VAR.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| SOURCE_VAR | Static/Dynamic | Object | Input object expected to be a list of dictionaries (e.g., JSON arrays of objects, API responses). |
| RESULT_VAR | Static | String | Variable name to store the resulting List<Dictionary<string, object>>. |
Use CastDictionaryList when processing data from JSON payloads or web services that return collections of objects. This allows workflows to iterate through rows and access values by keys.
The input must strictly conform to a list of dictionaries with string keys.
The action fails if the source is null or incompatible with the required structure.
CastDictionaryList(V2)
The CastDictionaryList action converts an object into a List<Dictionary<string, string>> and stores the result in a workflow variable.
This is particularly useful when handling JSON arrays or API responses that return lists of key–value pair objects. It ensures that tabular or structured data represented as generic objects can be safely cast and used in workflows.
Functionality
Input:
A source object (SOURCE_VAR) that must represent a list of dictionaries (with string keys and values).
Process:
Attempts to cast the object into a List<Dictionary<string, string>>.
- Works well with JSON arrays of objects.
- Supports tabular-style data transformations.
Output:
The resulting list of dictionaries is stored in RESULT_VAR.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| SOURCE_VAR | Static/Dynamic | Object | Input object expected to be a list of dictionaries (e.g., JSON arrays of objects, API responses). |
| RESULT_VAR | Static | String | Variable name to store the resulting List<Dictionary<string, string>>. |
Use CastDictionaryList when processing data from JSON payloads or web services that return collections of objects. This allows workflows to iterate through rows and access values by keys.
The input must strictly conform to a list of dictionaries with string keys.
The action fails if the source is null or incompatible with the required structure.
CastInt
The CastInt action converts the value in SOURCE_VAR into an integer and stores it in a workflow variable.
This is useful when values are provided as generic objects but need to be handled as integers inside workflows.
Functionality
Input:
A source object (SOURCE_VAR) that must represent a value convertible to an integer.
Process:
Attempts to cast the object into an integer.
Output:
The resulting integer is stored in RESULT_VAR.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| SOURCE_VAR | Static/Dynamic | Object | The input object to cast to an integer. |
| RESULT_VAR | Static | String | Variable name to store the resulting integer. |
The action fails if the source is null or cannot be converted to an integer.
CastObject (V1)
The CastObject action casts a given value into a generic Object and stores the result in a workflow variable.
Functionality
Input:
A source value (SOURCE_VAR) to be cast as an object.
Process:
Casts the input into a generic Object.
Output:
The resulting object is stored in RESULT_VAR.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| SOURCE_VAR | Static/Dynamic | Object | Input value to be cast into a generic object. |
| RESULT_VAR | Static | String | Variable name to store the resulting object. |
CastObjectList
The CastObjectList action converts an input object into a List<object> and stores it in a workflow variable.
This is useful when values are extracted as generic objects (for example, JSON arrays or API responses) but need to be treated as a list for iteration or further processing.
Functionality
Input:
A source object (SOURCE_VAR) that must represent a list.
Process:
Attempts to cast the object into a List<object>.
Output:
The resulting list is stored in RESULT_VAR.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| SOURCE_VAR | Static/Dynamic | Object | Input object expected to be a list. |
| RESULT_VAR | Static | String | Variable name to store the resulting List<object>. |
The action fails if the source is null or if it cannot be cast into a list.
CastString
The CastString action converts an input object into a string and stores the result in a workflow variable.
This is useful when values are provided as generic objects (for example, from JSON or API responses) but must be explicitly treated as strings for downstream processing, comparisons, or display.
Functionality
Input:
A source object (SOURCE_VAR) that must represent a value convertible to string.
Process:
Attempts to cast the object into a string.
Output:
The resulting string is stored in RESULT_VAR.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| SOURCE_VAR | Static/Dynamic | Object | Input object to be cast into a string. |
| RESULT_VAR | Static | String | Variable name to store the resulting string. |
Use CastString to normalize values into string from JSONPath action or format before logging, formatting messages, or passing data to endpoints that expect string input.
The action fails if the source is null or cannot be converted to a string.
CheckStorageExists
The CheckStorageExists action verifies whether a storage entity exists at a specified level (Number, Location, Area, or Bin).
If the name is found, the corresponding internal ID is returned. If it does not exist, the result is 0.
This is especially useful when building workflows that need to confirm the presence of storage zones before creating or updating them.
Functionality
Input:
A storage level (Number, Location, Area, or Bin) and the name to check.
Process:
Looks up the storage hierarchy at the specified level and searches for the given name.
Output:
The internal ID of the storage entity is stored in outputVar.
If no match is found, 0 is stored.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| level | Static/Dynamic | String | Storage level to check (Number, Location, Area, or Bin). |
| name | Static/Dynamic | String | Name of the storage entity to look for. |
| outputVar | Static | String | Variable name to store the resulting ID. Will be 0 if not found. |
Use CheckStorageExists together with CreateStorageLocation to implement conditional logic — for example, check if a zone exists first, and only create it if the result equals 0.
Condition
The Condition action evaluates a Boolean expression and returns either true or false.
It is commonly used to control workflow logic, such as branching paths (if/else), loop execution, or conditional task execution.
Functionality
Input:
A Boolean expression (EXPRESSION) that must evaluate to true or false.
Process:
The workflow evaluates the expression during execution.
Output:
The result of the evaluation (true or false) determines which workflow path continues.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| EXPRESSION | Static/Dynamic | Bool | Boolean expression to evaluate. Must resolve to true or false. |
Use Condition for decision-making in workflows, such as:
- Branching logic (if/else)
- Controlling loops (while or until)
- Guarding actions that should only run when certain conditions are met
✅ Example
VAR1 > 10 && VAR2 == "active"
ConvertToGhostData
The ConvertToGhostData action transforms structured data into the GhostData format — a compact serialization type used by RcomMobile.
It takes a complex dictionary of lists and serializes it into a JSON string that represents a valid GhostData object.
Functionality
Input:
A dictionary object (SOURCE_VAR) of the type:
Dictionary<string, List<Dictionary<string, object>>>
Process:
Converts the dictionary into a GhostData object and serializes it into JSON format.
Output:
The resulting GhostData JSON string is stored in RESULT_VAR.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| SOURCE_VAR | Static/Dynamic | Object | Input object of type Dictionary<string, List<Dictionary<string, object>>>. |
| RESULT_VAR | Static/Dynamic | String | Variable name to store the serialized GhostData JSON string. |
Use ConvertToGhostData when preparing structured data for RcomMobile or for workflows that require GhostData format as input.
The source object must strictly follow the required structure (string keys mapped to lists of dictionaries).
If the structure is invalid, the conversion will fail.
CreateExcelSheet
The CreateExcelSheet block creates an Excel file from a list of dictionaries based on the the columns specified in COLUMN_HEADERS and stores the result as a byte array.
⚙️ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| TABLE_DATA | Static/Dynamic | List<Dictionary<string,object>> | The data rows to include in the sheet. Each item should be a dictionary representing a row. |
| COLUMN_HEADERS | Static/Dynamic | List<string> | The ordered list of column headers. Must be defined before execution using SetVar. |
| RESULT_VAR | Static | String | The name of the variable that will store the generated Excel file as a byte array. |
💡 Tip: Use CreateTemporaryFile to save the generated file in database.
CreateObject
The CreateObject action creates a new instance of an object in the system and returns its unique identifier (OBJECT_ID).
Every new object must be assigned to an object group afterward, typically using the SetObjectGroupAttribute action.
Functionality
Input:
No input is required other than specifying the result variable.
Process:
Creates a new object record in the gateway.
Output:
The newly generated OBJECT_ID is stored in RESULT_VAR.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| RESULT_VAR | Static/Dynamic | String | Variable name to store the new OBJECT_ID. |
Always follow CreateObject with SetObjectGroupAttribute to assign the object to a specific object group, otherwise it will remain unlinked and unusable.
CreateStorageLocation
The CreateStorageLocation action creates a new entry in the storage hierarchy under a specified storage number.
You can define sublevels such as Location, Area, and Bin, but each level must follow the correct hierarchy:
Locationrequires a validNumber.Arearequires a validLocation.Binrequires a validArea.
This action is commonly used to build structured storage systems such as warehouses, factories, or hospital inventory zones.
Functionality
Input:
A required top-level storage number, and optionally a location, area, or bin.
Process:
Creates a new storage entry at the specified level.
If a sublevel is provided, all parent levels must already exist.
Output:
A new storage location (Number, Location, Area, or Bin) is created under the given hierarchy.
⚙️ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| number | Static/Dynamic | String | Required. Top-level identifier (e.g., warehouse or zone). |
| location | Static/Dynamic | String | Optional. Required if Area or Bin is defined. Represents a sublocation. |
| area | Static/Dynamic | String | Optional. Required if Bin is defined. Represents an internal zone or section. |
| bin | Static/Dynamic | String | Optional. Represents the final slot or compartment within an area. |
Use CheckStorageExists before running this action to avoid duplicates and to implement conditional creation logic.
All parent levels must exist before creating a sublevel.
The system does not auto-create missing parents. For example, to create a Bin, you must first ensure the corresponding Area and Location exist.
CustomMySQL
The CustomMySQL block executes a custom SQL query on a specified MySQL database connection. It can be used for both data retrieval and scalar queries, depending on the query type and the IS_OBJECT_SELECTION flag.
This block is ideal for interacting with external MySQL databases during workflow execution, such as fetching reference data, validating inputs, or updating external systems.
Functionality
- Input: MySQL connection string and SQL query.
- Process: Runs the query against the database and stores the result in a workflow variable.
- If
IS_OBJECT_SELECTIONis set totrue, the result is stored as aDataContext(multiple rows/columns). - If
IS_OBJECT_SELECTIONisfalse, the result is treated as a scalar value (single value).
- If
- Output: The result of the SQL query, stored in
RESULT_VAR.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| CONNECTION_STRING | Static/Dynamic | String | MySQL connection string (must include host, port, username, password, and database name). |
| QUERY | Static/Dynamic | String | SQL query to execute. Ensure correct syntax and table/column references. |
| RESULT_VAR | Static | String | Name of the variable where the result will be stored. |
| IS_OBJECT_SELECTION | Static/Dynamic | Bool | Set to true if the query returns a rowset (e.g., SELECT *); false if the result is a single value. |
Ensure that the query is properly sanitized and that the connection string has only the necessary permissions. Avoid running destructive operations like DROP, DELETE, or unrestricted UPDATE unless explicitly required.
CustomPostgresSQL (V1)
The CustomPostgresSQL block executes a custom SQL query on a specified PostgreSQL database connection. It can be used for both data retrieval and scalar queries, depending on the query type and the IS_OBJECT_SELECTION flag.
Functionality
- Input: PostgreSQL connection string and SQL query.
- Process: Runs the query against the database and stores the result in a workflow variable.
- If
IS_OBJECT_SELECTIONistrue, the result is treated as a rowset (multiple rows/objects). - If
IS_OBJECT_SELECTIONisfalse, the result is treated as a scalar value (single value).
- If
- Output: The result of the SQL query, stored in
RESULT_VAR.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| CONNECTION_STRING | Static | String | PostgreSQL connection string (must include host, port, username, password, and database name). |
| QUERY | Static | String | SQL query to execute. Ensure correct syntax and table/column references. |
| RESULT_VAR | Static | String | Name of the variable where the result will be stored. |
| IS_OBJECT_SELECTION | Static | Bool | Set to true if the query returns a rowset (e.g., SELECT *); false if the result is a single value. |
Ensure that the query is properly sanitized and that the connection string has only the necessary permissions. Avoid running destructive operations like DROP, DELETE, or unrestricted UPDATE unless explicitly required.
CustomPostgresSQL (V2)
The CustomPostgresSQL (V2) block extends V1 with an optional COMMAND_TIMEOUT parameter and a dedicated IS_FETCH_QUERY flag. If COMMAND_TIMEOUT is not provided, the default timeout behavior applies (default = 0, no timeout).
Functionality
- Input: PostgreSQL connection string, SQL query, and optional timeout.
- Process: Runs the query against the database. Uses
IS_FETCH_QUERYto determine whether to return a rowset or scalar, and respects the command timeout if specified. - Output: The result of the SQL query, stored in
RESULT_VAR.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| CONNECTION_STRING | Static | String | PostgreSQL connection string. |
| QUERY | Static | String | SQL query to execute. |
| IS_FETCH_QUERY | Static | Bool | Set to true if the query returns rows; false for non-fetch (e.g., INSERT, UPDATE) operations. |
| IS_OBJECT_SELECTION | Static | Bool | Set to true if the query returns a rowset; false if the result is a single scalar value. |
| COMMAND_TIMEOUT | Static | Int | Timeout in milliseconds for the query. Set to 0 or omit for no timeout. |
| RESULT_VAR | Static | String | Name of the variable where the result will be stored. |
Ensure that the query is properly sanitized and that the connection string has only the necessary permissions. Avoid running destructive operations like DROP, DELETE, or unrestricted UPDATE unless explicitly required.
CustomScript
The CustomScript action executes a script written in the RCOM Gateway Interpreter scripting language.
This block is intended for advanced scenarios where built-in workflow actions are not sufficient, allowing you to implement custom logic, calculations, or transformations directly within a workflow.
Functionality
Input:
A script string written in the RCOM Gateway Interpreter language.
Process:
Executes the provided script according to the interpreter’s syntax and rules.
Output:
Any results defined in the script execution are applied to the workflow context (e.g., variable assignments, transformations).
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| SCRIPT | Static/Dynamic | String | The RCOM Gateway Interpreter script to execute. |
Use CustomScript when you need specialized logic that cannot be achieved with standard workflow blocks.
- Scripts must strictly follow the
RCOM Gateway Interpretersyntax. - Invalid or malformed scripts will cause execution to fail.
CustomSQL
The CustomSQL action executes a SQL query against a SQL Server database using the provided connection string.
It can handle both object result sets (from SELECT queries) and scalar results (from single-value queries). The query results are stored in the specified workflow variable.
Functionality
Input:
A valid SQL Server connection string and a SQL query.
Process:
- Connects to the database, executes the query, and retrieves results.
- If
IS_OBJECT_SELECTION = true, results are returned as rows (objects). - Otherwise, the result is treated as a scalar value.
Output:
The query result is stored in RESULT_VAR.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| CONNECTION_STRING | Static/Dynamic | String | SQL Server connection string. Must have appropriate permissions. |
| QUERY | Static/Dynamic | String | SQL query to execute. |
| RESULT_VAR | Static/Dynamic | String | Variable name to store the query result. |
| IS_OBJECT_SELECTION | Static/Dynamic | Bool | Set to true if the query returns rows (SELECT). Otherwise, false for scalar results. |
- Ensure the SQL query is valid.
- The
CONNECTION_STRINGmust have the required access rights. - Poorly structured queries may cause workflow errors or performance issues.
CreateTemporaryFile
The CreateTemporaryFile action saves a file (provided as a byte array) into the RCOM Gateway database and returns a unique File ID.
This is useful when workflows generate files (such as Excel reports) that need to be stored temporarily for later retrieval, download, or further processing.
Functionality
Input:
File content in byte array format, along with a name and MIME type.
Process:
Stores the file in the RCOM Gateway database.
Output:
The generated File ID is stored in RESULT_VAR.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| DATA | Static/Dynamic | Byte[] | File content in byte array form. |
| FILE_NAME | Static/Dynamic | String | Name of the file (e.g., report.xlsx). |
| CONTENT_TYPE | Static/Dynamic | String | MIME type of the file (e.g., application/vnd.openxmlformats-officedocument.spreadsheetml.sheet). |
| RESULT_VAR | Static | String | Variable name to store the resulting File ID. |
Use CreateTemporaryFile together with LoadTemporaryFile to save and later retrieve files inside workflows.
Decode6Bit
Decodes the given 6-bit encoded EPC hex string (EPC_HEX) into ASCII and stores the result in TARGET_VAR.
If REMOVE_EOT is set to true, the decoded string will be truncated at the End-of-Transmission (EOT) character.
Returns true if decoding is successful.
⚙️ Parameters
| Parameter | Mode | Type | Description |
|---|---|---|---|
| EPC_HEX | Static/Dynamic | String | Hexadecimal EPC input to decode |
| REMOVE_EOT | Static/Dynamic | Bool | If true, truncate output at the EOT character (if present) |
| TARGET_VAR | Static | String | Variable to store the decoded ASCII result |
This block is especially useful in RFID/EPC workflows.
DecodeData
Decodes the input data (DATA_TOBE_DECODED) based on predefined command type rules and stores the structured result in the specified RESULT_VAR.
Returns decoded fields as a databag (key-value format) suitable for further processing.
⚙️ Parameters
| Parameter | Mode | Type | Description |
|---|---|---|---|
| DATA_TOBE_DECODED | Static/Dynamic | String | Input data string to decode |
| RESULT_VAR | Static | String | Output variable to store the decoded databag |
DecodeGS1
Decodes the provided EPC hex string (EPC_HEX) into its corresponding GS1 EPC URI representations.
Stores the results in EPC_URI (pure identity URI) and EPC_TAG_URI (tag-level URI).
Returns true if decoding is successful and the EPC conforms to a recognized GS1 scheme.
⚙️ Parameters
| Parameter | Mode | Type | Description |
|---|---|---|---|
| EPC_HEX | Static/Dynamic | String | Hex-encoded EPC to decode |
| EPC_URI | Static | String | Output variable for GS1 EPC URI (pure identity format) |
| EPC_TAG_URI | Static | String | Output variable for GS1 EPC Tag URI (with filter and type) |
DeleteAttachment (V1)
The DeleteAttachment action instantly removes an attachment file with the specified filename associated with the provided OBJECT_ID.
If the item is not deleted, the action result returns false.
Functionality
Input:
- Object ID (
OBJECT_ID) - Attachment file name (
FILE_NAME)
Process:
- Locates the object by
OBJECT_ID. - Attempts to find and remove the attachment matching
FILE_NAME.
Output:
- Returns
truewhen deletion succeeds. - Returns
falsewhen no matching attachment is deleted.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| OBJECT_ID | Static/Dynamic | Guid | Unique identifier of the object containing the attachment. |
| FILE_NAME | Static | String | Exact filename of the attachment to remove with file type. (example: data.csv) |
Ensure FILE_NAME exactly matches the stored attachment name with file extension.
DeleteObject
Deletes the object identified by OBJECT_ID.
If DELETE_HISTORY is set to true, the object’s history data will also be removed.
⚙️ Parameters
| Parameter | Mode | Type | Description |
|---|---|---|---|
| OBJECT_ID | Static/Dynamic | Guid | Unique identifier of the object to delete |
| DELETE_HISTORY | Static/Dynamic | Bool | Whether to delete the object's history data |
Deleting an object is irreversible. Use DELETE_HISTORY carefully as it removes audit trails.
DeleteObjectInstant
The DeleteObjectInstant block deletes an object from an Object Group immediately during workflow execution. Unlike queued deletion at the end of a workflow, this block performs the removal in real time, allowing subsequent steps to react accordingly.
Functionality
Input: The object’s unique ID (GUID).
Process:
- Instantly deletes the object from its Object Group.
- Optional: Also deletes its history.
- Optional: Performs soft delete (retains object metadata but marks it as deleted).
Output: No return data, but the object is removed immediately.
Return:
true→ if deletion is successful.false→ if the object does not exist or deletion fails.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| OBJECT_ID | Dynamic/Static | Guid | The unique identifier of the object to be deleted. |
| DELETE_HISTORY | Static/Dynamic | Bool | If enabled, removes the entire history of the object. Default is false. |
| SOFT_DELETE | StaticDynamic | Bool | If enabled, performs a soft delete (marks the object as deleted rather than removing it completely). Default is false. |
Use DeleteObjectInstant in cases where object removal must take effect before proceeding to downstream workflow logic (e.g., cleanup before recalculation or ID reuse).
Encode6Bit
Converts an ASCII string (SOURCE_VAR) into a 6-bit encoded hexadecimal string (TARGET_VAR).
Optionally appends an EOT (End Of Transmission) character if specified.
It can also validate the total length does not exceed the allowed MAX_LENGTH_WORDS (if set).
⚙️ Parameters
| Parameter | Mode | Type | Description |
|---|---|---|---|
| SOURCE_VAR | Static/Dynamic | String | The input ASCII string to encode. |
| TARGET_VAR | Static | String | The variable where the encoded result will be stored. |
| ADD_EOT | Static/Dynamic | Bool | If true, an EOT character will be appended unless already present. |
| MAX_LENGTH_WORDS | Static/Dynamic | Int | Maximum allowed word length. <= 0 disables the check. |
-
EOT Handling:
IfADD_EOTis true and the EOT character (\x04) is not already present, it is appended automatically. -
Length Check:
The encoded result is validated againstMAX_LENGTH_WORDS. If it exceeds this length due to EOT or initial content, the operation fails. -
Return:
trueif successful and all conditions (including optional length check) are met.
EncodeGS1
Converts the given GS1 EPC identifier (SOURCE_VAR, in EPC URN format) into a GS1 EPC URI scheme and stores the result in TARGET_VAR.
Optionally, apply a FILTER value to specify the EPC filter field.
Returns true if the conversion is successful and the scheme is valid.
⚙️ Parameters
| Parameter | Mode | Type | Description |
|---|---|---|---|
| SOURCE_VAR | Static/Dynamic | String | GS1 EPC identifier in EPC URN format |
| TARGET_VAR | Static | String | Variable to store the resulting GS1 EPC URI |
| FILTER | Static/Dynamic | Int | Optional EPC filter value (e.g., 0–7) |
Ensure SOURCE_VAR follows the correct EPC URN syntax. FILTER affects URI encoding for certain EPC schemes.
ForEach
Iterates over each item in the specified list (LIST_NAME), processing them one by one.
The current item is assigned to ITEM_VAR, and its zero-based index is assigned to INDEX_VAR.
Supports input lists of types: List, Dictionary, String, or Object (iterable).
⚙️ Parameters
| Parameter | Mode | Type | Description |
|---|---|---|---|
| LIST_NAME | Static/Dynamic | List, Dictionary, String, Object | The collection to iterate over |
| ITEM_VAR | Static | String | Variable name to hold the current item |
| INDEX_VAR | Static | String | Variable name to hold the current item's index |
EncodeGs1TagUri
The EncodeGs1TagUri block is designed to convert a GS1 EPC identifier provided in URN tag format into a GS1 EPC URI scheme and store the converted value in a variable.
Functionality
-
Input: A GS1 EPC identifier in URN tag format (example:
urn:epc:tag:sgtin-96:3.0614141.812345.6789) -
Process: Converts the URN into the GS1 EPC URI scheme.
-
Output: Stores the result in the specified
TARGET_VAR. -
Return:
true→ if conversion was successful and the scheme is valid.false→ if conversion failed.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
SOURCE_VAR | Static/Dynamic | String | GS1 EPC identifier in URN tag format (e.g., urn:epc:tag:sgtin-96:3.0614141.812345.6789). |
TARGET_VAR | Static | String | Variable name where the resulting GS1 EPC URI will be stored. |
Ensure the EPC in SOURCE_VAR follows the GS1 URN syntax. If the EPC type supports filters, setting FILTER will adjust the resulting EPC URI accordingly.
FlushContext (V1)
The FlushContext action manages workflow context variables based on the selected FLUSH_MODE.
WhiteList: Keeps only the specified variables and removes all others.BlackList: Removes only the specified variables and keeps all others.
It accepts * (all) or a comma-separated list of context variable names.
Functionality
Input:
- Flush mode (
FLUSH_MODE) - Context variable names (
CONTEXT_VARIABLES)
Process:
- Parses the variable list.
- Applies whitelist or blacklist filtering to workflow context.
Output:
- Returns
trueif at least one variable was flushed. - Returns
falseif nothing was flushed.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| FLUSH_MODE | Static | String | Flush strategy: BlackList or WhiteList. |
| CONTEXT_VARIABLES | Static | String | * or comma-separated context variable names. |
Use BlackList with * to clear all variables, or WhiteList with * to keep all variables.
GenerateGuid
Generates a new random Guid (Globally Unique Identifier) and stores it in the specified RESULT_VAR.
Useful for creating unique IDs for objects, sessions, or transactions.
⚙️ Parameters
| Parameter | Mode | Type | Description |
|---|---|---|---|
| RESULT_VAR | Static | String | Variable to store the generated GUID |
GUIDs follow the standard 128-bit format (e.g., xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
GetAttachment (V1)
The GetAttachment action retrieves a stored attachment file associated with a specific object and makes its binary content available inside the workflow.
Use this action when files (e.g., documents, images, exports) are stored as object attachments and must be accessed for further processing, export, or transmission.
Functionality
Input:
- An object identifier (
OBJECT_ID) - The exact attachment file name with extension (
FILE_NAME) - Target variable names for file extension and file data
Process:
- Searches for the attachment linked to the specified
OBJECT_ID. - Matches the attachment using the provided
FILE_NAME. - If found:
- Extracts the file content as binary data.
- Determines or assigns the file extension.
- If not found:
- The action returns false.
Output:
RESULT_DATAcontains the file content asList<Byte>.RESULT_FILE_EXTENSIONcontains the file extension (e.g., docx, pdf, png).
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| OBJECT_ID | Static/Dynamic | Guid | Unique identifier of the object that contains the attachment. |
| FILE_NAME | Static/Dynamic | String | Exact name of the attachment file with extension to retrieve (case sensitivity depends on system configuration). |
| RESULT_FILE_EXTENSION | Static | String | Workflow variable name that will store the file extension of the retrieved attachment. |
| RESULT_DATA | Static | String | Workflow variable name that will store the attachment file data as List<Byte>. |
- The file name must exactly match the stored attachment, including the file extension (e.g., file.docx).
- The action does not perform partial or fuzzy matching.
The resulting RESULT_DATA can be used in:
- Export actions
- Email attachments
- File storage actions
- Document processing actions (e.g., Word or PDF processing)
Common failure causes
OBJECT_IDdoes not exist.- The object has no attachments.
- The specified
FILE_NAMEdoes not match any stored attachment. - Insufficient permissions to access the object or its attachments.
GetDate
Retrieves the current date and time and stores it in the specified RESULT_VAR.
Set USE_UTC to true to return the time in UTC; otherwise, the local server time is used.
⚙️ Parameters
| Parameter | Mode | Type | Description |
|---|---|---|---|
| USE_UTC | Static/Dynamic | Bool | If true, returns time in UTC format |
| RESULT_VAR | Static | String | Variable to store the current date and time |
The returned value is in ISO 8601 format.
GetDateOffset
Retrieves the current DateTimeOffset, which includes both the date/time and the timezone offset, and stores it in RESULT_VAR.
Set USE_UTC to true to return the value in Coordinated Universal Time (UTC); otherwise, local time with offset is returned.
⚙️ Parameters
| Parameter | Mode | Type | Description |
|---|---|---|---|
| USE_UTC | Static/Dynamic | Bool | If true, returns the DateTimeOffset in UTC |
| RESULT_VAR | Static | String | Variable to store the resulting DateTimeOffset value |
DateTimeOffset is ideal when tracking both absolute time and the originating timezone.
GetGroup (V1)
The GetGroup block retrieves the group name associated with a specific GROUP_ID (GUID). This is useful when workflows need to resolve or display the human-readable group name based on a stored reference or ID.
Functionality
- Input: A static
GUIDthat represents the group. - Process: Fetches the corresponding group name using the provided
GROUP_ID. - Output: Stores the resolved group name in the specified workflow variable.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| GROUP_ID | Static | Guid | The unique identifier of the group. |
| RESULT_VAR | Static | String | Name of the variable where the group name will be stored. |
✅ Tip: Use this block when you have a GROUP_ID stored in your object or data context and need to resolve the readable group name—for display, logging, or to pass in SetObjectAttributes action..
GetKeyList
Retrieves all keys from the dictionary specified in SOURCE_VAR (Dictionary<string, object>) and stores them as a list in RESULT_VAR.
Fails if the source is null or not a valid dictionary.
⚙️ Parameters
| Parameter | Mode | Type | Description |
|---|---|---|---|
| SOURCE_VAR | Static/Dynamic | Dictionary<string,object> | The source dictionary from which to extract keys |
| RESULT_VAR | Static | String | Variable to store the resulting list of keys |
The result is typically a List<string> representing all the top-level keys in the dictionary.
GetObjectChangeHistory
The GetObjectChangeHistory action retrieves the historical changes of one or more attributes for a specific object within an Object Group, constrained by an optional time window.
Use this when you need an auditable trail of how selected fields evolved over time—for example, to investigate discrepancies, generate compliance reports, or drive workflow logic based on last-known changes.
Functionality
Input:
- A target
OBJECT_IDin the selected Object Group. - A list of
ATTRIBUTESto track. - Optional
START_DATEandEND_DATEto filter results by time.
Process:
- Queries the change log for the specified object and returns only the events that affect the requested attributes.
- Applies the time filter if provided.
Output:
- Writes a collection of change entries to
RESULT_VAR. - Each entry represents a single change event for a tracked attribute.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
OBJECT_ID | Static | Guid | The unique identifier of the object whose attribute history should be fetched. |
ATTRIBUTES | Static | List<String> | One or more attribute names to include in the history query. Provide at least one. |
START_DATE | Static (Optional) | DateTimeOffset | Lower bound (inclusive) for change timestamps. If omitted, history is fetched from the earliest available record. |
END_DATE | Static (Optional) | DateTimeOffset | Upper bound (inclusive) for change timestamps. If omitted, history is fetched up to the latest available record. |
RESULT_VAR | Static | String | Workflow variable name that will receive the resulting collection of change records. |
ATTRIBUTESis required. Supplying an empty list will result in no data and may cause the action to fail validation.- Ensure
START_DATE≤END_DATE. If the range is inverted, the result set will be empty.
GetObjectGroupSchema
The GetObjectGroupSchema block retrieves the schema of a specified Object Group and maps key metadata-column types, nullability, and primary keys into individual workflow variables. These variables are populated as dictionaries, allowing downstream actions to dynamically interpret and use the structure of the Object Group.
Functionality:
Input: Object Group name (dynamic).
Process: Queries the Object Group definition from the platform and extracts structural metadata.
Output: Maps three sets of information into the workflow:
- Column names and their data types (
Dictionary<string, string>) - Column names and nullability (
Dictionary<string, bool>) - Primary key columns (
List<string>)
These outputs are useful when workflows need to validate data, generate forms, or perform structure-aware operations dynamically.
Return:
true→ if the schema was successfully retrieved and mapped.false→ if the Object Group is not found or an error occurs.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| OBJECT_GROUP_NAME | Dynamic/Static | String | Internal name of the Object Group whose schema is to be retrieved. |
| COLUMN_TYPE | Static | String | Variable name where column types will be stored as a Dictionary<string, string>. Example: { "ID": "Number", "DOB": "Date" } |
| NULLABLE | Static | String | Variable name to store nullability as a Dictionary<string, bool>. Example: { "DOB": true, "ID": false } |
| PRIMARY_KEYS | Static | String | Variable name to store a list of primary key columns as a stringified List<string>. Example: [ "ID", "TEMP_ID" ] |
These output variables can be used in later steps for building dynamic logic based on field types, form constraints, or validation rules.
GetObjectsOfAttributes (v1)
The GetObjectsOfAttributes block retrieves all objects from the specified OBJECT_GROUP_NAME that match either:
- The provided
ATTRIBUTESdictionary (key–value pairs), or - Specific parameter name/value pairs (
PARAM_NAME1,PARAM_VALUE1, etc.).
If COLUMN_NAMES is provided, only those columns will be fetched; otherwise, the full object data is retrieved.
Results are stored in RESULT_VAR as a DataContext.
Either ATTRIBUTES or at least one PARAM_NAME/PARAM_VALUE pair must be provided.
Functionality
Input:
An object group name and either an attribute dictionary or up to two explicit parameter/value pairs.
Process:
- Queries the object group for matching entries.
- If
COLUMN_NAMESis given, returns only those columns. - If
CHECK_EXISTENCEis enabled, writes a boolean flag to the workflow context indicating whether matches were found.
Output:
- Matching objects as a
DataContextstored inRESULT_VAR.
Return:
true→ if query executed successfully.false→ if no results found andCHECK_EXISTENCEis disabled, or if execution fails.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
OBJECT_GROUP_NAME | Static/Dynamic | String | Name of the object group to query. |
ATTRIBUTES | Static/Dynamic | Dictionary<string, object> | (Optional) Dictionary of attributes to match. |
PARAM_NAME1 | Static/Dynamic | String | (Optional) Name of a parameter to match. |
PARAM_VALUE1 | Static/Dynamic | Object | (Optional) Value for PARAM_NAME1. |
PARAM_NAME2 | Static/Dynamic | String | (Optional) Name of a second parameter to match. |
PARAM_VALUE2 | Static/Dynamic | Object | (Optional) Value for PARAM_NAME2. |
COLUMN_NAMES | Static/Dynamic | List<string> | (Optional) List of column names to fetch. |
RESULT_VAR | Static | String | Variable to store the result (as a DataContext). |
Use ATTRIBUTES for bulk matching, or PARAM_NAME1/PARAM_NAME2 for explicit comparisons. Both can be combined if needed for stricter filtering.
GetObjectsOfAttributes (v2)
The GetObjectsOfAttributes block retrieves all objects from the specified OBJECT_GROUP_NAME that match either:
- The provided
ATTRIBUTESdictionary (key–value pairs), or - Specific parameter name/value pairs (
PARAM_NAME1,PARAM_VALUE1, etc.). - Version 2 adds a
CHECK_EXISTENCEoption, which makes the block returntrueif matching objects are found andfalseif no data is found.
If COLUMN_NAMES is provided, only those columns will be fetched; otherwise, the full object data is retrieved.
Results are stored in RESULT_VAR as a DataContext.
Either ATTRIBUTES or at least one PARAM_NAME/PARAM_VALUE pair must be provided.
Functionality
Input:
An object group name and either an attribute dictionary or up to two explicit parameter/value pairs.
Process:
- Queries the object group for matching entries.
- If
COLUMN_NAMESis given, returns only those columns. - If
CHECK_EXISTENCEis enabled, writes a boolean flag to the workflow context indicating whether matches were found.
Output:
- Matching objects as a
DataContextstored inRESULT_VAR.
Return:
true→ if matching objects exist.false→ if no data is found.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
OBJECT_GROUP_NAME | Static/Dynamic | String | Name of the object group to query. |
ATTRIBUTES | Static/Dynamic | Dictionary<string, object> | (Optional) Dictionary of attributes to match. |
PARAM_NAME1 | Static/Dynamic | String | (Optional) Name of a parameter to match. |
PARAM_VALUE1 | Static/Dynamic | Object | (Optional) Value for PARAM_NAME1. |
PARAM_NAME2 | Static/Dynamic | String | (Optional) Name of a second parameter to match. |
PARAM_VALUE2 | Static/Dynamic | Object | (Optional) Value for PARAM_NAME2. |
COLUMN_NAMES | Static/Dynamic | List<string> | (Optional) List of column names to fetch. |
RESULT_VAR | Static | String | Variable to store the result (as a DataContext). |
CHECK_EXISTENCE | Static/Dynamic | Bool | If true, the action returns true if results exist, false if no objects are found. |
Use ATTRIBUTES for bulk matching, or PARAM_NAME1/PARAM_NAME2 for explicit comparisons. Both can be combined if needed for stricter filtering.
GetObjectsOfAttributes (V3)
The GetObjectsOfAttributes (V3) block retrieves all objects from the specified OBJECT_GROUP_NAME that match either:
- The provided
ATTRIBUTESdictionary (key-value pairs), or - Specific parameter name/value pairs (
PARAM_NAME1,PARAM_VALUE1, etc.).
Either ATTRIBUTES or at least one parameter name/value pair must be set.
If COLUMN_NAMES is provided, only those columns are returned; otherwise, full object data is fetched.
Results are stored in RESULT_VAR as a DataContext.
When searching custom attributes:
- Numeric strings are matched by value.
- Numeric types are treated as index-based lookups.
What's Different from V2
- V3 explicitly defines custom-attribute numeric matching behavior.
- In V3, numeric strings are interpreted as literal values.
- In V3, numeric-typed inputs are interpreted as index-based lookups.
Functionality
Input:
- Object group name
- Matching attributes or parameter pairs
- Optional column selection
Process:
- Queries the object group using either
ATTRIBUTESor parameter name/value pairs. - Applies optional column filtering when
COLUMN_NAMESis provided. - Evaluates existence status based on
CHECK_EXISTENCE.
Output:
- Matching objects as a
DataContextinRESULT_VAR.
Return:
truewhen matches are found.falsewhen no matches are found (or no valid query condition is provided).
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
OBJECT_GROUP_NAME | Dynamic | String | Name of the object group to query. |
ATTRIBUTES | Dynamic | Dictionary<String,Object> | Dictionary of attributes to match. |
PARAM_NAME1 | Static | String | Name of first parameter to match. |
PARAM_VALUE1 | Dynamic | Object | Value for PARAM_NAME1. |
PARAM_NAME2 | Static | String | Name of second parameter to match. |
PARAM_VALUE2 | Dynamic | Object | Value for PARAM_NAME2. |
COLUMN_NAMES | Static | List<String> | Optional list of column names to fetch. |
RESULT_VAR | Static | String | Variable to store the result as a DataContext. |
CHECK_EXISTENCE | Static | Bool | If enabled, returns existence status based on matching results. |
Use ATTRIBUTES for bulk matching and parameter pairs for targeted lookups. Provide COLUMN_NAMES only when a reduced result set is needed.
At least one matching condition is required. If both ATTRIBUTES and parameter pairs are empty, the action may return no data.
GetObjectsOfObjectGroup
Retrieves all objects from the specified object group (OBJECT_GROUP_NAME) and stores the result in a DataContext within RESULT_VAR.
Optionally, use COLUMN_NAMES to limit the fetched data to specific columns if provided, only those fields are retrieved and detailed object metadata is excluded.
Attribute, group, and location metadata in this block are immutable and cannot be modified.
⚙️ Parameters
| Parameter | Mode | Type | Description |
|---|---|---|---|
| OBJECT_GROUP_NAME | Static/Dynamic | String | The unique name or ID of the object group to fetch data from |
| COLUMN_NAMES | Static/Dynamic | List<string> | Optional list of column names to fetch; retrieves all data if left empty |
| RESULT_VAR | Static | String | Variable to store the resulting data as a DataContext |
Use this block when you need to retrieve full datasets tied to a specific group without filtering by attributes.
GetObjectsOfStorage
Retrieves all objects located in a specified storage location and stores them in a DataContext within RESULT_VAR.
Storage location is defined using a combination of STORAGE_NUMBER, STORAGE_LOCATION, STORAGE_AREA, and STORAGE_BIN.
If COLUMN_NAMES is provided, only those columns will be fetched full object metadata will be skipped.
Attribute, group, and location metadata in this block are immutable and cannot be modified.
⚙️ Parameters
| Parameter | Mode | Type | Description |
|---|---|---|---|
| STORAGE_NUMBER | Static | Int | Identifier for the storage number |
| STORAGE_LOCATION | Static | Int | Identifier for the specific location within the storage |
| STORAGE_AREA | Static | Int | Identifier for the area inside the storage location |
| STORAGE_BIN | Static | Int | Identifier for the bin inside the storage area |
| OBJECT_GROUP_NAME | OBJECT_GROUP_NAME | String | The unique name or ID of the object group to fetch data from |
| COLUMN_NAMES | Static/Dynamic | List<string> | Optional list of columns to retrieve; fetches all data if left unspecified |
| RESULT_VAR | Static | String | Variable to store the fetched objects as a DataContext |
Use this block for warehouse-style data retrieval where object grouping is based on physical storage parameters.
GetStorageAreas
Returns all defined storage Areas, with their internal ID and parent Location ID.
⚙️ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| outputVar | Static | String | Variable to store the list of Areas (ID, name, parent Location ID). |
GetStorageBins
Returns all defined storage Bins, with their internal ID and parent Area ID.
⚙️ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| outputVar | Static | String | Variable to store the list of Bins (ID, name, parent Area ID). |
GetStorageLocations
Returns all defined storage Locations, each with its internal ID and parent Storage Number ID.
⚙️ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| outputVar | Static | String | Variable to store the list of Locations (ID, name, parent Number ID). |
GetStorageNumbers
Fetches all defined top-level Storage Numbers.
⚙️ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| outputVar | Static | String | Variable to store the list of Storage Numbers (ID + name). |
❌ No hierarchical data is returned (i.e., no children like Locations or Areas).
JsonPath
Executes a JSONPath query on the JSON string stored in SOURCE_VAR and stores the result in RESULT_VAR as a String.
JsonPath allows querying and extracting specific parts of a JSON structure using path-like syntax.
⚙️ Parameters
| Parameter | Mode | Type | Description |
|---|---|---|---|
| JSON_PATH | Static/Dynamic | String | The JsonPath expression used to extract data |
| SOURCE_VAR | Static/Dynamic | String | The variable containing the JSON string to query |
| RESULT_VAR | Static | String | Variable to store the result of the JsonPath query |
Use $ as the root element in your JSON_PATH. For example: $.name retrieves "name" fields in the JSON.
JsonPathValue (V1)
- Executes a
JSONPathquery on the JSON string inSOURCE_VARand casts the result into the specifiedRESULT_TYPE, storing it inRESULT_VAR. - If the
JsonPathexpression yields no result, an empty string is returned by default.
Supported RESULT_TYPE values:
- Primitive types:
int,long,double,decimal,bool,guid,date,string - Complex types:
list:List<object>object:Dictionary<string, object>objectlist:List<Dictionary<string, object>>
⚙️ Parameters
| Parameter | Mode | Type | Description |
|---|---|---|---|
| JSON_PATH | Static/Dynamic | String | The JsonPath query to extract data |
| SOURCE_VAR | Static/Dynamic | String | Variable containing the JSON string |
| RESULT_TYPE | Static/Dynamic | String | The desired output type |
| RESULT_VAR | Static | String | Variable to store the casted result |
Use $ as the root element in your JSON_PATH. For example: $.name retrieves "name" fields in the JSON.
This block is ideal when type safety or structured deserialization is needed for downstream processing.
JsonPathValue (V2)
The JsonPathValue (V2) block extracts data from a JSON structure using a specified JsonPath expression and stores the result in a workflow variable with a defined type.
Compared to the earlier version, this block introduces improved type handling—automatically converting the extracted value into the specified result type. It also handles missing or unmatched paths gracefully by returning an empty string (""), instead of throwing errors.
Functionality
- Input: JsonPath expression and source variable containing a JSON structure.
- Process:
- Executes the JsonPath query on the JSON data in
SOURCE_VAR. - Converts the result into the specified
RESULT_TYPE.
- Executes the JsonPath query on the JSON data in
- Output: The converted value is stored in
RESULT_VAR.
If the JsonPath expression doesn't match any value, the result is always an empty string, regardless of the expected type.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| JSON_PATH | Dynamic | String | JsonPath expression to execute. |
| SOURCE_VAR | Dynamic | String | Variable containing the input JSON data. |
| RESULT_TYPE | Dynamic | String | Type to convert the result into. Allowed types: int, double, long, bool, decimal, guid, date, string, list, object, objectlist. |
| RESULT_VAR | Static | String | Name of the variable where the result will be stored. |
Result Type Notes
list: List of objects (List<object>)object: Dictionary (Dictionary<string, object>)objectlist: List of dictionaries (List<Dictionary<string, object>>)guid,date,bool,int, etc.: Converted into their respective primitive types
JsonSerializer (V1)
- Converts the object stored in
SOURCE_VARinto a JSON string and saves it inRESULT_VAR. - If
INTENDEDis set to true, the serialization will respect any intended formatting or serialization rules configured in the system.
⚙️ Parameters
| Parameter | Mode | Type | Description |
|---|---|---|---|
| SOURCE_VAR | Static/Dynamic | Object | The source object to serialize |
| INTENDED | Static/Dynamic | Bool | If true, applies intended/custom serialization behavior |
| RESULT_VAR | Static | String | Variable to store the resulting JSON string |
Use this block when you need to convert complex data structures into JSON for storage, transmission, or logging.
JsonSerializer (V2)
The JsonSerializer (V2) block converts a given object or data structure into a JSON string and stores it in a workflow variable. This version improves upon previous implementations by automatically converting all DateTime fields into UTC format, ensuring consistency across systems and time zones.
This block is especially useful when integrating with external APIs, storing structured logs, or preparing payloads for custom UI or outbound messages.
Functionality
- Input: Any object (e.g., dictionary, list, or data context) from a workflow variable.
- Process: Serializes the object into a JSON string. If the object includes
DateTimefields, they are auto-converted to UTC format. - Output: The resulting JSON string is saved to the target variable.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| SOURCE_VAR | Static/Dynamic | Object | The input object to serialize. This can be a dictionary, list, or any valid object stored in a variable. |
| INTENDED | Static/Dynamic | Bool | If true, applies intended/custom serialization behavior |
| RESULT_VAR | Static | String | Variable name where the resulting JSON string will be stored. |
Ideal for converting structured data into JSON format before sending it to APIs or saving into logs, files, or databases.
LoadCsv (V1)
The LoadCsv action parses CSV content (provided as bytes) into structured workflow data. It supports complex CSV formats by allowing fine-grained control over delimiter detection, encoding, header handling, quoting rules, row/column filtering, trimming, and optional type conversion.
Use this action when you receive a CSV as a file/byte array and need it as structured workflow data for filtering, mapping, inserts, exports, or dynamic table generation (for example, feeding List<Dictionary<string, object>> into Word table placeholders).
Functionality
Input:
- CSV file content as
List<Byte>(DATA) - Parsing configuration (delimiter, encoding, quote behavior, header options, row/column selection)
- Optional conversion configuration (locales, decimal/group separators, schema override, date formats, percent mode)
Process:
- Decodes the CSV bytes using the selected
ENCODING. - Determines the delimiter:
- Uses
DELIMITERif explicitly set, otherwise auto-detects (if supported by configuration).
- Uses
- Extracts rows according to:
HEADER_ROW,START_ROW,END_ROWSKIP_ROWSSKIP_EMPTY_ROWS
- Determines column names:
- Uses header row when
HAS_HEADER = true - Otherwise uses
COLUMN_HEADERS(if provided) or generated column names.
- Uses header row when
- Applies column filters:
START_COLUMN,END_COLUMNSKIP_COLUMNS
- Parses quoted fields using:
QUOTE_CHARACTER,IGNORE_QUOTES,ESCAPE_MODE,ALLOW_MULTILINE_FIELDS
- Normalizes cell values:
TRIM_VALUES- Empty cells return an empty string
"".
- Optional null handling rules (see notes)
- Optionally converts types if
CONVERT_TYPES = trueusing locale + schema rules.
Output:
- Stores parsed rows as
List<Dictionary<string, object>>inRESULT_VAR. - Each dictionary represents one row:
- Keys = column headers
- Values = object (never null; empty cells become
"")
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| DATA | Static/Dynamic | List<Byte> | CSV file content as bytes. |
| DELIMITER | Static/Dynamic | String | Field delimiter. Typical values: , ; \t |. |
| ENCODING | Static/Dynamic | String | Text encoding (e.g., UTF-8, ISO-8859-1, Windows-1252). |
| FILE_LOCALE | Static/Dynamic | String | File locale for parsing decisions (often auto). e.g., en-US, fr-FR, de-DE. |
| NUMBER_LOCALE | Static/Dynamic | String | Locale used for numeric parsing/conversion. |
| HAS_HEADER | Static/Dynamic | Bool | If true, uses HEADER_ROW as column names. |
| HEADER_ROW | Static/Dynamic | Int | 1-based row index containing headers (used when HAS_HEADER = true). |
| START_ROW | Static/Dynamic | Int | 1-based row index to start reading data from (after decoding). |
| END_ROW | Static/Dynamic | Int | 1-based row index to stop reading at. |
| SKIP_ROWS | Static/Dynamic | List<Int> | Specific row indices to skip. |
| COLUMN_HEADERS | Static/Dynamic | List<String> | Manual headers to use when HAS_HEADER = false (or to override). |
| START_COLUMN | Static/Dynamic | Int | 1-based index of first column to include. |
| END_COLUMN | Static/Dynamic | Int | 1-based index of last column to include. |
| SKIP_COLUMNS | Static/Dynamic | List<Int> | Column indices to exclude. |
| QUOTE_CHARACTER | Static/Dynamic | String | Quote character, typically ". |
| IGNORE_QUOTES | Static/Dynamic | Bool | If true, treats quote characters as normal text. |
| ESCAPE_MODE | Static/Dynamic | String | How quotes are escaped. Typical: double_quote ("" inside a quoted value). |
| ALLOW_MULTILINE_FIELDS | Static/Dynamic | Bool | If true, allows line breaks inside quoted fields. |
| COMMENT_PREFIX | Static/Dynamic | String | Lines starting with this prefix are treated as comments and skipped. |
| SKIP_EMPTY_ROWS | Static/Dynamic | Bool | If true, ignores rows where all cells are empty. |
| TRIM_VALUES | Static/Dynamic | Bool | If true, trims whitespace around values. |
| NULL_VALUES | Static/Dynamic | List<String> | Tokens that should be interpreted as null. |
| EMPTY_STRING_AS_NULL | Static/Dynamic | Bool | If true, empty strings are treated as null during conversion. |
| DECIMAL_SEPARATOR | Static/Dynamic | String | Decimal separator override (e.g., . or ,). |
| GROUP_SEPARATOR | Static/Dynamic | String | Thousands separator override (e.g., , or . or space). |
| PERCENT_MODE | Static/Dynamic | String | How to treat percent values (e.g., as_number). |
| DATE_TIME_FORMATS | Static/Dynamic | List<String> | Allowed date/time formats for conversion. |
| DAY_FIRST | Static/Dynamic | Bool | If true, interprets ambiguous dates as day-first. |
| SCHEMA_OVERRIDE | Static/Dynamic | Dictionary<String, String> | Column type overrides (e.g., {"Amount":"decimal","CreatedAt":"datetime"}). |
| CONVERT_TYPES | Static/Dynamic | Bool | If true, attempts to convert strings to typed objects. |
| RESULT_VAR | Static | String | Workflow variable name to store the parsed output. |
Important behavior and pitfalls
- Header mismatch: If
HAS_HEADER = falsebutCOLUMN_HEADERSis missing or wrong length, your dictionaries may have generated or misaligned column keys. - Delimiter issues: A wrong delimiter will shift columns and silently corrupt parsing output. If you expect semicolon CSVs (common in EU exports), set
DELIMITER = ;. - Encoding issues: If special characters (ä, ö, €) appear broken, switch encoding to Windows-1252 or ISO-8859-1.
- Quoted multiline fields: If your CSV contains line breaks inside quotes,
ALLOW_MULTILINE_FIELDSmust be enabled. - Type conversion surprises: With
CONVERT_TYPES = true, parsing depends heavily on locale, separators, and schema overrides; explicitly setSCHEMA_OVERRIDEfor high-stakes columns (amounts, dates).
LoadExcelSheet (v1)
The LoadExcelSheet block parses an Excel file (provided as a byte array) and converts it into a list of dictionaries for processing.
⚙️ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| DATA | Static/Dynamic | Byte[] | The Excel file content (eg: retrieved via LoadTemporaryFile action). |
| RESULT_VAR | Static | String | Variable to store the parsed Excel data as a list of dictionaries. |
LoadTemporaryFile
The LoadTemporaryFile block retrieves a file from database storage using a given file ID.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| FILE_ID | Static/Dynamic | Int | The numeric ID of the file to retrieve. |
| RESULT_VAR | Static | String | Variable to store the loaded file as a byte array. |
Log (V1)
The Log action writes a message into the system log using a specified log level. It is primarily used for debugging, monitoring workflow execution, and tracing runtime values.
The action always returns true.
Use this action to output variable values, execution checkpoints, or diagnostic information during workflow processing.
Functionality
Input:
- A log message expression (
MESSAGE) - A log level (
LEVEL, optional)
Process:
- Evaluates the
MESSAGEexpression. - Attempts to resolve the specified
LEVEL. - Writes the message to the system log using the resolved level.
- If the level is missing or invalid, defaults to
FINE.
Output:
- The evaluated message is written to the system log.
- Always returns true.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| MESSAGE | Dynamic | String | The message or expression to log. Supports dynamic workflow expressions. |
| LEVEL | Static | String | Log level. Supported values: SEVERE, ERROR, WARNING, INFO, CONFIG, FINE, FINER, FINEST. Defaults to FINE if invalid or not set. |
Log Levels
| Level | Purpose |
|---|---|
| SEVERE | Critical system failures. |
| ERROR | Execution errors affecting workflow behavior. |
| WARNING | Non-critical issues or unexpected conditions. |
| INFO | General operational information. |
| CONFIG | Configuration-related details. |
| FINE | Standard debug-level logging (default). |
| FINER | More detailed debug information. |
| FINEST | Highly detailed trace output. |
Log (V2)
The Log action writes a message into the system log using a specified log level. It is primarily used for debugging, monitoring workflow execution, and tracing runtime values.
The action always returns true.
Use this action to output variable values, execution checkpoints, or diagnostic information during workflow processing.
Functionality
Input:
- A log message expression (
MESSAGE) - A log level (
LEVEL, optional)
Process:
- Evaluates the
MESSAGEexpression. - Attempts to resolve the specified
LEVEL. - Writes the message to the system log using the resolved level.
- If the level is missing or invalid, defaults to
FINE.
Output:
- The evaluated message is written to the system log.
- Always returns true.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| MESSAGE | Dynamic | String | The message or expression to log. Supports dynamic workflow expressions. |
| LEVEL | Static | String | Log level. Supported values: SEVERE, ERROR, WARNING, INFO, CONFIG, FINE, FINER, FINEST. Defaults to FINE if invalid or not set. |
Log Levels
| Level | Purpose |
|---|---|
| SEVERE | Critical system failures. |
| ERROR | Execution errors affecting workflow behavior. |
| WARNING | Non-critical issues or unexpected conditions. |
| INFO | General operational information. |
| CONFIG | Configuration-related details. |
| FINE | Standard debug-level logging (default). |
| FINER | More detailed debug information. |
| FINEST | Highly detailed trace output. |
Log (V3)
The Log (V3) action writes a message into the system log with a configurable log level and optional structured metadata. It extends previous versions by allowing a process status and an error identifier to be attached to the log entry.
The action always returns true.
Use this version when logs must include structured status information (e.g., workflow state transitions) or standardized error identifiers for monitoring and reporting.
Functionality
Input:
- A log message expression (
MESSAGE) - A log level (
LEVEL, optional) - Optional process status (
PROCESS_STATUS) - Optional error identifier (
ERROR_IDENTIFIER)
Process:
- Evaluates the
MESSAGEexpression at runtime. - Resolves the provided
LEVEL. - Writes the log entry with the evaluated message.
- If defined:
- Adds
PROCESS_STATUSto the log entry. - Adds
ERROR_IDENTIFIERto the log entry.
- Adds
- If
LEVELis not set or not resolvable, defaults toFINE.
Output:
- A structured log entry is written to the system log.
- Always returns true.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| MESSAGE | Dynamic | String | The message or expression to log. Supports dynamic workflow expressions. |
| LEVEL | Static | String | Log level. Supported values: SEVERE, ERROR, WARNING, INFO, CONFIG, FINE, FINER, FINEST. Defaults to FINE if invalid or not provided. |
| PROCESS_STATUS | Static | String | Optional workflow or process status (e.g., Started, Completed, Failed). |
| ERROR_IDENTIFIER | Static | String | Optional identifier used to categorize or track specific error conditions.(Predefined error identifiers) |
Log Levels
| Level | Purpose |
|---|---|
| SEVERE | Critical system-level failures. |
| ERROR | Execution errors affecting workflow behavior. |
| WARNING | Unexpected conditions that do not stop execution. |
| INFO | General operational information. |
| CONFIG | Configuration-related details. |
| FINE | Default debug-level logging. |
| FINER | Detailed debugging output. |
| FINEST | Highly detailed trace-level logging. |
Usage notes
- Use
PROCESS_STATUSto reflect workflow lifecycle events. - Use
ERROR_IDENTIFIERto standardize error tracking across workflows. - Structured logging is recommended for workflows that integrate with monitoring or alerting systems.
- If structured metadata is not required, earlier
Logversions may be sufficient.
An invalid or missing log level does not fail the action - it falls back to FINE.
Logging sensitive data (e.g., credentials, tokens, personal data) may create security risks.
LookUpAttribute
Searches for an object within the specified OBJECT_GROUP_NAME by matching either the given ATTRIBUTES dictionary or one or two parameter name-value pairs.
Upon finding a matching object, it retrieves the value of the specified COLUMN_NAME attribute and stores it in RESULT_VAR.
If no matching object is found:
- Returns
DEFAULT_VALUEinRESULT_VARifRETURN_DEFAULTis true. - Otherwise, the action returns false.
Either ATTRIBUTES or at least one parameter name-value pair must be provided for matching.
⚙️ Parameters
| Parameter | Mode | Type | Description |
|---|---|---|---|
| OBJECT_GROUP_NAME | Static/Dynamic | String | Name of the object group to search in |
| ATTRIBUTES | Static/Dynamic | Dictionary<String,Object> | Attributes dictionary to match |
| PARAM_NAME1 | Static/Dynamic | String | Name of first parameter to match |
| PARAM_VALUE1 | Static/Dynamic | Object | Value of first parameter |
| PARAM_NAME2 | Static/Dynamic | String | Name of second parameter to match (optional) |
| PARAM_VALUE2 | Static/Dynamic | Object | Value of second parameter (optional) |
| COLUMN_NAME | Static/Dynamic | String | Name of the attribute/column whose value to retrieve |
| RETURN_DEFAULT | Static/Dynamic | Bool | Whether to return DEFAULT_VALUE if no match found |
| DEFAULT_VALUE | Static/Dynamic | Object | Value to return if no match and fallback enabled |
| RESULT_VAR | Static | String | Variable to store the retrieved attribute value |
LookUpAttributes
Searches for an object in the specified OBJECT_GROUP_NAME by matching either an ATTRIBUTES dictionary or parameter pairs.
If a matching object is found:
- All attributes are returned by default.
- If
COLUMN_NAMESis specified, only the listed attributes are included.
If no match is found:
- The action returns
false, unlessRETURN_DEFAULTis set to true, in which caseDEFAULT_VALUE(a dictionary) is assigned toRESULT_VAR.
⚙️ Parameters
| Parameter | Mode | Type | Description |
|---|---|---|---|
| OBJECT_GROUP_NAME | Static/Dynamic | String | Name of the object group to search within |
| ATTRIBUTES | Static/Dynamic | Dictionary<String,Object> | Attributes to match against |
| PARAM_NAME1 | Static/Dynamic | String | First parameter name for matching |
| PARAM_VALUE1 | Static/Dynamic | Object | Value of first parameter |
| PARAM_NAME2 | Static/Dynamic | String | Second parameter name for matching (optional) |
| PARAM_VALUE2 | Static/Dynamic | Object | Value of second parameter (optional) |
| COLUMN_NAMES | Static/Dynamic | List<String> | List of attribute names to return (optional) |
| RETURN_DEFAULT | Static/Dynamic | Bool | Whether to return DEFAULT_VALUE if no match is found |
| DEFAULT_VALUE | Static/Dynamic | Dictionary<String,Object> | Default dictionary to return if no match and fallback enabled |
| RESULT_VAR | Static | String | Variable to store the resulting dictionary |
Use this when you need a full set or a subset of an object’s attributes based on flexible matching logic.
MatchAndSortList (V1)
The MatchAndSortList (V1) block filters and sorts a list of dictionaries by evaluating key-value matches and applying optional sorting rules.
Functionality
- Input: A list of dictionaries (
INPUT_LIST) along with filter fields and optional sorting parameters. - Process:
- Filters the list based on provided key-value pairs in
FILTER_FIELDS. - Sorts the filtered results according to the field in
SORT_BY, with optional descending order.
- Filters the list based on provided key-value pairs in
- Output: Stores the filtered and sorted list in the specified
RESULT_VAR.
Return:
true→ if filtering and sorting were successful.false→ if the list could not be processed (e.g., invalid structure).
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
INPUT_LIST | Static/Dynamic | List<Dictionary<string,object>> | The input list of dictionaries to filter and sort. |
FILTER_FIELDS | Static/Dynamic | Dictionary<string,object> | Key-value pairs used to filter the input list. |
SORT_BY | Static | String | Field name to sort the results by. |
SORT_DESCENDING | Static | Bool | If true, sorts the results in descending order; otherwise, ascending. |
RESULT_VAR | Static | String | Variable name to store the resulting filtered and sorted list. |
- Optional Filtering: Leave
FILTER_FIELDSempty if only sorting is required. - Sorting Direction: Use
SORT_DESCENDING = truefor descending order; default is ascending. - Multiple Filters: You can specify several key-value pairs in
FILTER_FIELDS; only items matching all criteria will remain. - Graceful Fallback: If no entries match the filter,
RESULT_VARwill contain an empty list.
MQTTChallengeResponse (V1)
The MQTTChallengeResponse (V1) block publishes a request message to a specified MQTT topic and waits for a corresponding response on another topic.
Functionality
- Input: MQTT client configuration, request topic, response topic, and a message payload.
- Process:
- Publishes the request message on the defined
REQUEST_TOPIC. - Subscribes to the
RESPONSE_TOPICand waits for a reply.
- Publishes the request message on the defined
- Output: Stores the response payload in the specified
RESULT_VAR.
Return:
true→ if a valid response was received within the timeout period.false→ if no response was received or an error occurred.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
MQTT_CLIENT | Static/Dynamic | String | Identifier of the MQTT client configuration to use. |
REQUEST_TOPIC | Static/Dynamic | String | MQTT topic to which the request message will be published. |
RESPONSE_TOPIC | Static/Dynamic | String | MQTT topic on which to listen for the response. |
QOS_LEVEL | Static/Dynamic | Int | Quality of Service level for publishing the message (0, 1, or 2). |
REQUEST_PAYLOAD | Static/Dynamic | String | The payload of the request message (typically JSON or plain text). |
TIMEOUT_MILLIS | StaStatic/Dynamictic | Int | Maximum time (in milliseconds) to wait for a response. |
RESULT_VAR | Static/Dynamic | String | Variable name to store the received response payload. |
-
Timeout Handling: Always set a reasonable
TIMEOUT_MILLISto avoid long workflow delays if no response is received. -
QoS Selection:
0→ At most once (no acknowledgment).1→ At least once (acknowledged).2→ Exactly once (highest reliability, more overhead).
-
Best Use Cases: Challenge–response authentication, IoT device handshakes, or workflows requiring synchronous confirmation.
-
Error Handling: If the timeout expires with no response, ensure your workflow accounts for the
falsereturn value.
MQTTPublisher
Publishes a message to an MQTT broker using the specified client configuration.
You can define the target topic, QoS level, and payload.
If AWAIT_RESPONSE is enabled, the block will wait for a broker response up to the defined TIMEOUT_MILLIS.
Supports all MQTT QoS levels:
0: At most once1: At least once2: Exactly once
⚙️ Parameters
| Parameter | Mode | Type | Description |
|---|---|---|---|
| MQTT_CLIENT | Static/Dynamic | String | The identifier of the MQTT client configuration to use |
| TOPIC | Static/Dynamic | String | The MQTT topic to which the message should be published |
| QOS_LEVEL | Static/Dynamic | Int | Quality of Service level (0, 1, or 2) |
| PAYLOAD | Static/Dynamic | String | The message payload to publish (typically in JSON or plain text) |
| AWAIT_RESPONSE | Static/Dynamic | Bool | Whether to wait for a response from the broker after publishing |
| TIMEOUT_MILLIS | Static/Dynamic | Int | Timeout (in milliseconds) to wait if AWAIT_RESPONSE is true |
Use this block to send messages to IoT devices, event buses, or cloud services via MQTT.
PublishRabbitMQ (V1)
The PublishRabbitMQ block sends a message to a specified RabbitMQ exchange using the provided host, credentials, exchange name, and routing key.
Functionality
- Input: RabbitMQ connection details, target exchange, routing key, and the message to send.
- Process:
- Connects to the RabbitMQ server using the host, port, username, and password.
- Publishes the given message to the specified exchange and routing key.
- Output: Sets a status flag (
trueorfalse) in theIS_SUCCESSvariable indicating whether the operation succeeded.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| RABBITMQ_HOST | Static/Dynamic | String | Hostname or IP address of the RabbitMQ server. |
| RABBITMQ_PORT | Static/Dynamic | Int | Port number for the RabbitMQ connection (typically 5672). |
| USERNAME | Static/Dynamic | String | Username for authenticating with RabbitMQ. |
| PASSWORD | Static/Dynamic | String | Password for authenticating with RabbitMQ. |
| EXCHANGE | Static/Dynamic | String | Name of the exchange where the message will be published. |
| ROUTING_KEY | Static/Dynamic | String | Routing key used to deliver the message to a specific queue. |
| MESSAGE | Static/Dynamic | String | The message body to send (must be a JSON string or plain text). |
| IS_SUCCESS | Static | String | Workflow variable name where the success result (true/false) will be stored. |
Ensure the exchange exists and is correctly configured on the RabbitMQ server. This block does not create exchanges or queues.
Keep credentials secure and avoid logging them directly in workflows.
ReadObject
Retrieves object details by OBJECT_ID and loads them into the current tag context.
You can optionally specify:
OBJECT_GROUP_NAMEto scope the lookup.COLUMN_NAMESto limit the retrieved fields.
The retrieved data is stored in the specified RESULT_VAR.
⚙️ Parameters
| Parameter | Mode | Type | Description |
|---|---|---|---|
| OBJECT_ID | Static/Dynamic | Guid | Unique identifier of the object to retrieve |
| OBJECT_GROUP_NAME | Static/Dynamic | String | (Optional) Object group to which the object belongs |
| COLUMN_NAMES | Static/Dynamic | List<String> | (Optional) List of fields to retrieve. If not set, all fields are returned |
| RESULT_VAR | Static | String | Name of the variable where the object data will be stored |
Use this block when you need specific object attributes for decision-making or transformation later in the workflow.
ReadObjectGroup
Retrieves metadata and configuration details of a specified object group by its unique name or ID.
The result is stored in a DataContext under the variable specified by RESULT_VAR.
This is useful for loading group-level configurations, attributes, or mappings that may guide further processing logic.
⚙️ Parameters
| Parameter | Mode | Type | Description |
|---|---|---|---|
| OBJECT_GROUP_NAME | Static/Dynamic | String | Unique name or ID of the object group to be fetched |
| RESULT_VAR | Static | String | Name of the variable where the object group details will be stored |
RegexMatch (V1)
The RegexMatch block checks whether a given input string matches a specified regular expression (RegEx) pattern. Optionally, it can also capture and return matching results, including full matches and individual capture groups.
This block is ideal for string validation, pattern extraction, and conditional logic based on formatted inputs (e.g., IDs, barcodes, user input, etc.).
Functionality
Input: A target string and a RegEx pattern.
Process:
- Applies the
RegExpattern to the input string. - Evaluates the
Truepath if the pattern matches, or theFalsepath otherwise. - If
CATCH_RESULTSis enabled, returns:RESULTS[0]→ Full matchRESULTS[1]...RESULTS[n]→ Each capture group from the pattern
Output: A list of matched strings, if capture is enabled.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
STRING | Static/Dynamic | String | The input text to be matched. |
PATTERN | Static/Dynamic | String | The regular expression pattern to test against the input string. |
CATCH_RESULTS | Static/Dynamic | Bool | If true, matched results are stored in the RESULTS variable. |
RESULTS | Static | List<string> | Variable where match results will be stored. Index 0 = full match, 1…n = capture groups. |
Use capture groups in your RegEx (e.g., (ID):(\d+)) to extract specific portions of the matched text.
RemoveJobTags (V1)
The RemoveJobTags action removes one or more tags from the current workflow job. Tags are used for categorization, filtering, and monitoring, and this action updates that metadata accordingly.
This action does not affect workflow logic or execution flow.
Functionality
Input:
- A list of tags (
TAGS)
Process:
- Reads the provided list of tag strings.
- Removes matching tags from the current workflow job.
- Tags not present on the instance are ignored.
Output:
- The workflow job is updated with the specified tags removed.
- Execution continues normally.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| TAGS | Static | List<String> | One or more tags to remove from the current workflow job. |
- Use this action when:
- A workflow changes state and certain classification tags are no longer valid.
- Temporary or transitional tags need to be cleared.
- Tag names must match exactly to be removed.
- Removing tags helps maintain accurate filtering and reporting in monitoring views.
Removing a tag that does not exist has no effect.
Tags are metadata only and do not influence workflow behavior unless referenced elsewhere.
ReplaceWordPlaceholders (V1)
The ReplaceWordPlaceholders (V1) action processes a Word document(.docx) template by replacing text placeholders and optionally generating and inserting up to 5 dynamic tables from structured data. The processed document is stored as a byte list in a workflow variable for further use (for example, export or upload).
Functionality
Input:
- A Word template with placeholders as
List<Byte>(WORD_FILE) - A dictionary of text replacements (
Dictionary<String, String>) - Up to 5 table placeholders + table data pairs (
List<Dictionary<String, Object>>) - A target workflow variable name to store the final document bytes (
RESULT_VAR)
Process:
- Loads the Word file from
WORD_TEMPLATE. - Replaces all text placeholders in the form
{{key}}or{{key2}}using entries fromREPLACEMENTS{key: "value",key2:"value2"}. - For each table placeholder defined (
TABLEn_PLACEHOLDER):- Finds
{{TABLE:<placeholder>}}in the template. - Uses the corresponding
TABLEn_DATA(List<Dictionary<string, object>>) to build a table:- Creates a header row from the first dictionary keys in the list.
- Creates rows from each dictionary entry.
- Applies borders to all cells.
- Finds
- Serializes the processed Word document back into
List<Byte>.
Output:
- Stores the processed Word document bytes in
RESULT_VAR.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| WORD_TEMPLATE | Static/Dynamic | List<Byte> (File) | Word document template content as bytes (.docx). |
| REPLACEMENTS | Static/Dynamic | Dictionary<String, String> | Key/value pairs used for text replacement. Keys map to placeholders using {{key}}. |
| TABLE1_PLACEHOLDER | Static/Dynamic | String | Placeholder name for table 1 (used in {{TABLE:<name>}}). Example: invoice. |
| TABLE1_DATA | Static/Dynamic | List<Dictionary<String, Object>> | Data used to generate Table 1 (headers from keys, rows from values). |
| TABLE2_PLACEHOLDER | Static/Dynamic | String | Placeholder name for table 2. Leave empty if unused. |
| TABLE2_DATA | Static/Dynamic | List<Dictionary<String, Object>> | Data used to generate Table 2. |
| TABLE3_PLACEHOLDER | Static/Dynamic | String | Placeholder name for table 3. Leave empty if unused. |
| TABLE3_DATA | Static/Dynamic | List<Dictionary<String, Object>> | Data used to generate table 3. |
| TABLE4_PLACEHOLDER | Static/Dynamic | String | Placeholder name for table 4. Leave empty if unused. |
| TABLE4_DATA | Static/Dynamic | List<Dictionary<String, Object>> | Data used to generate table 4. |
| TABLE5_PLACEHOLDER | Static/Dynamic | String | Placeholder name for table 5. Leave empty if unused. |
| TABLE5_DATA | Static/Dynamic | List<Dictionary<String, Object>> | Data used to generate table 5. |
| RESULT_VAR | Static | String | Workflow variable name that will store the finalized Word document as List<Byte>. |
Placeholder formats
-
Text placeholders:
{{key}}
Example:{{CustomerName}}gets replaced byREPLACEMENTS["CustomerName"]. -
Table placeholders:
{{TABLE:placeholder}}
Example:{{TABLE:invoice}}is replaced by a generated table usingTABLE1_DATAwhenTABLE1_PLACEHOLDER = "invoice".
-
Text replacement source: Only keys in
REPLACEMENTSare used. Entries absent from the dictionary remain unchanged. -
Dynamic table creation:
- Table headers are created from the first dictionary keys in the list.
- Each dictionary == one row
- Values are written into rows in the same column order as the header keys.
- All cells are bordered automatically.
- If the second or subsequent dictionary has a different column name than the first, that row entry will not be added to the table.
SaveAttachment (V1)
The SaveAttachment action creates or updates an attachment for a specific object. The file is stored immediately and becomes available in the object’s attachment list.
Use this action when a workflow generates or modifies a file (for example, a processed Word document) and needs to store it as an attachment on an object.
Functionality
Input:
- An object identifier (
OBJECT_ID) - File name and extension
- Binary file content (
BYTE_DATA) - Optional overwrite behavior
- A result variable name
Process:
- Locates the object using
OBJECT_ID. - Creates a new attachment with the specified
FILE_NAMEandFILE_EXTENSION. - If an attachment with the same name already exists:
- Replaces it if
OVERWRITE = true - Fails if
OVERWRITE = false
- Replaces it if
- Stores the provided
BYTE_DATAas the attachment content.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| OBJECT_ID | Static/Dynamic | Guid | Unique identifier of the object to which the attachment will be saved. |
| FILE_EXTENTSION | Static/Dynamic | String | File extension of the attachment (e.g., docx, pdf, png). |
| FILE_NAME | Static/Dynamic | String | Name of the attachment file to create or update. |
| BYTE_DATA | Static/Dynamic | List<Byte> | Binary content of the file to be stored. |
| OVERWRITE | Static/Dynamic | Bool | If true, replaces an existing attachment with the same name. If false, saving fails when the file already exists. |
| RESULT_VAR | Static | String | Workflow variable name used to store the result of the operation. |
BYTE_DATAmust contain valid file content matching the specified file extension.- The file name should include the extension.
- When generating files dynamically (e.g., via
ReplaceWordPlaceholders), use the resulting byte list directly asBYTE_DATA. - Overwrite behavior should be explicitly controlled to prevent unintended file replacement.
Common failure causes
OBJECT_IDdoes not exist.BYTE_DATAis null or empty.- An attachment with the same name already exists and
OVERWRITEis set to false. - Invalid or unsupported file extension.
- Insufficient permissions to modify object attachments.
SendEmail (V1)
Sends an email to one or more recipients.
By default, the email uses the credentials configured in the client profile. To override them, disable the USE_CLIENT_CREDENTIALS flag and provide custom server settings.
- Multiple recipients can be separated using semicolons (
;). - SSL encryption is optional and can be enabled via the
ENABLE_SSLflag.
⚙️ Parameters
| Parameter | Mode | Type | Description |
|---|---|---|---|
| USE_CLIENT_CREDENTIALS | Static/Dynamic | Bool | If true, uses credentials from the client configuration |
| EMAIL_SERVER | Static/Dynamic | String | SMTP server address (required if not using client credentials) |
| EMAIL_SERVER_PORT | Static/Dynamic | Int | SMTP port number |
| ENABLE_SSL | Static/Dynamic | Bool | Whether to use SSL encryption for the connection |
| EMAIL_SERVER_USER | Static/Dynamic | String | SMTP username (used if USE_CLIENT_CREDENTIALS is false) |
| EMAIL_SERVER_PASSWORD | Static/Dynamic | String | SMTP password (used if USE_CLIENT_CREDENTIALS is false) |
| FROM_ADDRESS | Static/Dynamic | String | Sender's email address |
| RECIPIENTS | Static/Dynamic | String | Semicolon-separated list of recipient email addresses |
| SUBJECT | Static/Dynamic | String | Subject line of the email |
| BODY | Static/Dynamic | String | Content of the email (supports plain text or HTML) |
For secure email delivery, always use SSL with authenticated credentials unless you're in a trusted network environment.
SendEmail (V2)
The SendEmail (V2) action sends an email using a configurable SMTP server. It supports multiple recipients and up to 5 attachments, each defined by name, MIME type, and binary content.
If an attachment name is provided, both MIME type and file content are required.
Functionality
Input:
- SMTP configuration (server, port, SSL, authentication)
- Sender address
- One or more recipients (separated by
;) - Subject and body
- Optional attachments (up to 5)
Process:
- Connects to the specified SMTP server using:
- Either client credentials (if enabled), or
- Explicit username/password authentication.
- Builds the email message:
- Sets sender (
FROM_ADDRESS) - Splits recipients by
; - Applies subject and body
- Sets sender (
- For each attachment slot (1–5):
- If
ATTACHMENT_NAME_Xis provided:- Validates that
ATTACHMENT_TYPE_XandATTACHMENT_CONTENT_Xare also provided. - Attaches the file using the given MIME type and binary content.
- Validates that
- If
- Sends the email.
Output:
- Returns:
trueif the email is successfully sent.falseif sending fails (e.g., connection or validation error).
⚙ Parameters
SMTP Configuration
| Name | Mode | Type | Description |
|---|---|---|---|
| USE_CLIENT_CREDENTIALS | Static/Dynamic | Bool | If true, uses system/client credentials instead of explicit username/password. |
| EMAIL_SERVER | Static/Dynamic | String | SMTP server hostname or IP address. |
| EMAIL_SERVER_PORT | Static/Dynamic | Int | SMTP server port (e.g., 25, 465, 587). |
| ENABLE_SSL | Static/Dynamic | Bool | Enables SSL/TLS for secure SMTP connection. |
| EMAIL_SERVER_USER | Static/Dynamic | String | SMTP username (required if not using client credentials). |
| EMAIL_SERVER_PASSWORD | Static/Dynamic | String | SMTP password (required if not using client credentials). |
Email Content
| Name | Mode | Type | Description |
|---|---|---|---|
| FROM_ADDRESS | Static/Dynamic | String | Sender email address. |
| RECIPIENTS | Static/Dynamic | String | Recipient email addresses separated by ;. |
| SUBJECT | Static/Dynamic | String | Email subject line. |
| BODY | Static/Dynamic | String | Email body content (plain text or HTML depending on implementation). |
Attachments (1–5)
Each attachment slot follows the same structure:
| Name | Mode | Type | Description |
|---|---|---|---|
| ATTACHMENT_NAME_X | Static/Dynamic | String | File name (e.g., invoice.pdf). |
| ATTACHMENT_TYPE_X | Static/Dynamic | String | MIME type (e.g., application/pdf, application/vnd.openxmlformats-officedocument.wordprocessingml.document). |
| ATTACHMENT_CONTENT_X | Static/Dynamic | List<Byte> | Binary file content. |
- Multiple recipients must be separated using
;. - If
ATTACHMENT_NAME_Xis set:ATTACHMENT_TYPE_XandATTACHMENT_CONTENT_Xmust also be provided.
- If an attachment slot is unused, leave all three related fields empty.
- The attachment content must be valid binary data matching the specified MIME type.
Common failure causes
- SMTP server unreachable or incorrect port.
- SSL configuration mismatch.
- Invalid authentication credentials.
- Attachment name provided without MIME type or content.
- Invalid recipient format.
- Firewall restrictions blocking outbound SMTP traffic.
SetDictionary (V1)
The SetDictionary action defines up to five key-value entries on a target dictionary object.
Each KEYx maps to VALUEx. If KEYx is empty, no assignment is performed for that pair.
Functionality
Input:
- Target dictionary (
OBJECT) - Up to five key-value pairs (
KEY1/VALUE1...KEY5/VALUE5)
Process:
- Evaluates each key-value pair.
- Writes only pairs where
KEYxis not empty.
Output:
- Updates the provided dictionary object with the specified entries.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| OBJECT | Static/Dynamic | Dictionary<string, object> | Dictionary variable to update. |
| KEY1 | Static | String | Key name for first assignment. |
| VALUE1 | Static | String | Value assigned to KEY1. |
| KEY2 | Static | String | Key name for second assignment. |
| VALUE2 | Static | String | Value assigned to KEY2. |
| KEY3 | Static | String | Key name for third assignment. |
| VALUE3 | Static | String | Value assigned to KEY3. |
| KEY4 | Static | String | Key name for fourth assignment. |
| VALUE4 | Static | String | Value assigned to KEY4. |
| KEY5 | Static | String | Key name for fifth assignment. |
| VALUE5 | Static | String | Value assigned to KEY5. |
This action behaves similarly to SetVar, but writes into a dictionary as key-value entries.
SetGeoLocation
Updates the geographic location (latitude and longitude) of a specific object identified by OBJECT_ID.
This is typically used to map physical entities (e.g., assets, devices, or locations) to real-world coordinates for tracking or visualization.
⚙️ Parameters
| Parameter | Mode | Type | Description |
|---|---|---|---|
| OBJECT_ID | Static/Dynamic | Guid | Unique identifier of the object |
| LATITUDE | Static/Dynamic | Decimal | Latitude coordinate of the object's location |
| LONGITUDE | Static/Dynamic | Decimal | Longitude coordinate of the object's location |
Ensure the coordinates are valid decimal values within their respective geographic bounds (±90 for latitude, ±180 for longitude).
SetHttpResponse
Configures the HTTP response to be returned from an API or web-triggered workflow.
This includes setting the status code, response headers, content type, and response body.
Use this to send structured responses back to HTTP clients.
⚙️ Parameters
| Parameter | Mode | Type | Description |
|---|---|---|---|
| RESULT_CODE | Static/Dynamic | Int | HTTP status code (e.g., 200, 404, 500) |
| RESPONSE_HEADER | Static/Dynamic | Dictionary<String, String> | Optional custom headers to include in the response |
| CONTENT_TYPE | Static/Dynamic | String | Type of the response (text/json) |
| RESPONSE_BODY | Static/Dynamic | String | Body of the HTTP response (can be plain text or JSON) |
Set CONTENT_TYPE to text/json to return structured data.
SetObjectAttributes (V1)
The SetObjectAttributes (V1) block is used to set or update the attributes of an object within a specified Object Group during workflow execution. Unlike V2, this version requires the group to be specified using its name (as a string).
This action is commonly used after object creation or update events, enabling workflows to dynamically assign or modify attribute values such as status, type, or location.
Functionality
Input: The object’s unique identifier (OBJECT_ID), the name of the group (GROUP), and a dictionary of attribute name-value pairs.
Process:
- Locates the object in the given Object Group.
- Updates the object using attributes provided in
ATTRIBUTE_DATACONTEXT. - Assigns the object to the specified group (by name).
Output: Returns a boolean result indicating success or failure.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
OBJECT_ID | Static/Dynamic | GUID | Unique identifier of the object whose attributes are being set. |
GROUP | Static/Dynamic | String | Name of the group to which the object is assigned. |
OBJECT_GROUP_NAME | Static/Dynamic | String | Internal name of the Object Group where the object belongs. |
ATTRIBUTE_DATACONTEXT | Static/Dynamic | Dictionary<string, object> | Dictionary containing the attribute names and their values. |
This version uses GROUP (name string). Use SetObjectAttributes (V2) if you need to pass group identifiers programmatically using GUIDs.
SetObjectAttributes (V2)
The SetObjectAttributes (V2) block sets or updates the attribute values of an object within a specified Object Group. Compared to the original version, V2 introduces support for passing the Group as a GUID (GROUP_ID) instead of a name, making it more reliable and suitable for programmatic usage where names might vary or change.
This block is typically used to update fields such as status, metadata, or classification of an object after it has been created or processed.
Functionality
Input: The object's unique ID (OBJECT_ID), the Object Group ID (GROUP_ID), Object Group name, and a dictionary of attributes to update.
Process:
- Locates the object based on
OBJECT_IDandOBJECT_GROUP_NAME. - Updates the object using the provided
ATTRIBUTE_DATACONTEXT. - Group assignment is performed using the GUID provided in
GROUP_ID.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
OBJECT_ID | Static/Dynamic | GUID | Unique identifier of the object to be updated. |
GROUP_ID | Static/Dynamic | GUID | GUID of the group to assign to the object. |
OBJECT_GROUP_NAME | Static/Dynamic | String | Internal name of the Object Group the object belongs to. |
ATTRIBUTE_DATACONTEXT | Static/Dynamic | Dictionary<string, object> | Dictionary containing the attribute names and their new values. |
🆕 New in V2: Use GROUP_ID (GUID) instead of GROUP (name string) for more precise and reliable group assignments - especially useful when you dont have the group name in the context or want to reduce the number of actions used.
SetObjectAttributes (V3)
The SetObjectAttributes (V3) block sets Object Group attributes of an object using ATTRIBUTE_DATACONTEXT, which should include all required attributes.
This version accepts a GUID value in GROUP and includes USER_ID for user-context-aware updates.
Unlike previous versions, this action does not perform implicit type conversion. Provided attribute values must match expected data types exactly.
Functionality
Input: The object's unique ID (OBJECT_ID), group reference (GROUP), Object Group name (OBJECT_GROUP_NAME), attribute dictionary (ATTRIBUTE_DATACONTEXT), and user ID (USER_ID).
Process:
- Locates the target object in the specified Object Group.
- Applies attribute updates from
ATTRIBUTE_DATACONTEXT. - Uses
GROUPas GUID-compatible group reference. - Executes the update under the provided
USER_IDcontext. - Validates attribute values strictly against expected types (no implicit conversion).
Output:
- Updates object attributes when validation and assignment succeed.
- Returns
falsewhen required attributes are missing, IDs are invalid, or data types do not match schema expectations.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
OBJECT_ID | Dynamic | Guid | Unique identifier of the object to update. |
GROUP | Static | Object | Group reference that accepts a GUID value. |
OBJECT_GROUP_NAME | Dynamic | String | Internal name of the Object Group containing the object. |
ATTRIBUTE_DATACONTEXT | Dynamic | Dictionary<String,Object> | Dictionary of object attributes to set. Must include required attributes. |
USER_ID | Dynamic | Guid | User context identifier used for the update operation. |
No implicit type conversion is applied in V3. Ensure each value in ATTRIBUTE_DATACONTEXT matches the target attribute type exactly.
SetObjectInstant
The SetObjectInstant block creates or updates an object in the specified Object Group immediately during workflow execution, without waiting for the workflow to complete. This is useful for real-time operations where immediate data persistence is required, such as in alert handling, transactional logging, or when the saved object is required in consecutive steps of the workflow.
Functionality
Input: A new or existing Unique Object ID (GUID), Object Group name, and a dictionary of attributes (including primary key).
Process:
- If the specified
OBJECT_IDalready exists in the group, the object is updated. - If the ID is new, a new object is created using the given attributes.
Output: No result is returned, but the object is committed instantly to the Object Group.
Return:
true→ if the object is successfully created or updated.false→ if the operation fails due to schema mismatch or missing keys.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| OBJECT_ID | Static/Dynamic | Guid | The unique identifier for the object. Required for both creation and update operations. |
| GROUP | Static/Dynamic | String | Optional group name or label to categorize the object. |
| OBJECT_GROUP_NAME | Dynamic/Static | String | The internal name of the Object Group where the object belongs. |
| ATTRIBUTE_DATACONTEXT | Static/Dynamic | Dictionary<String, Object> | Key-value dictionary of attributes and their values. Must include values for all mandatory fields, including the primary key(s). |
This block is ideal for pushing live updates into a database-like structure. Be sure to match attribute names exactly as defined in the Object Group schema.
SetJobStatus (V1)
The SetJobStatus action sets the logical job status of the current workflow job. It can optionally assign an error identifier for structured error tracking.
This action is typically used to explicitly mark workflow state transitions such as success, failure, or intermediate states.
Functionality
Input:
- A status value (
STATUS) - Optional error identifier (
ERROR_IDENTIFIER)
Process:
- Assigns the provided
STATUSto the current workflow job. - If defined, associates the
ERROR_IDENTIFIERwith the workflow job.
Output:
- Updates the workflow’s logical process status.
- The workflow continues execution unless controlled by additional logic.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| STATUS | Static | String | Logical status to assign to the workflow job (e.g., Started, Processing, Completed, Failed). |
| ERROR_IDENTIFIER | Static | String | Optional identifier used to categorize or track specific error conditions. |
- Use this action to reflect meaningful lifecycle transitions in long-running or business-critical workflows.
ERROR_IDENTIFIERshould be standardized across workflows to support monitoring and reporting.- This action sets metadata only, it does not stop or alter workflow execution by itself.
- Process Status and Error Codes will be listed in workflow job listing page.
Setting a failure-related status does not automatically terminate the workflow.
Ensure status values follow a consistent naming convention across projects to avoid ambiguity in monitoring systems.
SetStorageLocation(V1)
- Assigns or updates the storage location details for a specified object.
- All storage parameters (Number, Location, Area, or Bin) must be provided and selected from a preconfigured list.
⚙️ Parameters
| Parameter | Mode | Type | Description |
|---|---|---|---|
| OBJECT_ID | Static/Dynamic | Guid | Unique identifier of the object to update |
| STORAGE_NUMBER | Static | String | High-level storage identifier (e.g., warehouse or zone) |
| STORAGE_LOCATION | Static | String | Specific location within the storage number |
| STORAGE_AREA | Static | String | Defined area within the location (e.g., aisle, section) |
| STORAGE_BIN | Static | String | The actual bin or compartment where the object is stored |
SetStorageLocation(V2)
- Assigns or updates the storage location details for a specified object.
- At least one of the storage parameters (Number, Location, Area, or Bin) must be provided.
- Unlike version 1, this version allows you to set custom values for parameters.
- If any parent hierarchy value is omitted, it will be automatically resolved from available context.
⚙️ Parameters
| Parameter | Mode | Type | Description |
|---|---|---|---|
| OBJECT_ID | Static/Dynamic | Guid | Unique identifier of the object to update |
| STORAGE_NUMBER | Static | String | (Optional) High-level storage identifier |
| STORAGE_LOCATION | Static | String | (Optional) Specific location within the storage number |
| STORAGE_AREA | Static | String | (Optional) Defined area within the location |
| STORAGE_BIN | Static | String | (Optional) The actual bin or compartment |
When fewer parameters are provided, the system auto-detects missing parent levels based on existing mappings or default rules.
SetStorageLocationByID
The SetStorageLocationByID block is designed to configure storage details for an object by directly specifying its ID and associated storage hierarchy parameters.
Functionality
- Input: An object identifier (
OBJECT_ID) and at least one storage parameter (NumberID,LocationID,AreaID, orBinID). - Process: Updates the object’s storage details. If parent values are not provided, they are automatically detected from the context.
- Output: The object’s storage location is updated accordingly.
Return:
true→ if the update was successful.false→ if the update failed (e.g., invalid IDs or context mismatch).
Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
OBJECT_ID | Static/Dynamic | Guid | Unique identifier of the object whose storage location will be updated. |
STORAGE_NUMBER_ID | Static/Dynamic | String | High-level storage number ID (e.g., warehouse ID). |
STORAGE_LOCATION_ID | Static/Dynamic | String | Location ID within the storage number. |
STORAGE_AREA_ID | Static/Dynamic | String | Area ID inside the location (e.g., aisle, section). |
STORAGE_BIN_ID | Static/Dynamic | String | Bin ID or compartment where the object is stored. |
- Mandatory Input: At least one of
STORAGE_NUMBER_ID,STORAGE_LOCATION_ID,STORAGE_AREA_ID, orSTORAGE_BIN_IDmust be provided. - Auto-Detection: If certain parent IDs are not provided, they will be resolved automatically from available context or configuration.
- Error Handling: Always confirm that the
OBJECT_IDexists before attempting to set the storage location.
SetVar
- Assigns values to one or more variables.
- You can specify up to five variable-value pairs at once.
- Use commas (
,) to separate multiple variable names in the input fields.
⚙️ Parameters
| Parameter | Mode | Type | Description |
|---|---|---|---|
| RESULT_VAR1 | Static | String | Name of the first variable to assign |
| VALUE1 | Static/Dynamic | String | Value to assign to the first variable |
| RESULT_VAR2 | Static | String | Name of the second variable |
| VALUE2 | Static/Dynamic | String | Value for the second variable |
| RESULT_VAR3 | Static | String | Name of the third variable |
| VALUE3 | Static/Dynamic | String | Value for the third variable |
| RESULT_VAR4 | Static | String | Name of the fourth variable |
| VALUE4 | Static/Dynamic | String | Value for the fourth variable |
| RESULT_VAR5 | Static | String | Name of the fifth variable |
| VALUE5 | Static/Dynamic | String | Value for the fifth variable |
Use this block to set multiple workflow variables quickly and efficiently in a single step.
Sleep (V1)
The Sleep block pauses workflow execution for a defined amount of time (in milliseconds). This is useful in workflows where you need to introduce delays—for example, to wait before retrying an action, throttle execution, or align with external timing requirements.
Functionality
Input: Duration to sleep, in milliseconds.
Process: Suspends the workflow for the specified time.
Output: None. Execution resumes automatically after the delay.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
SLEEP_TIME | Static/Dynamic | Int | Time to pause workflow execution (in milliseconds). |
⏱️ Example: A value of 5000 will pause the workflow for 5 seconds before continuing.
SplitString
Splits the input string (SOURCE_VAR) into a list of strings (TARGET_VAR) using the specified separator (SEPARATOR).
Options allow removing empty entries and trimming whitespace from each split element.
Returns false if the source string or separator is null or empty.
⚙️ Parameters
| Parameter | Mode | Type | Description |
|---|---|---|---|
| SOURCE_VAR | Static/Dynamic | String | The input string to be split |
| SEPARATOR | Static/Dynamic | String | The delimiter string used to split the input |
| REMOVE_EMPTY_ENTRIES | Static/Dynamic | Bool | If true, empty entries after splitting are removed |
| TRIM_ENTRIES | Static/Dynamic | Bool | If true, trims whitespace from each split string |
| TARGET_VAR | Static | String | The variable name to store the resulting list of strings |
Use this block to convert delimited strings into lists for iteration or further processing.
StartTimer
Initiates a timer with a specified duration. Once the timer completes, the OnTimer event is triggered.
Use this to delay execution or schedule logic to run after a set period.
⚙️ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| TIMER_NAME | Static/Dynamic | String | A unique name to identify the timer |
| DURATION | Static/Dynamic | Int | Time duration in milliseconds for the timer |
| GLOBAL_TIMER | Static/Dynamic | Bool | If true, the timer is global and not scoped to a specific workflow job |
UpdateGlobalVar
Updates the value of a global variable. If a group is specified, the variable will be updated within that group; otherwise, it is updated at the client (global) level.
- Returns
falseifVAR_NAMEis missing or invalid.
⚙️ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| VAR_NAME | Static/Dynamic | String | The name of the variable to update |
| GROUP | Static/Dynamic | String | (Optional) Group name to update the variable within |
| VALUE | Static/Dynamic | Any | The new value to assign to the global variable |
ValidateDecimalLimits (V1)
The ValidateDecimalLimits action validates whether a decimal VALUE fits within the configured precision and scale for a target attribute.
It checks metadata from OBJECT_GROUP_NAME and COLUMN_NAME, and returns false if the value would be rounded or truncated during database storage.
Functionality
Input:
- Object group name (
OBJECT_GROUP_NAME) - Column name (
COLUMN_NAME) - Decimal value (
VALUE)
Process:
- Reads the target column's decimal precision and scale metadata.
- Verifies whether
VALUEcan be stored without loss.
Output:
- Returns
trueif value is valid for the configured limits. - Returns
falseif value exceeds allowed precision/scale.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| OBJECT_GROUP_NAME | Static/Dynamic | String | Name of the object group containing the target column. |
| COLUMN_NAME | Static | String | Name of the decimal column to validate against. |
| VALUE | Static/Dynamic | Decimal | Decimal value to validate. |
Use this action before persistence to prevent silent rounding or truncation.
WebRequest
- Sends an HTTP/HTTPS request to the specified
REQUEST_URLusing the defined method and headers. - You can include optional content, manage cookies, handle SSL bypass, and capture the response.
- Execution pauses until the response is received if
AWAIT_RESPONSEis enabled.
⚙️ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| REQUEST_URL | Static/Dynamic | String | The full URL to send the request to |
| BYPASS_SSL | Static/Dynamic | Bool | Skip SSL certificate verification |
| REQUEST_METHOD | Static/Dynamic | String | HTTP method (GET, POST, PUT, DELETE, etc.) |
| REQUEST_HEADER | Static/Dynamic | Dictionary<String, String> | Custom headers to include in the request |
| COOKIE_STORE | Static/Dynamic | Dictionary<String, String> | Optional cookie values to send |
| REQUEST_CONTENT_TYPE | Static/Dynamic | String | Content-Type of the request payload (e.g., application/json) |
| DATA_TO_SEND | Static/Dynamic | String | Payload data to send (used for POST, PUT, etc.) |
| AWAIT_RESPONSE | Static/Dynamic | Bool | Wait for a response before proceeding |
| READ_RESPONSE_MESSAGE | Static/Dynamic | Bool | Read the response body into a variable |
| TIMEOUT_MILLIS | Static/Dynamic | Int | Timeout in milliseconds for the request |
| RANGE_OK_RESPONSES | Static/Dynamic | String | Comma-separated range of HTTP codes considered successful |
| COUNT_RETRIES | Static/Dynamic | Int | Number of retry attempts on failure |
| RETRY_WAIT_MILLIS | Static/Dynamic | Int | Delay between retries in milliseconds |
| RESULT_VAR | Static | String | Variable name to store the response body |
| RESPONSE_HEADER | Static | String | Variable name to store the response headers |
Automatic User-Agent Header:
All outgoing HTTP requests from the WebRequest action automatically include a User-Agent header. By default, this value is set by the system, but you can override it by setting the environment variable WORKFLOWPROCESSOR__WEBREQUESTUSERAGENT.
WebRequest3
Deprecated: The WebRequest3 action is deprecated and may be removed in a future release. Use the standard WebRequest action for all new workflows and migrate existing usage where possible.
- Sends a synchronous HTTP request to the specified
REQUEST_URLusing a defined method. - Supports custom headers, optional cookies, and payload data.
- Lightweight version of the standard HTTP request, ideal for simpler integrations.
⚙️ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| REQUEST_URL | Static/Dynamic | String | Full endpoint to send the request to |
| REQUEST_METHOD | Static/Dynamic | String | HTTP method (GET, POST, PUT, DELETE, etc.) |
| COOKIE | Static/Dynamic | String | Optional cookie string |
| HEADER_ITEMS | Static/Dynamic | Dictionary<String, String> | Dictionary of headers to add dynamically |
| HEADER_NAME1 | Static/Dynamic | String | Static header key #1 |
| HEADER_VALUE1 | Static/Dynamic | String | Static header value #1 |
| HEADER_NAME2 | Static/Dynamic | String | Static header key #2 |
| HEADER_VALUE2 | Static/Dynamic | String | Static header value #2 |
| HEADER_NAME3 | Static/Dynamic | String | Static header key #3 |
| HEADER_VALUE3 | Static/Dynamic | String | Static header value #3 |
| REQUEST_CONTENT_TYPE | Static/Dynamic | String | Content-Type of the request (e.g., application/json) |
| DATA_TO_SEND | Static/Dynamic | String | Payload body to send in the request |
| AWAIT_RESPONSE | Static/Dynamic | Bool | Wait for the response before continuing |
| READ_RESPONSE_MESSAGE | Static/Dynamic | Bool | Store the response body in a variable |
| TIMEOUT_MILLIS | Static/Dynamic | Int | Timeout in milliseconds |
| RANGE_OK_RESPONSES | Static/Dynamic | String | Comma-separated HTTP status code ranges to treat as successful |
| RESULT_VAR | Static | String | Variable to store the response message |
| RESPONSE_HEADER | Static | String | Variable to store the response headers |
While
Continuously executes its child steps as long as the provided boolean expression evaluates to true.
The condition is checked before each iteration.
⚙️ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| EXPRESSION | Dynamic | Bool | A boolean expression to evaluate before each loop |
XPath
Executes an XPath query on an XML string stored in a variable and stores the result in the specified output variable.
⚙️ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| XPATH | Dynamic | String | The XPath expression to apply on the XML data |
| SOURCE_VAR | Dynamic | String | Variable containing the XML string to query |
| RESULT_VAR | Static | String | Variable where the query result will be stored |
- Supports standard XPath syntax for navigating and extracting XML content.
- If the XPath expression matches multiple nodes, the result will contain them all as a single string (concatenated or list-like depending on implementation).
- If no match is found, the result may be an empty string or null depending on the environment.