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:
- Open a list view
- Select the rows
- 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
| Need | Use |
|---|---|
| Single record by a user | Submit for Approval button |
| Many records in bulk by an admin | Mass Submit For Approval |
| Auto-submission on save | Flow action |
| Auto-submission from existing Apex logic | Apex 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
Related
- 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.