DML Operations for an Empty List in Flow

DML Operations for an Empty List in Flow

DML (data manipulation language) is a computer programming language which is used for manipulating data in a database. In Salesforce, DML operations can be used to insert, update, merge, delete, and restore records. They play a key role both in Apex and Flow.

DML operations can be performed both on a single sObject and a list of sObjects. There is a governor limit of 150 DML statements per transaction. Therefore, it is recommended to perform bulk DML operations using a list of records. Complete this Trailhead module to learn more about DML operations. You can read this post to learn how to work with collections in flow.

DML Operations in Flow

Create Records, Update Records, and Delete Records are the three DML operations that you can perform using Salesforce Flow. These are the standard data elements of flow. However, the remaining DML operations can also be performed using an Apex code in flow. Read this post to learn more about the available elements in the Toolbox of Salesforce Flow.

You can use these elements to create, update, or delete records in a variable. It is also possible to update or delete records according to a condition. However, in some cases, there might be no records in your variable (it can be a single or collection variable) or no records that meet your criteria.

Create account using a variable
Create an account record using a variable.
Update accounts using a condition
Update account records that meet a criteria.

Let's see what happens if there are no records.

Create an Empty List of Records

Let's say that you have a single record variable for the Account object. At one point of the flow, you want to create this record, but for some reason, it is empty. As you can see, flow doesn't fail, it just doesn't create the record.

Create an empty record

It has the same behavior with an empty record collection variable.

Create an empty list of accounts.

As you can see, the result is the same. No records were created.

Creating an empty list of accounts

It is important to note that even though it does not create any records, it consumes from DML statement governor limits. Because this limit is about statements and not the successful operations. Consequently, it might be the best practice to add a Decision element before performing this DML operation.

Governor limit consumption

Update an Empty List of Records

Updating a single record or a collection of records has the same behavior as the create DML operation.

Let's update all the accounts that meet a condition like shown below.

DML operations to update account records

What will happen if there are no accounts that meet this criteria? Nothing. As you can see, the flow doesn't fail, it just doesn't update any records.

Updating an empty list of accounts

Unlike the create operation, it does not consume from the DML limits if there are no records to update.

Delete an Empty List of Records

Unlike creating and updating an empty list of records, the delete DML operation actually needs a non-empty variable.

Deleting an empty list of records

As it is also written in the Delete Records element, you have to make sure that there is a record to delete. Otherwise, flow can't find the record to delete and it fails.

As you can see, flow failed because it couldn't find any records to delete.

Delete records failed

How to Prevent Getting This Error

Since Delete Records operation needs a record, you have to make sure that there is at least one record to delete. In order to do so, you have to put a decision before performing the delete DML operation. There can be two options.

1. If you are already using a record variable or a record collection, add a Decision element to check if it is null.

Decision to check if there are records

As you can see in the picture below, flow doesn't try to delete the records since there are no records to delete.

Flow runs successfully

2. If you are using the Delete Records element to delete records that meet a criteria, first you have to add a Get Records element to find those records. After getting these records, use a Decision element to check if they exist.

Let's say that you want to delete the accounts that meet this criteria.

Delete accounts with criteria

If there are no accounts that meet this criteria, then flow will fail at this step. To avoid this, add a Get Records element to find the accounts.

Get accounts that meet the criteria

After getting the account records, add a Decision element to check if they exist.

Decision to check if accounts exist

As you can see, since the flow failed to find any records, it didn't try to delete them.

Flow to delete account records

To sum up, before trying to delete records in flow, you have to make sure that there are records to delete. However, it is not required to do so for create and update DML operations.

4 Trackbacks / Pingbacks

  1. Performing DML on empty list in a flow consumes governor limits but doing same in apex does not? – GrindSkills
  2. Hard Delete Salesforce Records Using Flow - Salesforce Time
  3. How to Delete Records in Flow - Salesforce Time
  4. Using Flow to Share Files with Records - Salesforce Time

Leave a Reply

Your email address will not be published.