Streamline Your Approval Process with Salesforce Revenue Cloud’s New Advanced Approvals

Photo of author
Written By Jean-Michel Tremblay
Salesforce Consultant

Introduction

The Winter ’25 update for Salesforce Revenue Cloud introduces : Advanced Approvals using Flow Orchestration. This feature allows your businesses to create tailored, complex approval processes while leveraging the intuitive interface of Flow Orchestration.

Let’s explore how these new tools work, with an example setup to get you started.

What’s New in Advanced Approvals?

Advanced Approvals in Revenue Cloud now fully integrate with Flow Orchestration, offering a familiar, user-friendly interface for creating approval workflows. Here’s a quick breakdown of what’s possible:

1. Two Approval Types:

Auto-Launched Approval Orchestration: Triggered by a button, requiring an Apex class for execution. Ideal for manual submissions.

Record-Triggered Approval Orchestration: Automatically launches when specified criteria are met on a record (e.g., Quote status).

2. Flexible Approver Assignments:

• Supports Users, Groups, and Queues (or references to them).

• Use references like a user or group field to dynamically assign approvers.

3. Automation Options:

• Leverage Auto-Launched Flows to update quotes during the approval process.

• Use Evaluation Flows as entry criteria, defining the conditions for approval stages.

Building an Auto-Launched Approval Workflow

Let’s walk through the steps to create an auto-launched approval orchestration, triggered by a button on a Quote record.

Step 1: Create the Flow Orchestration

Navigate to SetupFlows and select New Flow. Choose either Auto-Launched Approval Orchestration or Record-Triggered Approval Orchestration. For this example, we’ll use the auto-launched option.

Step 2: Define Stages and Steps

1. Initial Stage – Quote Submission

• Update the Quote status to “In Review.”

• Retrieve necessary data from the Quote (e.g., discounts, net total).

2. Manager Approval Stage

• Add an Approval Step to seek approval from the manager.

• Use Evaluation Flows to decide if a manager’s approval is required based on Quote variables.

3. Parallel Approval (If Needed)

• If more than one person needs to approve, use parallel approval by creating multiple steps within the same stage.

Step 3: Set Approval Logic

Decide whether an approval is required by using conditions based on Quote data:

Manager Approval if the discount is greater than 10%.

Finance Approval if the discount exceeds 20%.

• Automatically approve if neither condition is met.

Step 4: Integrate Auto-Launched Flows

Auto-launched flows are used to perform updates. Here’s how:

Quote Update on Submit: Adjust Quote status, gather quote line data, and perform necessary calculations.

Approval Decision Handling: Evaluate whether a Quote should be approved, rejected, or forwarded based on gathered data.

Parallel vs. Serial Approvals

Advanced Approvals allow you to manage both serial and parallel workflows:

Serial Approval: One approver at a time; Finance only reviews if the Manager approves.

Parallel Approval: Multiple approvers simultaneously, ensuring decisions are independent.

Implementing the Button: LWC & Apex Example

For this example, I’ll include an LWC and Apex snippet to trigger the auto-launched flow directly from the Quote. The LWC component appears as a button, simplifying submission for end-users.

Apex Class

public with sharing class QuoteApprovalLWCController {
    @AuraEnabled
    public static void submitQuoteForApproval(Id quoteId, String submitterComments) {
        String flowApiName = 'Approval_Workflow';
        Map<String, Object> inputs = new Map<String, Object>();
        inputs.put('recordId', quoteId);
        inputs.put('submitter', UserInfo.getUserId());
        inputs.put('submissionComments', submitterComments);
        Flow.Interview myFlow = Flow.Interview.createInterview(flowApiName, inputs);
        myFlow.start();
    }
}

LWC HTML

<template>
    <lightning-card title="Submit for Approval" icon-name="standard:approval">
        <div class="slds-m-around_medium">
            <lightning-textarea
                label="Enter comments for Approver(s):"
                value={submitterComments}
                onchange={handleCommentChange}
            ></lightning-textarea>
            <div class="slds-m-top_medium slds-align_absolute-center">
                <lightning-button
                    label="Submit"
                    variant="brand"
                    onclick={handleSubmit}
                    class="slds-m-right_x-small"
                ></lightning-button>
                <lightning-button
                    label="Cancel"
                    onclick={handleCancel}
                ></lightning-button>
            </div>
        </div>
    </lightning-card>
</template>

LWC JS

import { LightningElement, api } from 'lwc';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import { CloseActionScreenEvent } from 'lightning/actions';
import submitQuoteForApproval from '@salesforce/apex/QuoteApprovalLWCController.submitQuoteForApproval';

export default class QuoteApproval extends LightningElement {
    @api recordId;
    submitterComments = '';

    handleCommentChange(event) {
        this.submitterComments = event.target.value;
    }

    async handleSubmit() {
        try {
            await submitQuoteForApproval({ quoteId: this.recordId, submitterComments: this.submitterComments });
            this.dispatchEvent(new ShowToastEvent({
                title: 'Success',
                message: 'Quote submitted for approval',
                variant: 'success'
            }));
            this.dispatchEvent(new CloseActionScreenEvent());
        } catch (error) {
            this.dispatchEvent(new ShowToastEvent({
                title: 'Error',
                message: error.body.message,
                variant: 'error'
            }));
        }
    }

    handleCancel() {
        this.dispatchEvent(new CloseActionScreenEvent());
    }
}

LWC XML

<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>61.0</apiVersion>
    <isExposed>true</isExposed>
    <masterLabel>Quote Approval</masterLabel>
    <description>Component to submit a quote for approval</description>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
    <targetConfigs>
        <targetConfig targets="lightning__RecordAction">
            <actionType>ScreenAction</actionType>
        </targetConfig>
    </targetConfigs>
</LightningComponentBundle>

Testing & Visibility

After setting up your flow:

1. Add a Submit for Approval button to the Quote layout.

2. Include the Orchestration Work Guide and Approval Trace components to the Quote page for clarity.

3. Monitor approval statuses and approvers’ decisions directly from the Quote record.

Final Thoughts

Salesforce’s new Advanced Approvals in Revenue Cloud offers flexibility, visibility, and control for any business needing a tailored approval workflow. Whether you need serial or parallel approvals, this feature delivers robust options within a familiar Salesforce interface. Explore these capabilities, and if you have questions, feel free to comment below or reach out!