Advanced Line Item Approvals for Salesforce

Flexpricer’s Advanced Line Item Approvals enable you to run Approval Processes from Opportunity and Quote Line Items through a separate custom object called ‘Approval Lines’.

As the feature includes a dependency on Salesforce’s Standard Approval Process functionality, it is delivered as an extension to Flexpricer and can only be installed in Salesforce Enterprise Edition and above.  At the time of writing, Salesforce does not permit Approval Processes in Professional Edition.

How Advanced Line Item Approvals for Salesforce works

Being ‘Advanced’ Line Item Approvals, there’s a little more to get your head around in the set up of this feature than most in Flexpricer. We recommend careful consideration of using this feature if you are new to Salesforce.

Approval Group Records
Approval Group records declare the approval processes that may be considered for a Product and identify the users that, under defined conditions, will be the approvers.

  • We call the decision about the approval process to run and the users who are approvers a ‘Consideration’ (see below)
  • One Approval Group record can be associated with multiple Products and with multiple PricebookEntries via the ‘Approval Group’ lookup.
  • This means that by allocating a different Approval Group to different PricebookEntries, can you choose to send the same product through a different approval process with different approvers based on the pricebook that the product is selected from.  Now that’s powerful!

Consideration Records
Consideration records specify the standard Salesforce Approval Process to run on Products and PricebookEntries within the Approval Group. 

  • There can be multiple Considerations per Approval Group.
  • The condition that causes the approval process to be considered is specified in the ‘Condition’ picklist.  This is  a global picklist that is usually used to declare the different hierarchies that may apply in approvals (e.g. Management, CEO, Board).  You don’t have to use these hierarchies, you could create something like ‘UK Head of Sales’ or ‘US VP of Sales’ if you have a territory-based approach.
  • If the value in the Condition picklist of an Opportunity Product or Quote Line Item matches the value in the Condition picklist of a Consideration record that is associated with the Approval Group linked to a Product or PricebookEntry, then the Approval Process specified on that Consideration record is used.
  • The API names of the values in the Approval Process picklist on the Consideration record must match the API names of Standard Salesforce Approval Process.  This is the way that Flexpricer identifies the Approval Process to run.

Approver Records
Approvers are Salesforce Users – the Approver record specifies the placeholder position to be used in the Approval Process.

  • You can specify different Approvers for each Consideration record.  This means that you can run the same approval process with different approvers for different products.
  • You can specify the Sort Order of the Approvers associated with the Consideration and Flexpricer populates the Approver lookups based on this order.

All of this might sound fairly convoluted, but the approach is highly scalable.  

You could approach Advanced Line Item Approvals by using just a single Approval Group and applying that to just the Products that need approval.  

That Approval Group might have just one Consideration record because there’s only one set of circumstances that approval needs to be considered.

And you might have just one Approver record associated with that Consideration because your approval process only needs one person to approve.

In this approach, you have just 3 records to create!

However, because it’s scalable, you could have tens or hundreds of different permutations of approvals based on different products (or even more granular on pricebookentries), with different approvers approving through different approval processes under different approval conditions.  Those 3 records could now be many, many more.

Remember that behaviour in Flexpricer – and in this extension – is driven by data records rather than coding, so all that’s needed to make this work are some simple records.

Once you understand the data structures, you can move to the Approvals themselves!

How to Setup Advanced Line Item Approvals for Salesforce

Flexpricer must already be installed in the target org

Advanced Line Item Approvals is delivered as Managed Extension Package and is licensed on a per-user basis.  For every Flexpricer Enterprise or CPQ License, a license to use Advanced Line Item Approvals is available – just request it from our team.

The Managed Extension Package requires Salesforce Enterprise Edition – so is not available to Salesforce Professional edition orgs.

  • Request the Advanced Line Item Approvals Managed Extension Package and licenses from your Flexpricer sales contact and install into the same org as Flexpricer
  • Update Opportunity and Quote page layouts by adding the Approval Lines Related List and the following fields
    • Run Approval Processes on Approval Lines
    • Total Approval Lines
    • Approval Lines Not Approved
    • Approval Lines In Approval
    • Approval Lines Approved
    • Initial Approval Comments
  • Update Product page layouts by adding the Approval Group lookup field

Using Advanced Line Item Approvals for Salesforce

Approval Line Records
These are the the records that the Approvers will approve.  They contain all the Flexpricer fields and standard pricing/discount fields from Opportunity Products and Quote Line Items.

  • One Approval Line record is created per Opportunity Product or Quote Line Item when and only when the ‘Approval Condition’ picklist is set on Opportunity Product and Quote Line Item records.
  • You can specify your own criteria in workflows and process builder for updating the Condition picklist on Opportunity Product and Quote Line Item records.  
  • Once the ‘Approval Condition’ picklist is set, Flexpricer will navigate across the PricebookEntry to see if there’s an Approval Group associated with it.  
  • If it finds an Approval Group, it checks to see whether there is a Consideration record whose Condition matches that on the Opportunity Product / Quote Line Item.
  • If there is a matching Condition, then Flexpricer creates an Approval Line record where the Approval Process picklist for that record is set to be the same as that on the Consideration record.
  • The list of Approvers for the Approval Line record are populated with the Users that are on Consideration record’s Approvers related list.

Often we see this functionality utilise the dynamically populated Approval and Floor Prices/Discounts/Quantities that can be set using Flexpricer.  

Approval & Floor fields are additional custom fields are provided in-app to help administrators create validation rules and flows with data from PricebookEntries.

When a given PricebookEntry is used, the values in Approval Price, Approval Discount, Floor Price and Floor Discount are copied from the PricebookEntry to the line item, where validation rules and automations can be used to apply additional sales process controls.

For example, you could create a simple flow so that if a price is above Approval Price then specify the Management Condition, if between Approval Price and Floor Price, specify the CEO Condition and if below the Floor Price, specify the Board Condition.

If the Condition changes to blank on an Opportunity Product, then the associated Approval Line record is automatically removed.

Opportunity and Quote Fields

  • When the time is right in your opportunity process, just check the Run Approval Processes on Approval Lines checkbox on Opportunity or Quote objects and the related Approval Line records will be submitted for Approval based on the users and processes specified on the record.
  • There are 4 informational number fields on Opportunity and Quote that can be used to drive business process behaviour (e.g. record types / layouts / workflows etc.)
    • Total Approval Lines (the total number of Approval Line records)
    • Approval Lines Not Approved (the number of Approval Line records that are not approved)
    • Approval Lines In Approval (the number of Approval Line records that are in an approval process)
    • Approval Lines Approved (the number of Approval Line records that are approved)

You may use the values in the informational number fields to drive record types of Opportunity/Quote based on your business process.

Advanced Administrator Information

Behaviour on Quote Sync

  • The Approval Lines object is shared between Opportunities and Quotes.  This means that when you sync a Quote with an Opportunity that the Approval Lines associated with the Quote and Quote Line Items automatically associate with the Opportunity and Opportunity Products.
  • If you send Approval Lines associated with an unsync’d Quote through an Approval Process, the approvals are only associated with the Quote.  You may subsequently choose the sync the quote, in which case the approved Approval Lines will associate with the Opportunity as well.
  • If a sync’d Quote is unsync’d with the Opportunity, the Approval Lines will remain associated with both the Quote and the Opportunity until there are changes to either the Opportunity Products or the Quote Line Items.  This means that simply unsyncing a quote does not force you to re-run your approval processes.
  • It is important to be aware of standard Salesforce behaviour regarding quote sync:  when you sync a Quote with an Opportunity, Salesforce removes all Opportunity Products and creates new line items based on the Quote Line Items.


  • Advanced Line Item Approvals is a Managed Package that is licensed on a per-user basis.  For every Flexpricer Enterprise or CPQ License, a license to use Advanced Line Item Approvals is available – just request it from our team.
  • This package requires Salesforce Enterprise Edition or above
  • 4 Custom Objects
  • 69 Custom Fields (10 on Standard Objects)


  • Flexpricer must already be installed in the target org

Install Link (version 1.6)

Available in

Was this helpful?