Actions
This section covers actions, which are the steps in a workflow that perform different tasks
Last updated
This section covers actions, which are the steps in a workflow that perform different tasks
Last updated
Actions are the things that makes stuff happen in your app. They are the the part of a workflow that performs a specific task, such as making a change in the database, hiding/showing/animating something on the page or navigating to a different page.
Actions happen as the result of an , and together, they make up the workflow.
Events determine when to do something, and actions determine what to do
Actions can be chained together to perform a set of tasks in sequence, and each step can rely on information generated in a previous step. Each step can also be controlled with a dynamic expression that controls whether to run or skip that step, based on specific conditions.
In the Bubble workflow editor, actions are visible as soon as you create or open a workflow from the sidebar.
To add the first action to a workflow, click the + symbol underneath the event. You will see a list of actions separated into categories.
You can add new actions to use across your app by installing plugins or by adding API calls with the API Connector with use as set to action.
Article: The API Connector
As soon as you add or click an action, Bubble will show you the settings for that action. Below is an example from the action:
The Thing to change specifies the of the thing you want to change. After selecting it, Bubble will display the available on that . In the example above we change the name of the user by providing a static text value.
A workflow can consist of as many steps as you need, but sometimes you'll need to set some rules that determine whether one of those steps should execute or not. For example, you could have a workflow that requires the user to be logged in in order to run; if they are not, you can show an error message.
For this, you use the only when field: as the name suggests, this tells Bubble to only run this action when... a condition is true. Conditions are that provide a yes or no value, depending on a given set of factors.
This step relies on using dynamic expressions to set up conditions in order to determine whether to run a workflow or action. If you're not familiar with these concepts, we recommend first reading the articles below:
Article: Dynamic expressions
Article section: Conditions (only when)
Note: Although a workflow is created as a linear set of actions, there is a lot going on behind-the-scenes when a workflow executes. This can sometimes lead to some steps firing before other, earlier steps in some cases.
Some workflows run in the client's browser, while others (such as database operations) need to happen on Bubble's server. Some workflows will happen in both the browser and on the server.
If a workflow includes a mix of actions from these three categories, the order in which they are triggered may differ from the linear design in the workflow because of what's firing in the browser versus the server.
The points below offer insights into Bubble's workflow logic along with some general recommendations. It is worth mentioning that the terms "steps" and "actions" are used interchangeably, although in the given examples, "steps" are used when the order is significant.
For efficiency purposes, workflows run in parallel across the server and the front end. Despite the names "Step 1," "Step 2," it is important to note that a given step does not necessarily wait for the previous one to complete before triggering the next one. The following is some information about Bubble workflow logic and general recommendations. Please also note that steps and actions are used interchangeably, but steps may be used in these examples when the order is important to note.
General rules about how workflows run:
Frontend workflow actions run in order but the next action does not wait on the previous action to be complete before triggering.
Backend workflows are triggered as soon as the workflow is triggered, independently from steps. For example, a "Schedule API Workflow" action will be triggered as soon as the workflow is triggered even if it is placed last in the workflow action sequence.
Custom events run in sequence, not parallel. If Workflow 1 triggers a custom event that starts Workflow 2, Workflow 2 will complete before the remaining actions in Workflow 1 run.
Searches aren’t always immediately updated with new data. So if you create a new item, and then try to retrieve it via search, it may or may not work; you should not rely on this.
Retrieving a thing from “result of step X” where step X is the “Create…” step should always be safe.
Workarounds to help achieve workflow consistency:
When a workflow trigger (e.g. a button) can have multiple results based on conditions, it is safer to create multiple workflows and place the conditions at the workflow level instead of creating one workflow with all possible actions and placing the conditions at the action level.
In a workflow with two actions, if Step 2 is using a condition based on a search depending on data manipulated in Step 1, then Step 1 should be implemented into a custom event to make sure it is finished before moving on to Step 2.
If a backend workflow should be triggered after other steps in the workflow, then it should be implemented in a custom event placed after the steps that need to come first.
The safest way to use data from one step to another is to use the “Result of step X” operators instead of searches.
We do not offer the explicit ability for an action to wait for a workflow to be over before moving on to the next step; however, using "add a pause before next action" action is usually an effective workaround.
Sometimes an action needs to refer to an earlier step in the same workflow. If you do this by referring to it indirectly, there is a risk that the change you initiated has not yet had time to update and may not be reflected in the later step. Let's look at an example to illustrate this:
Let's say you are using the to save some information to a data type called Product. In a later step, you refer to that same product by the data source Result of step 1 and then that Product's name.
In this example we are first changing the name of the Product
And then we use the to save that name in a custom state