UI Bakery Docs
RoadmapRelease notesSign In
  • 👋Welcome to UI Bakery!
  • 🌟Overview
    • 💡Video intro
    • ✨Main features
    • 🔖Glossary
  • 🛠️Getting started
    • Create an application
    • Build UI
      • Data mocking methods
    • Link components
    • Connect a data source
    • Load data
    • Bind data to UI
    • Transform data with JavaScript
      • Data mapping & transforming
    • Change component data
    • Send a form
    • Create a filter
    • Note on debugging
    • Deploy your application & invite users
  • 📌Concepts
    • Components
      • Component basics
      • Component methods
      • Components best practices
        • Input validation
        • Linking a Table to a Form/Detail
        • Using a single Form to add and update data
        • Searching Table based on input value
        • Configuring server-side pagination
        • Managing Date object time zones
        • Role-based Menu component items
        • Field types & types recognition
          • Select/Tag field: Utilizing Tag mapper
        • Expanding component to fit screen/container
        • Controlling component's visibility
    • Custom components
      • Unrestricted custom components
    • Data sources
      • Data source environments
      • Connecting local database via ngrok
      • SSH Tunneling
    • Actions
      • Actions basics
        • Calling actions from code
      • Actions management & shortcuts
      • Actions settings
      • Actions library
      • Server actions
      • Logs and debugging
    • App & page triggers
    • UI Bakery variables
    • State variables
    • Local storage
    • Modules
    • Custom JavaScript
      • JavaScript files
    • Workspace management
      • Account & workspace
      • Seats & Shared permission groups in UI Bakery
      • Roles in UI Bakery
      • Role permissions
      • Explore the interface
      • App environments
        • Release management
      • Audit logs
      • Multi-factor authentication
    • Export & import an app
    • Mobile layout
    • Theme editor
      • Changing theme from the app
    • UI Bakery source control
      • Git controls overview
      • Migrating your app model to the latest version
  • ⚡How-tos
    • File management
      • Working with PDF files
      • CSV import & export
      • Uploading files using methods
      • Displaying files from Google Drive and Dropbox
      • Parsing and sending XML
    • Styling
      • Modifying components with CSS
    • Layout & navigation
      • Adding navigation to application
      • Reading query params from URL
      • Hiding UI Bakery loader in the Embedded mode
    • Data
      • Managing user data with the {{user.email}} variable
      • Using JS libraries
        • Internationalization (i18n) & Localization: Translating UI Bakery Apps
      • Implementing row-level security
      • Copying to clipboard
    • Custom code
      • Communicating with external sites via Iframe
      • Implementing custom app hotkeys
      • Retrying API with HTTP status code 202
  • 🔎Extras
    • UI Bakery Automations
      • Environment and release strategy
      • Git in automations
      • Using external Node libraries
    • UI Bakery Database
      • Database migration
  • 💻On-premise
    • UI Bakery on-premise
    • Install & update
      • Installing on-premise
        • Azure virtual machine
        • Azure container instance
        • AWS EC2 instance
        • Google Cloud Compute Engine VM instance
        • DigitalOcean 1-click droplet
        • Manual w/ docker compose
        • Manual w/ docker run
        • Windows installation
        • Kubernetes
          • AWS EKS with Fargate
          • Scaling and resource optimization
      • Troubleshooting installation errors
      • Updating on-premise
      • Updating license key
      • Updating environment variables
      • Recommendations
        • Architecture overview
        • UI Bakery in production
        • Resource optimization
        • Running a standalone database instance
        • Generating custom secrets
    • On-premise features
      • External analytics
      • Branding
      • Embedding
      • SCIM 2.0
      • Instance API
      • Activating features under a feature flag
    • Additional configurations
      • Health check API
      • Email configuration
      • Google Sheets connection setup
      • Salesforce connection setup
      • Azure blob storage configuration
      • Adding python backend code to existing installation
      • UI Bakery Postgres
    • Networking & security
      • Setting up a domain name
      • Configuring custom certificate authority
      • Custom base URL
      • Getting requests to the local network
      • Setting up SSL on Ubuntu
    • SSO
      • OpenID
        • Google OAuth2
        • Okta ODIC
        • Azure AD OAuth2
        • Token refresh
      • SAML
        • Okta SAML
        • Azure AD SAML
      • Role synchronization
      • Multiple SSO
      • Logout redirect
      • Troubleshooting
    • Git source control
      • Manage multi-instance deployment
      • Custom PR URL
      • Automate GitHub releases
      • Automate GitLab releases
      • Automate Bitbucket releases
    • Environment variables
  • 📚Reference
    • Data security measures
    • Improving app security
    • ✨AI Assistant
    • List of Components
      • Azure Blob Storage file uploader
      • Accordion
      • Alert
      • Avatar
      • Boolean
      • Breadcrumbs
      • Bubble map
      • Button
      • Card
      • Chart
      • Chat
      • Checkbox
      • Collapsible card
      • Color picker
      • Composite form
      • Container
      • Context menu button
      • Currency
      • Currency input
      • Date picker
      • Date & time
      • Date & time picker
      • Detail
      • Divider
      • Email input
      • Embedded App
      • File
      • File dropzone
      • File picker
      • Flex container
      • Form
      • Frame drawer
      • Grid view
      • Heading
      • Horizontal menu
      • Icon
      • iFrame
      • Image
      • Image picker
      • JSON editor
      • JSON viewer
      • Link
      • List view
      • Map
      • Menu
      • Metric
      • Modal
      • Multi-select
      • Number
      • Number input
      • Password input
      • PDF viewer
      • Percent
      • Pop-up form
      • Progress bar
      • QR code
      • Radio
      • Range slider
      • Rating
      • Reusable header
      • Reusable sidebar
      • Select
      • Signature
      • Slider
      • Steps
      • Stepper
      • S3 file uploader
      • Table
        • Conditional formatting based on cell value
        • Display name instead of ID for relation
        • Row context referencing
        • Select multiple table rows
        • How to Highlight Text in a Table Using mark.js
      • Tabs
      • Tabset
      • Tags
      • Text
      • Text annotate
      • Text input
      • Time picker
      • Toggle
      • Tree component
      • Video
      • Dynamic structure properties
      • Card (deprecated)
      • Input (deprecated)
    • Upgrading components
    • List of Data sources
      • Airtable
      • AWS API
      • AWS Athena
      • AWS DynamoDB
      • AWS Lambda
      • AWS Redshift
      • AWS S3
        • S3 compatible endpoints (DigitalOcean spaces)
      • Azure Blob Storage
      • Big Query
      • Databricks
      • Exasol
      • Firestore, Firebase Auth & Realtime DB
        • Firebase authentication
        • Managing database data
        • Firebase client-side SDK
        • Firebase libraries
      • GitHub
      • Google Sheets
      • GraphQL
      • HTTP API
        • API Authentication
      • HubSpot
      • JDBC
      • MariaDB
      • MongoDB
      • MySQL
      • OpenAI
      • OpenAPI
      • Oracle
      • PostgreSQL
      • Presto
      • Redis
      • Salesforce
      • SAP Hana
      • SendGrid
      • Slack
      • SMTP
      • Snowflake
      • Spanner
      • SSH
      • Stripe
      • SQL Server
      • Supabase
      • Twilio
      • UI Bakery AI
    • List of Action steps
      • AI Action
      • Azure Blob Storage Query
      • Bulk Create Rows
      • Bulk Delete Rows
      • Condition
      • Create Row
      • Delete Row
      • DynamoDB Request
      • Execute Action
      • Firebase Query
      • Generate File
      • GraphQL Query
      • HTTP Request
      • Interval
      • JavaScript Code
      • Load Table
      • Load Row
      • Loop Action
      • MongoDB Command
      • Navigate
      • Open API Request
      • Python Backend Code
      • Redis Command
      • Save to Local Storage
      • Save to State
      • Show Notification
      • Slack Message
      • SMTP Request
      • SSH Command
      • SQL Query
      • S3 Query
      • Update Row
    • Troubleshooting techniques
    • Performance optimization
Powered by GitBook

© 2025 UI Bakery

On this page
  • Action configuration
  • Parallel and sequential action execution
  • Input & Output
  • Use cases
  • Sending a Slack message to each loaded user
  • Sending a Slack message to each user selected in the table
  • Troubleshooting & debugging

Was this helpful?

Export as PDF
  1. Reference
  2. List of Action steps

Loop Action

PreviousLoad RowNextMongoDB Command

Last updated 1 month ago

Was this helpful?

Loop Action allows you to execute another action as many times as the amount of items in your array. It is useful when you have an array of items and need to make additional request for each item of the array or when you simply need to send a bunch of items to the API.

Action configuration

Loop Action takes the {{data}} variable passed from the previous step and, if this variable is an array, executes the specified action as many times as the amount of items in the array.

You can configure the following settings for this action:

a. Return an array for iteration - if you need to iterate some custom value, you can provide it instead of the previous step result. For example, iterate over {{ui.table.value}} - an array of table rows.

b. Action to execute in loop - the main setting which determines which action will be executed in a loop.

c. Max iterations number - the maximum amount of iterations to be performed. When the iteration value is not set or set to 0, the number of iterations will be automatically set to infinity. Configuring this number can prevent the Loop Action from running into the API rate limits (in UI Bakery, the limit is 3 requests per second).

d. Execute in chunks of - allows you run the iterations in chunks. The actions in chunks will be executed in parallel. If you don't want chunking, set the number to 1.

e. Delay between chunks - allows you to configure the delay between the chunks. By default, it is set to 300 ms.

f. Transform result - a custom JavaScript function can be provided to modify the result of the action calls. Available variables: {{data}} and {{error}} - an array of results and errors.

Parallel and sequential action execution

By default, the Loop Action tries to execute all iterations in parallel. This means that all iterations will start almost simultaneously. The resulting array will still respect the order: the result of the first run will be under the 0 index, the second run under the 1 index, etc.

But you can also select the Execute sequentially checkbox to execute all iterations sequentially. The second iteration will only be run after the first one is completed, either successfully or with an error.

Parallel execution is faster than sequential, in a way, but both of them are better suited for different cases. For example, if you do multiple database requests that don’t depend on each other, it is recommended to run them in parallel. But if you are inserting items and need to respect the insert order, then sequential execution is a better choice.

Input & Output

  • Input - expects an array of items to iterate through.

  • Output - {{data}} - an array of execution results, {{error}} - an array of execution errors.

Use cases

Among some of the most common use cases of the Loop Action are:

  • Bulk creating/updating users - collecting all new/edited users in an array and then calling the POST/PUT methods for every new item.

  • Loading additional data - loading your users and then making additional requests for each user to load more information about them.

  • Sending multiple notifications - locating users that need to be notified about something and then sending them Slack notifications.

Sending a Slack message to each loaded user

Here, we'll load users via an API request and then send a bunch of Slack messages to these loaded users.

  1. Start by creating a new action that will consist of two steps (we'll name it requestUsers):

    1. For the first step, add an HTTP Request action step, select the GET method, and provide the URL to load a list of users.

    2. For the second step, add a Loop Action step and click + Create action in the Action to execute in loop dropdown.

  2. For this new action, select your Slack data source and specify the Message body, for example:

{
  text: "Hello" + {{data.firstName}},
}

You can use the {{data}} variable to reference a single item of the initial users array.

  1. Now, run the requestUsers action and check the Result tab of the Loop Action.

You'll see that it has the same amount of responses from the Slack action as the amount of users in the array (in our case, it's 25). The Logs tab of the sendMessage action will also have the same number of action executions.

Sending a Slack message to each user selected in the table

  1. First, add a new column to the table displaying your list of users - select enabled (from the Field name dropdown) and the Boolean type. This column will be used to filter out only the selected rows.

  2. Next, add a Loop Action and reference the Table component's value with the filter function in the Return an array for iteration field, for example:

return {{ui.usersTable5.value}}.filter(item => item.enabled);
  1. Create a new sendMessage to be executed as the Loop one - select your Slack data source and specify the Message body, for example:

{
  text: "Hello" + {{data.name}},
}
  1. Now, run your Loop Action and check the Result tab.

You'll see that it has the same amount of responses from the Slack action as the number of rows selected in the table (in our case it's 5). The Logs tab of the sendMessage action will also have the same number of action executions.

Troubleshooting & debugging

If a Loop Action fails, its result will be set as undefined in the {{data}} results array and an error will be added to the {{error}} array. You can use the action's Logs tab to debug the failed executions.

Let's review a couple of examples

📚
👇