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 = "-".
AddToList (V1)
The AddToList action adds one or more items to an existing list (LIST_VAR). You can add up to 5 items at once using ELEMENT1 through ELEMENT5.
ELEMENT1 is required; the rest are optional — leave them blank to skip. Each item must match the type the list holds (e.g., text items for a text list). The list is updated immediately and available to the next Actions.
Functionality
Input:
- An existing list or list variable (
LIST_VAR). - Up to 5 elements to add (
ELEMENT1toELEMENT5).
Process:
- Adds the provided elements to the list.
- Fails with an error if the list variable is missing, is not a list, or if an item type does not match.
Output:
- The list is updated in-place with the new elements.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| LIST_VAR | Static/Dynamic | String | The list variable to add elements to. |
| ELEMENT1 | Static/Dynamic | Object | Required. The first element to add. |
| ELEMENT2 | Static/Dynamic | Object | Optional. The second element to add. |
| ELEMENT3 | Static/Dynamic | Object | Optional. The third element to add. |
| ELEMENT4 | Static/Dynamic | Object | Optional. The fourth element to add. |
| ELEMENT5 | Static/Dynamic | Object | Optional. The fifth element to add. |
Fails with an error if the list variable is missing, is not a list, or if an item type does not match.
Base64 (V1)
The Base64 (V1) action encodes or decodes the given string value (SOURCE_VAR) using Base64 and stores the result in TARGET_VAR.
Select the operation mode (OPERATION_MODE) with 'Encode' or 'Decode'.
Functionality
Input:
- A source string (
SOURCE_VAR). - An operation mode (
OPERATION_MODE) set to eitherEncodeorDecode.
Process:
- Either encodes the data to Base64 or decodes it from Base64 based on the
OPERATION_MODE. - Returns
trueif the operation was successful.
Output:
- The resulting string is stored in
TARGET_VAR.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| OPERATION_MODE | Static/Dynamic | String | Operation to perform (e.g. Encode or Decode). |
| SOURCE_VAR | Static/Dynamic | String | The input string to be encoded or decoded. |
| TARGET_VAR | Static | String | Variable name where the resulting string is stored. |
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.
CastGuid (V1)
The CastGuid action casts a given string from SOURCE_VAR into a Guid and stores the result in a workflow variable.
Functionality
Input:
A source object (SOURCE_VAR) that must represent a valid Guid string.
Process:
Attempts to cast the object into a Guid.
Fails if the source is null, empty, or not a valid Guid.
Output:
The resulting Guid is stored in RESULT_VAR.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| SOURCE_VAR | Static/Dynamic | Object | Input object (string) to be cast into a Guid. |
| RESULT_VAR | Static/Dynamic | String | Variable name to store the resulting Guid. |
The action fails if the source is null, empty, or not a valid Guid format.
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"
ContainsItem (V1)
The ContainsItem (V1) action checks whether a specific value (ITEM) exists anywhere in a list (SOURCE_VAR).
Works with any list type — text, numbers, booleans, and more. It takes the true (green) path if the value is found, or the false (red) path if it is not — a missing value is not treated as an error, it just routes differently. An error occurs only if the list variable is not set or is not a valid list.
Functionality
Input:
- A source list (
SOURCE_VAR). - A specific value to check for existence (
ITEM).
Process:
- Checks if the specified value exists in the list.
- Does not raise an error for missing values.
- Raises an error if
SOURCE_VARis missing or is not a valid list.
Return:
true→ if the item exists in the list.false→ if the item does not exist.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| SOURCE_VAR | Static/Dynamic | List<items> | The list variable to search within. |
| ITEM | Static/Dynamic | Object | The specific value to look up in the list. |
ContainsKey (V1)
The ContainsKey (V1) action checks whether a given key (KEY) exists in a dictionary (SOURCE_VAR).
It takes the true (green) path if the key is found, or the false (red) path if it is not — no error is raised for a missing key, it simply routes differently. An error occurs only if the dictionary variable is not set or is not a valid dictionary.
Functionality
Input:
- A source dictionary (
SOURCE_VAR). - A string key to check for existence (
KEY).
Process:
- Checks if the specified key exists in the dictionary.
- Does not raise an error for missing keys.
- Raises an error if
SOURCE_VARis missing or is not a validDictionary.
Return:
true→ if the key exists in the dictionary.false→ if the key does not exist.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| SOURCE_VAR | Static/Dynamic | Dictionary<string,object> | The dictionary variable to check for the key. |
| KEY | Static/Dynamic | String | The key to look up in the specified dictionary. |
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.
CreateEpcisEvent (V1)
The CreateEpcisEvent (V1) action creates an EPCIS 2.0 JSON-LD Document with an event. Supports event types: ObjectEvent, AggregationEvent, TransactionEvent, TransformationEvent, AssociationEvent. Output is stored in RESULT_EPCIS_EVENT (event as object) or RESULT_EPCIS_DOCUMENT (complete JSON-LD document as string).
Functionality
Input:
- Event metadata such as
EPCIS_EVENT_TYPE,EPCIS_ACTION,BIZ_STEP, etc. - A list of EPCs (
EPC_LIST). - Optional extensions and timezone offsets.
Process:
- Generates an EPCIS 2.0 event object.
- If requested, wraps it into a complete EPCIS 2.0 JSON-LD document.
Output:
- Event object stored in
RESULT_EPCIS_EVENT. - Full JSON-LD document stored in
RESULT_EPCIS_DOCUMENT.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| EPCIS_EVENT_TYPE | Static/Dynamic | String | Target EPCIS event type. |
| EPCIS_ACTION | Static/Dynamic | String | EPCIS action (OBSERVE, ADD, DELETE). |
| BIZ_STEP | Static/Dynamic | String | EPCIS Business Step URI. |
| EPC_LIST | Static/Dynamic | List<String> | List of EPCs for the event. |
| EVENT_TIME | Static/Dynamic | String | Event time timestamp string. |
| EVENT_TIME_ZONE_OFFSET | Static/Dynamic | String | Event time zone offset string. |
| READ_POINT | Static/Dynamic | String | Read point URI identifier. |
| EVENT_EXTENSION | Static/Dynamic | Dictionary<string,object> | Custom dictionary of event extensions. |
| EXTENSION_NAMESPACE | Static/Dynamic | String | Namespace URI for the extensions. |
| EXTENSION_PREFIX | Static/Dynamic | String | Prefix used for the extension in the generated JSON-LD output. The default is rbExt. |
| EXTENSION_PROPERTY_NAME | Static/Dynamic | String | Property name used for the extension in the generated JSON-LD output. The default is EventExtension. |
| RESULT_EPCIS_EVENT | Static/Dynamic | String | Target variable for the event object output. |
| RESULT_EPCIS_DOCUMENT | Static/Dynamic | String | Target variable for the JSON-LD doc output. |
Use EXTENSION_NAMESPACE, EXTENSION_PREFIX, and EXTENSION_PROPERTY_NAME to configure the extension name written to the EPCIS JSON-LD output. This lets the generated document use the extension naming required by the receiving system.
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 Schema 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 Schema, 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.
CustomLinqQuery (V1)
The CustomLinqQuery (V1) action executes a LINQ method-chain script against dynamic object-group tables (T_OGA_*). Table names support both the full format (e.g., T_OGA_ASSETS) or the short format (e.g., ASSETS).
Functionality
Input:
- A LINQ script (
SCRIPT). - Flags
JOIN_OBJECT_TABLEandIS_OBJECT_SELECTION.
Process:
- Evaluates the LINQ script.
- Supported operators:
Where,OrderBy,OrderByDescending,ThenBy,ThenByDescending,Select,Take,Skip,Join,Count,Any,Sum,Min,Max,Average,First,FirstOrDefault. - Join syntax:
.Join(TABLE, "KEY")for the same column name, or.Join(TABLE, "LEFT_KEY", "RIGHT_KEY")for different column names. - Disambiguation: If both tables share a column name, disambiguate with dot notation (
x.ASSETS.NAME) or underscore format (x.ASSETS_NAME). - Selection:
Selectsupports aliases:.Select(x => new { AssetName = x.ASSETS.NAME, x.LOCATION }). - Filtering and validation: Filter expressions are evaluated with awareness of the target column data type. Validation messages identify invalid expressions or incompatible values.
Output:
- The retrieved data or scalar result is stored in
RESULT_VAR.
String Matching and Wildcards
Use ==, !=, Contains, StartsWith, or EndsWith for string matching. Use Like when the filter needs SQL-style wildcard matching:
%matches any sequence of characters._matches exactly one character.- Escape
%or_with a backslash when the character must be matched literally. For example,.Like("100\\% cotton")matches100% cotton.
For example, .Like("abcd%fg1") matches values that begin with abcd and end with fg1.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| SCRIPT | Static/Dynamic | String | The LINQ method-chain script to execute. |
| JOIN_OBJECT_TABLE | Static/Dynamic | Bool | Flag to enable joining the object tables. |
| IS_OBJECT_SELECTION | Static/Dynamic | Bool | Set to true if the script returns object(s) rather than a scalar. |
| RESULT_VAR | Static/Dynamic | String | Target variable to store the result. |
✅ Example
ASSETS.Join(MAINTENANCE_LOGS, "ASSET_ID").Where(x => x.STATUS == "Active").OrderBy(x => x.ASSET_NAME).Select(x => new { Name = x.ASSETS.NAME, x.LOCATION }).Take(50)
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 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 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 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
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 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 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 (V1)
The DeleteObject (V1) action deletes an object identified by OBJECT_ID.
Optionally, the object's history data can also be removed using DELETE_HISTORY.
Functionality
Input:
- Object ID of the object to delete
- Optional history deletion setting
Process:
- Deletes the object matching the provided
OBJECT_ID. - If
DELETE_HISTORYis enabled, the object's history data is also removed.
Output:
- The specified object is deleted.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| OBJECT_ID | Static/Dynamic | Guid | Unique identifier of the object to delete. |
| DELETE_HISTORY | Static/Dynamic | Bool | If enabled, removes the object's history data. |
Deleting an object is irreversible. Use DELETE_HISTORY carefully, because removing history data also removes audit trails associated with the object.
Use this action when objects need to be permanently removed from the system, optionally including their historical records.
DeleteObject (V2)
The DeleteObject (V2) action deletes an object identified by OBJECT_ID.
Compared to V1, this version adds the SOFT_DELETE option. When SOFT_DELETE is enabled,The object is not permanently deleted so you can choose to recover it later. Also the object is soft deleted and its history is automatically removed.
Functionality
Input:
- Object ID of the object to delete
- Optional history deletion setting
- Optional soft delete setting
Process:
- Deletes the object matching the provided
OBJECT_ID. - If
DELETE_HISTORYis enabled, the object's history data is also removed. - If
SOFT_DELETEis enabled, The object is not permanently deleted so you can choose to recover it later. Also the object is soft deleted and its history is automatically removed.
Output:
- The specified object is deleted.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| OBJECT_ID | Dynamic | Guid | Unique identifier of the object to delete. |
| DELETE_HISTORY | Static | Bool | If enabled, removes the object's history data. |
| SOFT_DELETE | Static | Bool | If enabled, performs a soft delete and automatically removes history. |
Deleting an object can affect dependent workflows and object references. Use DELETE_HISTORY and SOFT_DELETE carefully, because history data and audit trails may be removed.
DeleteObjectInstant
The DeleteObjectInstant block deletes an object from an Object Schema 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 Schema.
- 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: If
ADD_EOTis true and the EOT character (\x04) is not already present, it is appended automatically. -
Length Check: The encoded result is validated against
MAX_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.
GetCustomTypeName (V1)
The GetCustomTypeName action converts a Custom Type internal integer value to its technical name. Use it when a workflow has a stored Custom Type value and needs the corresponding technical name for a comparison, mapping, or downstream action.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| CUSTOM_TYPE | Static/Dynamic | String | Selects the Custom Type that contains the value. |
| VALUE | Static/Dynamic | Int | The internal Custom Type value to resolve. |
| RESULT_VAR | Static | String | The workflow variable that receives the resolved technical name. |
The action follows the false edge when VALUE is not defined for the selected CUSTOM_TYPE.
GetCustomTypeValue (V1)
The GetCustomTypeValue action converts a Custom Type technical name to its internal integer value. Use it when a workflow receives or stores a technical name but requires the corresponding value for a Custom Type.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| CUSTOM_TYPE | Static/Dynamic | String | Selects the Custom Type that contains the technical name. |
| TECHNICAL_NAME | Static/Dynamic | String | The technical name to resolve. Matching is case-insensitive. |
| RESULT_VAR | Static | String | The workflow variable that receives the resolved internal integer value. |
The action follows the false edge when TECHNICAL_NAME is not defined for the selected CUSTOM_TYPE.
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..
GetGroupId (V1)
The GetGroupId action converts a user Group name to its UUID. Use it when a workflow has a Group name and needs the corresponding UUID for a later action or data operation.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| GROUP_NAME | Static/Dynamic | String | The user Group name to resolve. Matching is case-insensitive. |
| RESULT_VAR | Static | String | The workflow variable that receives the resolved Group UUID. |
The action follows the false edge when GROUP_NAME matches no Group or more than one Group.
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.
GetObjectAttachments (V1)
The GetObjectAttachments (V1) action retrieves the list of attachments associated with a given object.
It takes an OBJECT_ID as input and returns attachment metadata, such as filename, type, and identifiers, as a List<Dictionary<string, string>> in the specified result variable.
This action returns metadata only. It does not return file content or bytes.
Functionality
Input:
- An object identifier (
OBJECT_ID)
Process:
- Looks up the object using the provided
OBJECT_ID. - Retrieves the attachment entries associated with that object.
- Maps each attachment into metadata fields such as filename, type, and identifier.
Output:
- Stores the attachment metadata list in
RESULT_VARasList<Dictionary<string, string>>.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| OBJECT_ID | Static/Dynamic | Guid | Unique identifier of the object whose attachments should be listed. |
| RESULT_VAR | Static | String | Variable name to store the resulting attachment metadata list. |
Use GetObjectAttachments (V1) when you need to inspect or iterate over attachment metadata before deciding whether to download, link, or delete a specific file.
How to download a file
GetObjectAttachments (V1) returns only metadata, not the file itself. To download the actual file, follow these steps:
- Run
GetObjectAttachments (V1)and read the attachment/file ID from the returned metadata list (RESULT_VAR). Each entry is aDictionary<string, string>containing the attachment identifier along with fields like filename and type. - Identify the storage provider linked to the selected Object Schema and copy its provider ID from the Manage Storage Provider page.
- Call the download endpoint below with that attachment ID to receive the file stream.
Download endpoint
GET https://example-gateway.com/RCOMAPI/api/binary-storage/download/{attachmentId}
-
Replace
{attachmentId}with the attachment/file ID from step 1. -
Authorizationheader is optional and only required when the gateway enforces authentication:Authorization: Bearer <token>
Example:
curl -X GET "https://example-gateway.com/RCOMAPI/api/binary-storage/download/<Attachment ID>" \
-H "Authorization: Bearer <token>" \
--output example.pdf
The response returns the binary file stream with the correct Content-Type, and typically a Content-Disposition header carrying the original filename.
This action returns metadata only. If you need the actual file bytes, use GetAttachment (V1) with the exact file name.
GetObjectChangeHistory
The GetObjectChangeHistory action retrieves the historical changes of one or more attributes for a specific object within an Object Schema, 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 Schema. - 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 (V1)
The GetObjectGroupSchema block retrieves the schema of a specified Object Schema 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 Schema.
Functionality:
Input: Object Schema name (dynamic).
Process: Queries the Object Schema 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 Schema is not found or an error occurs.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| OBJECT_GROUP_NAME | Dynamic/Static | String | Internal name of the Object Schema 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.
GetObjectGroupSchema (V2)
The GetObjectGroupSchema (V2) action returns the schema of the specified Object Schema based on OBJECT_GROUP_NAME. It includes column types, nullability, descriptions, RegEx patterns, and the Custom Type configured for each Custom attribute.
What's Different from V1
- New Schema Outputs: V2 adds mapping outputs for column descriptions (
COLUMN_DESCRIPTION) and regular expression validation patterns (COLUMN_REGEX). - Unique Keys: V2 extracts unique constraint identifiers (
UNIQUE_KEY) as part of the schema response instead of just primary keys. - Custom Types:
COLUMN_CUSTOM_TYPEidentifies the Custom Type configured for each column whose type is reported asCustom.
Functionality
Input:
- The Object Schema name (
OBJECT_GROUP_NAME).
Process:
- Retrieves the schema details for the specified Object Schema.
Output:
- The action returns multiple mappings containing column details such as type, nullability, descriptions, RegEx, unique keys, and configured Custom Types, stored into their respective target variables.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| OBJECT_GROUP_NAME | Static/Dynamic | String | The unique name of the Object Schema whose schema is being retrieved. |
| COLUMN_TYPE | Static/Dynamic | String | Target variable to store column types mappings. |
| NULLABLE | Static/Dynamic | String | Target variable to store column nullability mappings. |
| COLUMN_DESCRIPTION | Static/Dynamic | String | Target variable to store column description mappings. |
| COLUMN_REGEX | Static/Dynamic | String | Target variable to store column regular expression pattern mappings. |
| UNIQUE_KEY | Static/Dynamic | String | Target variable to store the unique key identifiers. |
| COLUMN_CUSTOM_TYPE | Static/Dynamic | String | Target variable to store the Custom Type configured for each Custom column. |
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 Schema name and either an attribute dictionary or up to two explicit parameter/value pairs.
Process:
- Queries the Object Schema 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 Schema 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 Schema name and either an attribute dictionary or up to two explicit parameter/value pairs.
Process:
- Queries the Object Schema 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 Schema 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 Schema name
- Matching attributes or parameter pairs
- Optional column selection
Process:
- Queries the Object Schema 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 Schema 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.
GetObjectsOfAttributes (V4)
The GetObjectsOfAttributes (V4) action retrieves all objects from the specified OBJECT_GROUP_NAME that match the provided attributes or parameter name/value pairs, and stores the result as a DataContext.
Either ATTRIBUTES or at least one parameter name/value pair must be set.
Compared to V3, this version adds support for object reference columns. When object reference columns are selected in COLUMN_NAMES, the result includes the referenced object's unique group name.
Functionality
Input:
- Object Schema name to query
- Matching attributes using either:
ATTRIBUTESdictionary, or- Parameter name/value pairs such as
PARAM_NAME1/PARAM_VALUE1
- Optional column selection using
COLUMN_NAMES - Optional existence check using
CHECK_EXISTENCE
Process:
- Queries the specified Object Schema using the provided matching criteria.
- Uses either the
ATTRIBUTESdictionary or parameter name/value pairs. - Applies column filtering when
COLUMN_NAMESis provided. - If selected columns include object reference columns, the referenced object's unique group name is included in the result.
- If
CHECK_EXISTENCEis enabled, checks whether matching objects exist.
Output:
- Stores matching objects as a
DataContextinRESULT_VAR.
Return:
- If
CHECK_EXISTENCEis enabled:- Directs to the True branch when matching objects are found.
- Directs to the False branch when no matching objects are found.
- If no valid query condition is provided, no matching result is returned.
What's Different from V3
V4includes the referenced object's unique group name when object reference columns are selected.V3already introduced explicit custom-attribute numeric matching behavior:- Numeric strings are matched by value.
- Numeric types are treated as index-based lookups.
Custom Attribute Matching
When searching custom attributes:
- Numeric strings are matched as actual values.
- Numeric typed inputs are treated as index-based lookups.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| OBJECT_GROUP_NAME | Dynamic | String | Name of the Object Schema to query. |
| ATTRIBUTES | Dynamic | Dictionary<String,Object> | Dictionary of attribute key-value pairs to match. |
| PARAM_NAME1 | Static | String | Name of the first parameter to match. |
| PARAM_VALUE1 | Dynamic | Object | Value for PARAM_NAME1. |
| PARAM_NAME2 | Static | String | Name of the second parameter to match. |
| PARAM_VALUE2 | Dynamic | Object | Value for PARAM_NAME2. |
| COLUMN_NAMES | Static | List<String> | Optional list of column names to fetch. If object reference columns are selected, the referenced object's unique group name is included. |
| RESULT_VAR | Static | String | Variable name where the result will be stored as a DataContext. |
| CHECK_EXISTENCE | Static | Bool | If enabled, checks whether matching objects exist and routes execution to the True or False branch. |
Either ATTRIBUTES or at least one parameter name/value pair must be configured. Without a valid query condition, the action cannot retrieve matching objects.
Use this action when you need to retrieve objects based on matching attributes and optionally include reference-related group information in the returned DataContext.
GetObjectsOfObjectGroup (V1)
Retrieves all objects from the specified Object Schema (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 Schema 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.
GetObjectsOfObjectGroup (V2)
The GetObjectsOfObjectGroup (V2) action retrieves all objects from a specified Object Schema and stores the result as a DataContext in RESULT_VAR.
The Object Schema is identified using its unique name or ID. COLUMN_NAMES is optional and can be used to limit the returned data to specific columns.
Compared to V1, this version adds support for object reference columns. When object reference columns are selected in COLUMN_NAMES, the result includes the referenced object's unique group name.
Functionality
Input:
- Unique Object Schema name or ID
- Optional list of column names to fetch
Process:
- Retrieves all objects from the specified Object Schema.
- If
COLUMN_NAMESis provided, only the selected columns are fetched. - If
COLUMN_NAMESis not provided, all available object data is retrieved. - If object reference columns are selected, the referenced object's unique group name is included in the result.
Output:
- Stores the retrieved objects as a
DataContextinRESULT_VAR.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| OBJECT_GROUP_NAME | Static | String | Unique name or ID of the Object Schema to fetch objects from. |
| COLUMN_NAMES | Static | List<String> | Optional list of column names to fetch. If object reference columns are selected, the referenced object's unique group name is included. |
| RESULT_VAR | Static | String | Variable name where the retrieved objects will be stored as a DataContext. |
Attribute, group, and location metadata returned by this action are immutable and cannot be modified through this block.
Use this action when you need to retrieve all objects from a specific Object Schema without filtering by attributes.
GetObjectsOfStorage (V1)
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 Schema 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.
GetObjectsOfStorage (V2)
The GetObjectsOfStorage (V2) action retrieves all objects located within a specified storage location and stores the result as a DataContext in RESULT_VAR.
The storage location is defined using STORAGE_NUMBER, STORAGE_LOCATION, STORAGE_AREA, and STORAGE_BIN.
COLUMN_NAMES is optional and can be used to limit the returned data to specific columns.
Compared to V1, this version adds support for object reference columns. When object reference columns are selected in COLUMN_NAMES, the result includes the referenced object's unique group name.
Functionality
Input:
- Storage location identifiers:
STORAGE_NUMBERSTORAGE_LOCATIONSTORAGE_AREASTORAGE_BIN
- Optional Object Schema filter using
OBJECT_GROUP_NAME - Optional column selection using
COLUMN_NAMES
Process:
- Retrieves all objects located in the specified storage location.
- Optionally filters results by
OBJECT_GROUP_NAME. - If
COLUMN_NAMESis provided, only the selected columns are fetched. - If
COLUMN_NAMESis not provided, all available object data is retrieved. - If object reference columns are selected, the referenced object's unique group name is included in the result.
Output:
- Stores the retrieved objects as a
DataContextinRESULT_VAR.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| STORAGE_NUMBER | Static | Int | Identifier for the storage number. |
| STORAGE_LOCATION | Static | Int | Identifier for the storage location. |
| STORAGE_AREA | Static | Int | Identifier for the storage area. |
| STORAGE_BIN | Static | Int | Identifier for the storage bin. |
| OBJECT_GROUP_NAME | Dynamic | String | Optional unique name or ID of the Object Schema to filter retrieved objects. |
| COLUMN_NAMES | Static | List<String> | Optional list of column names to fetch. If object reference columns are selected, the referenced object's unique group name is included. |
| RESULT_VAR | Static | String | Variable name where the retrieved objects will be stored as a DataContext. |
Attribute, group, and location metadata returned by this action are immutable and cannot be modified through this block.
Use this action for warehouse-style object retrieval based on physical storage coordinates and optional Object Schema filtering.
GetReferencingObjects (V1)
This action accepts an OBJECT_ID and returns a dictionary where each key represents an Object Schema name, and the corresponding value is a list of OBJECT_IDs of objects that reference the given object from that group.
This action is useful when you need to identify dependencies or relationships before updating, deleting, or processing an object.
Functionality
Input:
- Object ID of the object to check (
OBJECT_ID)
Process:
- Searches all object references related to the provided
OBJECT_ID. - Groups the referencing objects by their Object Schema name.
Output:
- Stores a dictionary in
RESULT_VAR. - Each key represents an Object Schema name.
- Each value contains a list of
OBJECT_IDs from that group that reference the given object.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| OBJECT_ID | Static/Dynamic | Guid | The ID of the object for which referencing objects should be retrieved. |
| RESULT_VAR | Static | String | Variable name where the resulting dictionary will be stored. |
Use this action when you need to check which objects depend on or reference a specific object across different Object Schemas.
Result Structure
The result is returned as a dictionary in the following format:
{
"ObjectGroupNameA": [
"OBJECT_ID_1",
"OBJECT_ID_2"
],
"ObjectGroupNameB": [
"OBJECT_ID_3"
]
}
GetReferencingObjectsByGroup (V1)
The GetReferencingObjectsByGroup action retrieves objects from a specific Object Schema that reference a given object.
Use this action when you need to check object dependencies within one selected Object Schema instead of retrieving references from all groups.
Functionality
Input:
- Object ID of the object to check (
OBJECT_ID) - Name of the Object Schema to search in (
OBJECT_GROUP_NAME)
Process:
- Searches the specified Object Schema for objects that reference the provided
OBJECT_ID. - Collects the
OBJECT_IDs of all matching referencing objects.
Output:
- Stores a list of referencing
OBJECT_IDs inRESULT_VAR.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| OBJECT_ID | Static/Dynamic | Guid | The ID of the object for which referencing objects should be retrieved. |
| OBJECT_GROUP_NAME | Static/Dynamic | String | Name of the Object Schema to search for references in. |
| RESULT_VAR | Static | String | Variable name where the resulting list of object IDs will be stored. |
Use this action when the workflow only needs references from one specific Object Schema.
Result Structure
The result is returned as a list of object IDs:
[
"OBJECT_ID_1",
"OBJECT_ID_2",
"OBJECT_ID_3"
]
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).
HtmlEncode (V1)
The HtmlEncode (V1) action transforms SOURCE_VAR into an HTML-encoded string and stores the result in RESULT_VAR.
It escapes special characters such as <, >, &, ", and ' to their safe HTML representations.
Functionality
Input:
- Source string (
SOURCE_VAR)
Process:
- Encodes HTML-sensitive characters in the input string.
Output:
- Encoded string saved in
RESULT_VAR.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| SOURCE_VAR | Dynamic | String | Input string to be HTML-encoded. |
| RESULT_VAR | Static | String | Variable name to store the resulting HTML-encoded value. |
IsObjectLocked
The IsObjectLocked action checks whether an object is currently locked by a workflow job. It does not create or release a lock.
The action returns true when the object is locked and false when it is available for processing.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
OBJECT_ID | Dynamic | Guid | Identifier of the object to check. |
Example: Use IsObjectLocked before an update. Route the false result to the update action when the object is available.
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.
ListToString (V1)
The ListToString action joins all items in a list (SOURCE_VAR) into one text string (TARGET_VAR), with each item separated by the text you provide in SEPARATOR (e.g. ", " or " | ").
If the list is empty, the result is an empty string. If no separator is given, items are joined without any gap. Succeeds as long as SOURCE_VAR holds a valid list. Returns false silently if SOURCE_VAR is empty or not a list.
Functionality
Input:
- A source list (
SOURCE_VAR). - A separator string (
SEPARATOR).
Process:
- Joins all items from the list into a single text string.
- Uses the
SEPARATORbetween each item. - Fails silently (returns
false) if the source is not a valid list or is empty.
Output:
- The joined string is stored in
TARGET_VAR.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| SOURCE_VAR | Static/Dynamic | Object | The input list to be converted to a string. |
| SEPARATOR | Static/Dynamic | String | Text used to separate each item in the resulting string (e.g. ", " or " | "). |
| TARGET_VAR | Static | String | Variable name where the joined string will be stored. |
LinkAttachment (V1)
The LinkAttachment (V1) action links an already-uploaded binary object (METADATA_ID) to the given OBJECT_ID. It validates that the object, group, metadata, and provider are consistent, then confirms the file.
Functionality
Input:
- An already-uploaded binary object ID (
METADATA_ID) - A target object ID (
OBJECT_ID) - An overwrite flag (
OVERWRITE)
Process:
- Validates the object, group, metadata, and provider for consistency.
- Links the binary object to the given object.
- Confirms the file.
Output:
- Returns the attachment ID, stored in
RESULT_VAR.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| METADATA_ID | Static/Dynamic | Guid | ID of the already-uploaded binary object. |
| OBJECT_ID | Static/Dynamic | Guid | Target object ID. |
| OVERWRITE | Static/Dynamic | Bool | Setting to true allows overwriting existing files. |
| RESULT_VAR | Static/Dynamic | String | Variable name to store the resulting attachment ID. |
How to get the METADATA_ID
The METADATA_ID is the file ID returned after uploading a file to a storage provider. Upload the file using the endpoint below, and use the returned attachment/file ID as the METADATA_ID.
Upload File
Uploads a file to a selected storage provider.
POST https://example-gateway.com/RCOMAPI/api/binary-storage/upload
Content type:
multipart/form-data
Fields:
file=<selected file>
storageProviderId=<Storage Provider ID registered in gateway>
Optional header:
Authorization: Bearer <token>
Example:
curl -X POST "https://example-gateway.com/RCOMAPI/api/binary-storage/upload" \
-H "Authorization: Bearer <token>" \
-F "file=@example.pdf" \
-F "storageProviderId=<Storage Provider ID>"
The expected response includes an attachment/file ID, for example:
{
"attachmentId": "<Attachment ID>"
}
The storageProviderId is the storage provider ID. Get it from the Manage Storage Provider page — use the provider ID attached to the designated Object Schema.
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. |
LockObject
The LockObject action locks one or more objects for the current workflow job. While the workflow is running, another workflow job cannot modify those objects.
Locks created by this action are released automatically when the workflow execution completes. The action returns true when every specified object is locked. It returns false when one or more objects cannot be locked.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
OBJECT_IDS | Dynamic | List<Guid> | Identifiers of the objects to lock. |
Example: Use LockObject before a multi-step update to prevent another workflow job from changing the same objects during the operation.
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 Schema 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 (V1)
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 Schema 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.
LookupAttributes (V2)
The LookupAttributes (V2) action searches for a matching object in the specified OBJECT_GROUP_NAME and stores the object's attributes in RESULT_VAR.
The lookup is done using either an ATTRIBUTES dictionary or parameter name/value pairs. Either ATTRIBUTES or at least one parameter pair must be configured.
Compared to V1, this version adds support for object reference columns. When object reference columns are selected in COLUMN_NAMES, the result includes the referenced object's unique group name.
Functionality
Input:
- Object Schema name to search in
- Matching criteria using either:
ATTRIBUTESdictionary, or- Parameter name/value pairs such as
PARAM_NAME1/PARAM_VALUE1
- Optional column selection using
COLUMN_NAMES - Optional default fallback using
RETURN_DEFAULTandDEFAULT_VALUE
Process:
- Searches the specified Object Schema for an object matching the provided criteria.
- If
COLUMN_NAMESis provided, only the selected attributes are returned. - If
COLUMN_NAMESis not provided, all attributes of the matching object are returned. - If selected columns include object reference columns, the referenced object's unique group name is included in the result.
Output:
- Stores the matching object's attributes as a dictionary in
RESULT_VAR.
Return:
- Returns
truewhen a matching object is found. - Returns
falsewhen no matching object is found andRETURN_DEFAULTis not enabled. - If no match is found and
RETURN_DEFAULTis enabled, storesDEFAULT_VALUEinRESULT_VAR.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| OBJECT_GROUP_NAME | Dynamic | String | Name of the Object Schema to search within. |
| ATTRIBUTES | Dynamic | Dictionary<String,Object> | Dictionary of attribute key-value pairs to match. |
| PARAM_NAME1 | Static | String | Name of the first parameter to match. |
| PARAM_VALUE1 | Dynamic | Object | Value for PARAM_NAME1. |
| PARAM_NAME2 | Static | String | Name of the second parameter to match. |
| PARAM_VALUE2 | Dynamic | Object | Value for PARAM_NAME2. |
| COLUMN_NAMES | Static/Dynamic | List<String> | Optional list of attribute names to return. If object reference columns are selected, the referenced object's unique group name is included. |
| RETURN_DEFAULT | Static/Dynamic | Bool | If enabled, returns DEFAULT_VALUE when no matching object is found. |
| DEFAULT_VALUE | Static/Dynamic | Dictionary<String,Object> | Default dictionary to store in RESULT_VAR when no match is found and fallback is enabled. |
| RESULT_VAR | Static | String | Variable name where the resulting dictionary will be stored. |
Either ATTRIBUTES or at least one parameter name/value pair must be configured. Without a valid lookup condition, the action cannot find a matching object.
Use this action when you need to retrieve all or selected attributes of a single matching object, with optional fallback behavior when no match is found.
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 (V1)
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 Schema 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.
ReadObject (V2)
The ReadObject (V2) action retrieves object details by OBJECT_ID and loads the result into the current tag details context.
Compared to V1, this version adds support for object reference columns. When object reference columns are selected in COLUMN_NAMES, the result includes the referenced object's unique group name.
Functionality
Input:
- Object ID of the object to retrieve
- Object Schema name to scope the lookup
- Optional list of column names to fetch
Process:
- Reads the object matching the provided
OBJECT_ID. - The lookup is scoped to the specified Object Schema.
- If
COLUMN_NAMESis provided, only the selected fields are retrieved. - If
COLUMN_NAMESis not provided, all available object details are retrieved. - If object reference columns are selected, the referenced object's unique group name is included in the result.
- Loads the retrieved object data into the current tag details context.
Output:
- Stores the retrieved object details in
RESULT_VAR.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| OBJECT_ID | Static | Guid | Unique identifier of the object to retrieve. |
| OBJECT_GROUP_NAME | Static | String | Optional Object Schema name or ID used to scope the lookup. |
| COLUMN_NAMES | Static | List<String> | Optional list of fields to retrieve. If object reference columns are selected, the referenced object's unique group name is included. |
| RESULT_VAR | Static | String | Variable name where the retrieved object details will be stored. |
Use this action when you need to load a specific object's details into the current tag details context for later workflow decisions or transformations.
ReadObjectGroup
Retrieves metadata and configuration details of a specified Object Schema 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 Schema to be fetched |
| RESULT_VAR | Static | String | Name of the variable where the Object Schema 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.
SetDictionary (V2)
The SetDictionary (V2) action writes up to 5 key-value pairs (KEY1–KEY5 / VALUE1–VALUE5) into a dictionary (OBJECT). Works with both Dictionary<string, object> and Dictionary<string, string>.
What's Different from V1
- Advanced Control Flags: V2 adds optional switches (
ALLOW_OVERWRITE,CLEAR_BEFORE_SET,CHECK_KEY_EXISTSandCHECK_KEY) granting granular control over pre-write dictionary validation, state-clearing, and conditional execution paths.
KEY1 and VALUE1 are required; the rest are optional — leave a KEY blank to skip that slot. Three optional switches give you fine-grained control:
ALLOW_OVERWRITE: when on, existing keys are updated; when off, existing keys are left untouched (safe mode).CLEAR_BEFORE_SET: when on, the dictionary is emptied before the new entries are written.CHECK_KEY_EXISTS: when on, the action checks whether the key you enter inCHECK_KEYalready exists in the dictionary before writing; takes the true (green) path if it does, false (red) path if it does not.CHECK_KEYis only used whenCHECK_KEY_EXISTSis enabled; leave it blank otherwise.
Functionality
Input:
- A target dictionary (
OBJECT). - Up to 5 key-value pairs.
- Configuration flags (
ALLOW_OVERWRITE,CLEAR_BEFORE_SET,CHECK_KEY_EXISTS,CHECK_KEY).
Process:
- Clears the dictionary first if
CLEAR_BEFORE_SETis enabled. - Checks if
CHECK_KEYexists ifCHECK_KEY_EXISTSis enabled. - Adds or updates the key-value pairs depending on
ALLOW_OVERWRITE. - Fails with an error if
OBJECTis not set or is not a supported dictionary type.
Output:
- The updated dictionary.
- Returns
trueorfalsefor branching based onCHECK_KEY_EXISTSmode.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| OBJECT | Static/Dynamic | Dictionary<string, object> | The dictionary variable to update. |
| KEY1 | Static/Dynamic | String | Required. The first key to set. |
| VALUE1 | Static/Dynamic | Object | Required. The value for the first key. |
| KEY2 | Static/Dynamic | String | Optional. The second key to set. |
| VALUE2 | Static/Dynamic | Object | Optional. The value for the second key. |
| KEY3 | Static/Dynamic | String | Optional. The third key to set. |
| VALUE3 | Static/Dynamic | Object | Optional. The value for the third key. |
| KEY4 | Static/Dynamic | String | Optional. The fourth key to set. |
| VALUE4 | Static/Dynamic | Object | Optional. The value for the fourth key. |
| KEY5 | Static/Dynamic | String | Optional. The fifth key to set. |
| VALUE5 | Static/Dynamic | Object | Optional. The value for the fifth key. |
| ALLOW_OVERWRITE | Static/Dynamic | Bool | If true, allows updating existing keys. |
| CLEAR_BEFORE_SET | Static/Dynamic | Bool | If true, clears the dictionary before setting keys. |
| CHECK_KEY_EXISTS | Static/Dynamic | Bool | If true, checks the existence of CHECK_KEY. |
| CHECK_KEY | Static/Dynamic | String | The key to look up if CHECK_KEY_EXISTS is true. |
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 Schema 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 Schema.
- 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 Schema 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 Schema. 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 Schema ID (GROUP_ID), Object Schema 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 Schema 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 Schema 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 Schema name (OBJECT_GROUP_NAME), attribute dictionary (ATTRIBUTE_DATACONTEXT), and user ID (USER_ID).
Process:
- Locates the target object in the specified Object Schema.
- 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 Schema 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 (V1)
The SetObjectInstant block creates or updates an object in the specified Object Schema 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 Schema 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 Schema.
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 Schema 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 Schema schema.
SetObjectInstant (V2)
The SetObjectInstant (V2) action creates or updates an object immediately during workflow execution, instead of queuing the operation until the workflow finishes.
This action is useful when the created or updated object must be available for later actions in the same workflow.
Compared to V1, this version does not perform implicit type conversion. Attribute values provided in ATTRIBUTE_DATACONTEXT must already match the expected data types defined in the Object Schema schema.
Functionality
Input:
- Object ID of the object to create or update
- Optional group name or label
- Object Schema name where the object belongs
- Attribute dictionary containing object values
- User ID used for the operation
Process:
- Checks whether an object with the provided
OBJECT_IDalready exists. - If the object exists, it is updated immediately.
- If the object does not exist, a new object is created immediately.
- Writes the object directly during workflow execution.
- Validates the provided attribute values against the expected schema types.
- Does not automatically convert mismatched attribute types.
Output:
- No result object is returned.
- The object is committed immediately to the specified Object Schema.
Return:
- Returns
truewhen the object is successfully created or updated. - Returns
falsewhen the operation fails, for example because of missing required fields, schema mismatch, or invalid attribute types.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| OBJECT_ID | Static | Guid | Unique identifier of the object to create or update. |
| GROUP | Static | String | Optional group name or label used to categorize the object. |
| OBJECT_GROUP_NAME | Dynamic | String | Name of the Object Schema where the object should be created or updated. |
| ATTRIBUTE_DATACONTEXT | Dynamic | Dictionary<String,Object> | Dictionary of attribute names and values to write. Values must match the expected schema types exactly. |
| USER_ID | Dynamic | Guid | ID of the user performing or associated with the create/update operation. |
SetObjectInstant (V2) does not convert attribute values automatically. Make sure every value in ATTRIBUTE_DATACONTEXT matches the expected data type in the Object Schema schema.
Use this action when later workflow steps depend on the object being created or updated immediately.
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.
SOAPRequest (V1)
The SOAPRequest (V1) action sends a SOAP request to a specified endpoint and exposes the results to the workflow. It sends the configured XML to the endpoint, validates the HTTP response, and parses the returned XML to extract the SOAP Body or Fault.
It stores the raw response, the parsed result, and diagnostic fault information for downstream steps. SOAP faults are treated as errors. Timeout, retry behavior, and HTTP success-range validation are applied during execution.
Functionality
Input:
- A valid SOAP endpoint URL and XML payload.
- Configuration for SOAP action, authentication, and connection policies.
Process:
- Constructs the SOAP payload and headers.
- Sends the request to the endpoint.
- Applies standard timeout and retry policies.
- Validates the response against HTTP success codes and parses the payload.
Output:
- The raw response XML is saved to
RESPONSE_XML_VAR. - The extracted results are stored in
PARSED_RESULT_VAR. - Fault statuses are written to
STATUS_FAULT_VAR.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| ENDPOINT_URL | Static/Dynamic | String | Target SOAP endpoint URL. |
| SOAP_VERSION | Static/Dynamic | String | Target SOAP version. |
| SOAP_ACTION | Static/Dynamic | String | Desired SOAP action inside the request. |
| REQUEST_XML | Static/Dynamic | String | Raw XML payload for the request. |
| REQUEST_HEADER | Static/Dynamic | Dictionary<string,string> | Request headers applied to the outgoing connection. |
| AUTH_TYPE | Static/Dynamic | String | Authorization type format (e.g. None). |
| USERNAME | Static/Dynamic | String | Authentication username (if required). |
| PASSWORD | Static/Dynamic | String | Authentication password (if required). |
| TOKEN | Static/Dynamic | String | Bearer or API token. |
| TIMEOUT_MILLIS | Static/Dynamic | Int | Connection timeout in milliseconds. |
| RANGE_OK_RESPONSES | Static/Dynamic | String | Range string to classify success codes. |
| COUNT_RETRIES | Static/Dynamic | Int | Number of maximum retry attempts. |
| RETRY_WAIT_MILLIS | Static/Dynamic | Int | Delay between retry attempts. |
| RESPONSE_XML_VAR | Static | String | Target variable for the raw response XML. |
| PARSED_RESULT_VAR | Static | String | Target variable for parsed SOAP extraction. |
| STATUS_FAULT_VAR | Static | String | Target variable for fault diagnostic outputs. |
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 |
UnlockObject
The UnlockObject action releases a lock held by the current workflow job before the workflow completes. Use it when another workflow job should be able to process the object before the current workflow ends.
The action returns true when the requested locks are released. It returns false when a lock cannot be released, for example because it is held by another active workflow job.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
OBJECT_IDS | Dynamic | List<Guid> | Identifiers of the objects to unlock. |
Example: Use UnlockObject after the protected update is complete when later workflow steps do not need the lock.
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 Schema 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 Schema 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.
ValidateJsonSchema (V1)
The ValidateJsonSchema (V1) action validates a JSON input against a JSON schema.
It returns true if the input is valid against the schema, and false otherwise.
Functionality
Input:
- A JSON input text (
INPUT). - A JSON schema definition (
SCHEMA).
Process:
- Evaluates the inputs and checks if the
INPUTproperly conforms to theSCHEMA.
Return:
true→ if the input is valid.false→ if the input is invalid.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
| INPUT | Static/Dynamic | String | The JSON input string to be validated. |
| SCHEMA | Static/Dynamic | String | The JSON schema string to validate the input against. |
WaitLock
The WaitLock action waits for one or more objects to become available, then locks them for the current workflow job. It checks again at the configured interval until it acquires every requested lock or reaches the timeout.
The action returns true when every requested object is locked. It returns false when the timeout expires before the locks can be acquired.
⚙ Parameters
| Name | Mode | Type | Description |
|---|---|---|---|
OBJECT_IDS | Dynamic | List<Guid> | Identifiers of the objects to lock. |
POLL_INTERVAL_MS | Dynamic | Int | Time, in milliseconds, between lock attempts. |
WAIT_TIMEOUT_MS | Dynamic | Int | Maximum time, in milliseconds, to wait for the locks. |
Example: Use WaitLock before a critical update when another workflow job might be processing the same object.
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.