Workflow Reference Guide
Business Enterprise
This article provides a comprehensive breakdown of all of the triggers, activities, and flow control structures available within Workflow Studio. If you’re just getting started with Workflow Studio, consider checking out this article first: https://gruntify.atlassian.net/wiki/spaces/GRUNTIFY/pages/828473345.
Jump to a section on this page:
- 1 Triggers
- 2 Activities
- 2.1 Asset Activities
- 2.2 Job Activities
- 2.3 Request Activities
- 2.4 HTTP Activity
- 2.4.1 Security Measures
- 2.5 Email Activity
- 2.5.1 Send Email Task
- 2.5.2 Share Export Tasks
- 2.6 Notification Activity
- 2.7 Table Activity
- 3 Flow Control Structures
- 3.1 Parallel Branch
- 3.2 Exclusive Branch
- 3.3 Loop
Triggers
Asset | Asset Created Asset Updated |
Job | Job Created Job Updated Job Status Changed |
Request | Request Created Request Updated Request Status Changed |
Manual | Manual Trigger |
Schedule / Timer
| Schedule/Timer Trigger For testing purposes, timer triggers allow you to manually run the workflow with the ‘Run Workflow’ button that Manual workflows also have. Tip! Advanced users can set a custom Cron expression for the schedule by opening the ‘Input Data’ tab, selecting the type dropdown (T icon), and selecting ‘Change input type’. The free text field now accepts a custom Cron expression. The timer trigger operates based on your workspace timezone. This is automatically set when your workspace is first created based on the timezone of the original Primary Owner. If you need help discovering or changing your workspace timezone, contact our support team. |
HTTP
| HTTP Trigger To use this trigger, use will need to set a ‘slug’ (human readable ID) of the trigger, and this will define the URL which the third party app must send a POST request to (ex. Requests to this URL must be signed in with a valid Gruntify account for that workspace. To get an authentication token, use this endpoint on the Gruntify API. Optionally, you can specify an idempotency token as well as dynamic parameters to send to the workflow as outputs of the trigger in the request body. See an example below: {
"idempotencyToken": "unique-token-12345",
"parameters": {
"sourceEventId": "12345",
"invokingUser": "First Name Last Name"
}
} |
Activities
Asset Activities
Activity | Description | Inputs | Outputs |
|---|---|---|---|
Create Asset | Create a new Asset | Asset Form & details | Asset Reference |
Update Asset | Update an existing Asset | Asset Reference & Form data | None |
Generate Link to Asset | Generate a URL to an existing Asset | Asset Reference | URL |
Read Asset | Read the details of an existing Asset | Asset Reference | Asset Form & details |
Read Asset User Details | Read the details of users associated with an existing Asset | Asset Reference | Asset creator & last modifying user details |
Comment on Asset | Adds a comment to an asset | Asset Reference & Comment text | None |
Activate Asset | Activates an existing inactive asset | Asset Reference | None |
Deactivate Asset | Deactivates an existing active asset | Asset Reference | None |
Search Assets | Searches for assets in the workspace given one or more filters | Asset Filters & maximum results | Array of Asset summaries (no form data) |
Job Activities
Activity | Description | Inputs | Outputs |
|---|---|---|---|
Create Job | Create a new Job | Job Template & details | Job Reference |
Update Job Pre-Work Form Data | Update the Pre-Work Form data of an existing Job The Job Form must have a Pre-Work Form configured, and the Job must be in the Draft, Unassigned, Queued, Rejected, In Progress, or Pending Review Status | Job Reference & Form data | None |
Update Job Work Form Data | Update the Work Form data of an existing job The Job must be in the In Progress or Pending Review Status | Job Reference & Form data | None |
Read Job User Details | Read the details of users associated with an existing Job | Job Reference | Job creator, last modifying user, and checked in user (if checked in) details |
Generate Link to Job | Generate a URL to an existing Job | Job Reference | URL |
Perform Job | Create a new Job and pause the Workflow until the Job has been completed | Job Template & details | Job Reference |
Read Job | Read the details of an existing Job | Job Reference | Job Form(s) & details |
Cancel Job | Cancel an existing Job The Job must not be in the Completed or Cancelled Status | Job Reference & cancellation reason | None |
Pass Review | Pass the review of an existing Job, moving it to Completed The Job must be in the Pending Review Status | Job Reference | None |
Fail Review | Fail the review of an existing Job, moving it back to Queued The Job must be in the Pending Review Status | Job Reference | None |
Comment on Job | Adds a comment to a Job | Job Reference & Comment text | None |
Reassign existing Job | Reassign an Existing Job to a different team, or change to unassigned/automate assignment | Job Reference, Allocation type, and Allocated team (only for team assignment) | None |
Search Jobs | Searches for jobs in the workspace given one or more filters | Job Filters & maximum results | Array of Job summaries (no form data) |
Job Status Changed (Event) | Pause the Workflow until an existing Job has entered a specific Status | Job Reference & Job Status(es) | Job Reference & Status |
Request Activities
Activity | Description | Inputs | Outputs |
|---|---|---|---|
Create Request | Create a new Request | Request Form & details | Request Reference |
Read Request | Read the details of an existing Request | Request Reference | Request Form & details |
Read Request User Details | Read the details of users associated with an existing Request | Request Reference | Request creator, last modifying user, and ‘submitted on behalf of’ details |
Generate Link to Request | Generate a URL to an existing Request | Request Reference | URL |
Accept Request | Set the Status of an existing Request to Accepted The Request must be in the Submitted Status | Request Reference | None |
Reject Request | Set the Status of an existing Request to Rejected The Request must be in the Submitted Status | Request Reference | None |
Update Request | Update an existing Request | Request Reference & Form data | None |
Assign Request | Add or change the assignee of an existing Request | Request Reference, Assignee User Reference, and Notes | None |
Comment on Request | Adds a comment to a Request | Request Reference & Comment text | None |
Search Requests | Searches for requests in the workspace given one or more filters | Request Filters & maximum results | Array of Request summaries (no form data) |
Request Status Changed (Event) | Pause the Workflow until an existing Request has entered a specific Status | Request Reference & Request Status(es) | Request Reference & Status |
HTTP Activity
This activity allows you to seamlessly send data from Gruntify to another application via a HTTP request. This event-driven HTTP request model is often referred to as ‘web hooks’ and removes the need for external apps to regularly poll Gruntify for updates to your Requests, Jobs, or Assets.
Security Measures
There are inherent risks that arise when we enable you to communicate directly from Gruntify to another app or service. For security reasons, protections have been put in place to protect you and your data when using HTTP tasks. See a complete list of protections below.
HTTP requests are rate limited to at most one every 5 seconds per workspace
Only HTTPS URLs are allowed
All HTTP requests will include headers which identify your workspace and workflow
Certain headers are not allowed to be overridden (such as
Content-Type,User-Agent,X-Forwarded-For, etc.)Response content will not be returned as an output except under the following circumstances:
The HTTP request fails and “Allow failed status codes or timeout” is on
We have manually verified your workflow as non-malicious and enabled response returns from our end (raise a support ticket to initiate this process)
Activity | Description | Inputs | Outputs |
|---|---|---|---|
Send HTTP GET Request | Sends a HTTP GET request to the specified URL with any necessary headers attached. | Endpoint URL, Headers & Failure tolerance | Response (if permitted) |
Send HTTP POST Request | Sends a HTTP POST request to the specified URL with any necessary headers attached ad an optional body. Request body must be stringified JSON data. You can achieve this by using | Endpoint URL, Request body, Headers & Failure tolerance | Response (if permitted) |
Email Activity
This activity allows you to send an email message or export file to one or more email addresses. The recipients of the email do not need to be users in your workspace.
Send Email Task
The send email task allows you to send a regular email message from Gruntify. In addition to sending text information, you can optionally attach a URL to create an action button at the bottom of the email.
To include parameters in the Subject & Body of the email, you can use Handlebars syntax. For example: {{ request1234.form.controlA }} would be transformed into the text content of the control with ID ‘controlA’.
Within the Body of the email, you can use basic HTML to achieve text formatting (bold, italics, lists, headings, etc.), but this is optional. We will automatically infer some formatting for you (such as gaps between text blocks) so that you can write plain text for simple messages. Please note that any non-text HTML (including images) will be stripped before it is sent to the recipient.
To protect recipients from spam, emails sent from Workflows will include an ‘Unsubscribe’ button. For more information, see this article: https://gruntify.atlassian.net/wiki/spaces/GRUNTIFY/pages/1328021514
Inputs
One or more recipient email addresses
Subject line
Body text
Action button label (optional)
Action button link (optional) - must start with: ‘http://’, ‘https://’, ‘ftp://’, or ‘ftps://’
Share Export Tasks
The share export tasks allow you to generate and send a Gruntify data export automatically. These tasks are equivalent to using the shared export functionality from the export popup in the web app. You can only send an export of a single Request, Job, or Asset at a time.
Activity | Description | Inputs | Outputs |
|---|---|---|---|
Share Job Export | Generate an export file of a particular Job and send it to the selected recipients | Recipient Email Addresses, Export Type & Template, Job Reference, and a Message (optional) | None |
Share Asset Export | Generate an export file of a particular Asset and send it to the selected recipients | Recipient Email Addresses, Export Type & Template, Asset Reference, and a Message (optional) | None |
Share Request Export | Generate an export file of a particular Request and send it to the selected recipients | Recipient Email Addresses, Export Type & Template, Request Reference, and a Message (optional) | None |
Notification Activity
This activity contains a task to send a notification through the Gruntify notification system to one or more users. This task is similar to Send Email but has the added advantage of supporting Push Notifications to users' devices.
Prerequisite: Workspace Owners must first purchase and enable the Push Notifications addon from the Addons page for the Notification activity to send push notifications.
To include parameters in the Subject & Body of the notification, you can use Handlebars syntax. For example: {{ request1234.form.controlA }} would be transformed into the text content of the control with ID ‘controlA’.
Unlike the Email activity, the notification activity does not support HTML formatting in the body
Inputs
One or more users; OR
A team
Subject line
Body text
Action button link (optional)
Table Activity
This activity contains a task to create a “lookup table”. A lookup table allows you to define some variables which can be referred to later, such as data calculations or aggregations that may be needed in multiple following tasks.
Start by clicking on the input area under the ‘Table’ heading in ‘Input Data’. Here, you will be able to define the structure of the table. Give each table parameter a human-friendly display name as well as a parameter (internal) name, and then select the data type. Note that the data type which you select is used to inform the Parameter Selector as to which parameters are available, but is not strictly enforced at run time.
Tip! You may have noticed the ‘Is Secret’ slider for each parameter. When you turn this on for a parameter, its value or expression will be double-layer encrypted at rest. Secret parameters will also not be exposed in instance logs for the lookup table task. A good use case for these is storing API key parameters which may be required in outgoing HTTP tasks.
Once you have defined and saved the structure of your table, click the ‘Edit’ button to the right of the ‘Table’ header. In this popup, you can define a value for each parameter in the table. You can do so statically, or with another parameter or advanced expression. Now, your table’s parameters will be available to use in any subsequent tasks you require.
Flow Control Structures
Parallel Branch
Split the Workflow into 2 or more branches with each branch running at the same time. All branches must run and complete before they come back to one point and then the Workflow can continue.
This structure is useful for improving performance of large Workflows where multiple tasks can run simultaneously.
Exclusive Branch
Split the Workflow into 2 or more branches with only one branch being executed depending on a predefined condition. This is a decision point, equivalent to a ‘diamond’ shape in flow-chart syntax.
To test multiple conditions, you can nest another exclusive branch inside of an outer one.
Loop
Iterate over data (any array type) and perform a set of actions for each data item. Alternatively, you can set an iteration count to perform a set of actions a fixed number of times.
Currently, loops will only run a maximum of 600 iterations. Attempting to run more than that will result in a failure at runtime. If you have a unique use case that requires more than 600 iterations, please raise a support ticket with us.
There are 2 drop areas for activities in the structure:
The first (inner) drop area is where you place tasks that should run for each iteration of the loop
The second (outer) drop area is where you place tasks that should run after every iteration of the loop has completed
Unlike other control flow structures, loops have a handful of outputs that you can use:
‘Current Value’ is only available to tasks inside the loop - it represents the current data item in the array that we are iterating
‘Current Iteration’ is only available to tasks inside the loop - it represents the current iteration count that we are at (starting from 0)
‘Iteration Outputs’ are available both inside and outside of the loop - it is an array of all of the task outputs from within the loop, where each entry is an object that represents the outputs of a particular iteration
Related articles