What is Context?
Context is a JSON structure which is updated at each step in your sequence and is enriched by workflows or UI Jobs. During execution, the Context holds the state of your sequence and is used to transfer variables and information between stages in your sequence. Once completed, Context is saved with your sequence and you may consider it as the history of your sequence execution.
Forms and context
Forms objects will automatically try to read values from Context and will write values back when form is saved.
Global variables and Global context
The Global Context contains global variables and is copied from task to task, and between workflows and forms.
Globals can be accessed using this syntax:
gc[“my_var”] = my_value
or
gc.my_var = my_value
Local variables
Local vars are defined in a workflow task. As a part the Context, local variables will be copied from task to task.
However, local variables are not passed to another workflow or form. Only values defined in the Global Context (i.e global variables) will be copied.
Locals can be addressed using this syntax:
my_local_var = value
Tracking context values
In order to track context values, go to the admin sequence menu item and select your sequence instance.
Click on the icon to display the current context values at the end of each step. This shows only the global context values.
Tracking local context values
To display context variables local to a workflow execution, select a workflow and expand the Flat tasks item. Select the desired task and you will see input and output context items. Expand one of them to see the context values.
Accessing Global Context from JS Callbacks
Forms provides Javascript callbacks for each object. You may want to access some of the variables in your context from the Javascript side.
You can the following syntax to access the Context from within a Javascript callback.
input_context.myvar
Specific form object context values format
Each object in a form read and save data in a specific format. A string field will save a simple string. However, more complex objects save more complex data structures, such as the media_selector context value, for example:
media_selector context value
"media_selector": { "files": [ { "file_profile": "N/A", "file_format": "QuickTime / MOV", "file_duration": "0:03:28", "file_name": "reggae.mov", "file_frame_rate": 23.976023976023978, "uri": "file:///mnt/sharing1/media_sources/reggae.mov", "file_bytes": "75119658", "is_video_file": true, "last_modification": 1581110851.0702932, "file_size": "75.1 MB", "position": 7, "file_seconds": "208.361667", "mapped_path": "\\PULSE-IT-AD\sharing-ad\\media_sources\\reggae.mov" } ], "__media_tag__": "root_media_selector", "connector_data": { "connector_key": "media_sources", "mode": "online", "co_directory": "/mnt/sharing1/media_sources/" }, "file_url": "/automateit/directory/get_file?connector_key=...", "thumbnail": "/automateit/directory/get_file_thumb?connector_key=...", "connector": "Directory_Connector", "connector_type": "directory", "tag": "root_media_selector", "id": "select_media", "order": 0, "file_path": "/mnt/sharing1/media_sources//reggae.mov" },
Uploader context value
"uploader": [ { "mounted_path": "\\\\PULSE-IT-AD\\sharing-ad\\media_sources\\", "name": "DSC_7599.jpg", "stored_name": "9bdf6d64-75c9-446c-b75e-0a464e538ef4.jpg", "uuid": "9bdf6d64-75c9-446c-b75e-0a464e538ef4", "__id__": "c3480b4d-7a45-4f2b-a780-1770e8bf4ea3", "thumbnailUrl": "/automateit/directory/get_file?connector_key=…", "size": "2110502" } ],
Context values step by step
The diagram below shows a simple testing sequence.
It will execute 2 chained workflows, then display a form and then link to another workflow. We will add values in our context and see how those values are going to be managed.
Workflow 1
Our workflows will set the “Agent context parameters” values to be “starting workflow 1”, “starting workflow 2”, …
And here is the detailed view of workflow 1.
Let’s examine each task.
Start Task
There is no configuration on this task.
Task message
We have defined a callback when the task initializes which sets 2 variables
callback_var = "on init" gc["callback_global"] = "on init"
Eval code task
This task defines 1 global and 1 local variable.
myvar = "local" gc["global"] = "global"
Task message
There is no configuration on this task.
Conclusion
By looking into the context debugger we can see:
Starting a sequence will automatically define some global variables
- deadline
- title
Some variables are defined as Globals
- workflow context
- global
- callback_global
Some Variables are defined as Locals
- mywar
- callback_var
Workflow 2
Our 2nd Workflow sets the Agent Context parameter “workflow context” to “Starting workflow 2”
Let’s check our variables in context
Conclusion
- Locals has been removed from context
- Globals has been copied from Workflow 1 to Workflow 2
UIJob
We are now going to use a UI Job and check what variables can be accessed.
Our Form fields
myvar string
global string
value string
callback_global number
On top of that, we have defined a Notification workflow, that will be triggered on any event.
Conclusion
- Automatic mapping of globals (global)
- No mapping for locals (i.e myvar and value)
- callback_global is not displayed because it has the wrong type. ‘on init’ value can’t be converted to number value.
Notifications
Our Notifications workflow has specific context values.
The notifier structure
Workflow 3
Our 3rd Workflow sets the Agent Context parameter “workflow context” to “Starting workflow 3”
Conclusion
- Undefined vars presented in forms will be created as globals
- Form field myvar is now a global
- callback_global remains unchanged because form type (number) is different from variable type (string)
Child contexts and loops
When using iterators or loops, you should remember that the context in the iterator and the context in the iterated part may be different.
Therefore, the while loop condition should be a global variable, otherwise this condition will not be changed by other tasks in the workflow.
It is the same issue if your code is looping.
Let’s say we have this simple loop workflow which increments count by one until count is greater than 5.
Evalcode1:
count = 0
If or Not:
if count > 5
EvalCode2:
count = count + 1
This will not work because ‘count = count + 1” is changing the value of count in the copy of the context used by “if or Not”.
count will be incremented to 1 by EvalCode2 and then be equal to 0 when looping to “If or Not” and restoring its context.
Job settings
For each job, you can change the way context are exported.
By default, context will be duplicated when passed to the next task. This is the easiest method.
The second choice is to select ‘Through task key’. In this case, context will be available from other tasks using the task_key prefix.
Example:
Incrementing count from the eval code tasks is done by prefixing count by the while task key.
Accessing System variables
Workflows and sequence variables can be accessed from any evaluated expression using the 'task.workflow' object (ex: task.workflow.workflow_name).
Variable name | Description |
instance_id | current workflow instance id |
template_id | workflow template id for current instance |
workflow_name | workflow template name for current instance |
sequence_id | Sequence id for current instance (if executed from a sequence) |
sequence_name | Sequence name for current instance (if executed from a sequence) |
sequence_job_id | Job id for current instance (if executed from a sequence) |
node_name | Node name executing the current workflow |
node_id | Node id executing the current workflow |
Was this article helpful?
That’s Great!
Thank you for your feedback
Sorry! We couldn't be helpful
Thank you for your feedback
Feedback sent
We appreciate your effort and will try to fix the article