Skip to main content

SF-0118 · Scenario · Easy

How can a user submit the records for approval?

✓ Verified by Vikas Singhal · Last reviewed 5/17/2026 · Updated for Spring '26

There are four ways to submit a record into an approval process, ranging from a button click in the UI to programmatic submission from Apex or Flow. The platform expects you to know all four — interviewers often test breadth here.

1. The Submit for Approval button (manual)

The simplest path. On the record page, click Submit for Approval in the Approval History related list. Salesforce checks which active approval processes the record qualifies for, asks the user to pick if there’s more than one match, and routes it.

This requires:

  • The button is visible (typically via the Approval History related list)
  • The record meets at least one active approval process’s entry criteria
  • The user has the Allowed Submitter permission for that process

2. Mass Submit For Approval (list view)

For bulk submission of many records:

  1. Open a list view
  2. Select the rows
  3. Click Mass Submit For Approval (Setup must have Manage Approval Lists enabled)

This applies the same logic as individual submissions but in batch.

3. From Flow

Use the Submit for Approval Flow action element:

[Action: Submit for Approval]
  Record ID = {!triggeringRecord.Id}
  Approval Process Name Or ID = Purchase_Request_Approval
  Submitter ID = {!$User.Id}
  Skip Entry Criteria = false
  Next Approver IDs = optional list
  Submission Comments = "Auto-submitted by Flow"

This lets you build “submit on save when X is true” automation without writing code.

4. From Apex

Approval.ProcessSubmitRequest req = new Approval.ProcessSubmitRequest();
req.setComments('Auto-submitting for review');
req.setObjectId(recordId);
req.setProcessDefinitionNameOrId('Purchase_Request_Approval');
req.setSubmitterId(UserInfo.getUserId());
req.setSkipEntryCriteria(false);

Approval.ProcessResult result = Approval.process(req);
if (!result.isSuccess()) {
    System.debug(result.getErrors());
}

This is what you reach for when submission needs to happen as a side-effect of complex Apex logic (after a callout, conditional on bulk data, etc.).

Which one to pick

NeedUse
Single record by a userSubmit for Approval button
Many records in bulk by an adminMass Submit For Approval
Auto-submission on saveFlow action
Auto-submission from existing Apex logicApex Approval.process()

Common gotchas

  • Submitter must have access to the record (sharing) — even auto-submission from Apex respects sharing unless the class is without sharing
  • Record must meet entry criteria unless setSkipEntryCriteria(true) is used (Apex only)
  • One active approval at a time per record — you can’t submit a record that’s already in approval

What interviewers want

  • All four methods named
  • The point that Flow can do this declaratively — common in modern orgs
  • Bonus: mention the Approval.process() method by name
  • Is it possible to trigger the approval process without the Submit button?

Verified against: Salesforce Help — Submit Records for Approval and Apex Developer Guide — Approval Class. Last reviewed 2026-05-17 for Spring ‘26 release.