In Salesforce Advanced Approvals, the Submit for Approval button appears on the Quote record by default regardless of the current approval state. This means the button remains visible even after a Quote has already been submitted, which can cause user confusion and unintended resubmissions.
The recommended approach is to control button visibility dynamically by assigning different Record Types that map to different page layouts—one layout includes the Submit for Approval button and one does not.
A Record-Triggered Flow evaluates the Quote's Approval Status and assigns the appropriate Record Type, which in turn controls which page layout and button the user sees.
This solution requires the following components:
- Two page layouts: one with the Submit for Approval button, one without
- Two Record Types on the Quote object: one for quotes in progress, one for new, recalled, or rejected quotes
- A Record-Triggered Flow on the Quote object with decision logic based on Approval Status Note: Existing Quote records are not automatically updated by this solution and must be assigned to the correct Record Type manually or via Data Loader.
The steps below create the necessary page layouts, Record Types, and Flow to switch the Submit for Approval button on or off based on the Quote's Approval Status.
## Create Two Page Layouts
1. Navigate to Setup and open the Quote object's page layouts.
2. Identify the existing layout that contains the Submit for Approval button. Keep this layout as-is for quotes that are new, recalled, or rejected.
3. Clone that layout and remove the Submit for Approval button from the clone. This layout will be used for quotes that are in progress.
4. Save both layouts with distinct names that reflect their purpose.
You now have two layouts: one with the Submit for Approval button and one without.
## Create Two Record Types on the Quote Object
1. Navigate to Setup > Create > Object > Quote > Record Types > New.
**First Record Type — for In Progress quotes (button hidden):**
1. Set Existing Record Type to Master.
2. Enter a descriptive Record Type Label such as "Quote - In Progress."
3. Set Active to Yes.
4. Modify profile permissions as needed. Permissions can be removed since Record Type assignment will be controlled by the Flow.
5. Select the profiles this Record Type applies to.
6. Assign the page layout without the Submit for Approval button.
7. Click Save.
**Second Record Type — for New, Recalled, or Rejected quotes (button visible):**
1. Set Existing Record Type to Master.
2. Enter a descriptive Record Type Label such as "Quote - New/Recalled/Rejected."
3. Set Active to Yes.
4. Modify profile permissions as needed.
5. Select the profiles this Record Type applies to.
6. Assign the page layout that includes the Submit for Approval button.
7. Click Save.
Optionally, use Record Type picklist settings to restrict the Approval Status field values available on each Record Type, or set the Approval Status field to read-only.
## Create a Record-Triggered Flow on the Quote Object
1. Navigate to Setup > Process Automation > Flows > New Flow.
2. Select Record-Triggered Flow.
3. Set Object to Quote.
4. Set Trigger to "A record is created or updated."
5. Set Condition Requirements to "Any Condition Is Met (OR)."
6. Add the following three conditions:
- ApprovalStatus__c equals Recalled
- ApprovalStatus__c equals Rejected
- ApprovalStatus__c equals Pending
7. Click Done.
**Add a Decision Element:**
1. Add a Decision element to the flow canvas.
2. Enter a label for the new outcome (for example, "Is In Progress").
3. Set Condition Requirements to "All Conditions Are Met (AND)."
4. Set Resource to `{!$Record.ApprovalStatus__c}`. This field is found under SBQQ__Quote__c as "Approval Status."
5. Set the operator and value to match the Pending status that indicates the quote is in progress.
6. Enter a label for the Default Outcome (for example, "Is New, Recalled, or Rejected").
7. Click Done.
**Add an Update Record Element under the Default Outcome (button visible):**
1. Connect an Update Records element to the Default Outcome path.
2. Set "How to Find Records to Update" to "Use the quote record that triggered the flow."
3. Set Condition Requirements to "None — Always Update Record."
4. Set Field to RecordTypeId and Value to the Record Type ID of the Record Type mapped to the page layout with the Submit for Approval button.
5. Click Done.
**Add an Update Record Element under the New Outcome (button hidden):**
1. Connect an Update Records element to the New Outcome path.
2. Set "How to Find Records to Update" to "Use the quote record that triggered the flow."
3. Set Condition Requirements to "None — Always Update Record."
4. Set Field to RecordTypeId and Value to the Record Type ID of the Record Type mapped to the page layout without the Submit for Approval button.
5. Click Done.
**Save and activate the Flow:**
1. Click Save and enter a Flow label.
2. Click Activate.
3. Test by creating or updating a Quote and verifying that the Submit for Approval button appears or is hidden according to the Approval Status.
The Flow evaluates the Quote's Approval Status each time the record is created or updated, then assigns the matching Record Type. Because the two Record Types point to different page layouts, the Submit for Approval button is shown or hidden automatically without any manual page layout changes per user.
Existing Quote records will not be updated by the Flow retroactively. Assign the correct Record Type to existing records manually through the record detail page or in bulk using Salesforce Data Loader.
000384614

We use three kinds of cookies on our websites: required, functional, and advertising. You can choose whether functional and advertising cookies apply. Click on the different cookie categories to find out more about each category and to change the default settings.
Privacy Statement
Required cookies are necessary for basic website functionality. Some examples include: session cookies needed to transmit the website, authentication cookies, and security cookies.
Functional cookies enhance functions, performance, and services on the website. Some examples include: cookies used to analyze site traffic, cookies used for market research, and cookies used to display advertising that is not directed to a particular individual.
Advertising cookies track activity across websites in order to understand a viewer’s interests, and direct them specific marketing. Some examples include: cookies used for remarketing, or interest-based advertising.