0% found this document useful (0 votes)
1K views109 pages

Revenue Cloud Setup Guide v2

The Revenue Cloud Setup Guide for Winter '25 outlines the steps for configuring Revenue Cloud Advanced, including setup instructions for context definitions, pricing procedures, product creation, and billing processes. It emphasizes the importance of context definitions in the Business Rules Engine and provides detailed steps for creating and managing products, pricing adjustments, and advanced approvals. Additionally, it includes training notes and tips for troubleshooting common issues during setup.

Uploaded by

ben sampu
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
1K views109 pages

Revenue Cloud Setup Guide v2

The Revenue Cloud Setup Guide for Winter '25 outlines the steps for configuring Revenue Cloud Advanced, including setup instructions for context definitions, pricing procedures, product creation, and billing processes. It emphasizes the importance of context definitions in the Business Rules Engine and provides detailed steps for creating and managing products, pricing adjustments, and advanced approvals. Additionally, it includes training notes and tips for troubleshooting common issues during setup.

Uploaded by

ben sampu
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 109

Revenue Cloud* Setup Guide

(Winter ’25)
*RLM has been renamed Revenue Cloud Advanced. Often, it’s just called Revenue Cloud.

Contents

TRAINING NOTES

SETUP STEPS

REVENUE CLOUD CONTEXT DEFINITION AND PRICING PROCEDURE SETUP


About Context Definitions and Pricing Procedures
Overview of Steps (step-by-step instructions follow):
Salesforce Documentation
Step-by-Step Instructions
1. Extend the Sales Transaction Context Definition
2. Now go to the front end and create a Revenue Management Default
Pricing Procedure.
3. Repeat Step 1 to extend the standard ProductDiscoveryContext
Definition. Name it RLM_ProductDiscoveryContext.
4. Repeat Step 2 to create the RLM_Product Discovery Pricing
Procedure, with these variations:
5. Update the Default Salesforce Pricing Discovery Procedure by
renaming it Product Discovery Procedure and assigning the RLM_Sales
Transaction Context Definition you created in step 1 to it.
6. Update settings in Setup
CREATING PRODUCTS
Notes on Product Creation
Creating Products and Related Records En Masse
About Product Configuration Rules
Add the Structure Tab to the Product Page Layout

1
About Product Bundles
PRICE ADJUSTMENTS
About Attribute Based Pricing and Price Adjustment Schedules
About the Revenue Management Default Pricing Procedure
About Decision Tables
Procedures for Creating and Using a Decision Table to Adjust Prices and
Populate Custom Fields on the Quote Line Item Object
Overview
Use Case
Procedures
How to Use Multiple Pricing Procedures for Different Transaction Types
Usage-Based Pricing
Derived Pricing
QUOTING
New Quote
Product Selection
Subscriptions
Ramp Deals
Quote Documents
About the Calculate Prices and Update Prices buttons
ADVANCED APPROVALS
Use Case
Create a Flow to Run in the Background
Create an Approval Orchestration Flow
Create a Lightning Web Component for the Submit for Approval Button
Create the Submit for Approval Button and Update the Quote Page Layout
BILLING
Billing in Revenue Cloud
Permissions
Setup

2
DYNAMIC REVENUE ORCHESTRATOR
→ Revise the Order Submit Flow
About Order Lifecycles
Order LifeCycle Management Setup
Create a Custom Permission and Custom Permission Set
Create an Object State Definition Record
Create Object State Value Records
Create Object State Transition Records
Populating the Custom Permission–The Workaround:
→ Activate the Object State Definition
Two Objects Will Confuse You, But You Can Ignore Them for DRO
Fulfillment Setup
Order of Record Creation
→ You Must Update the Order Page Layout
For the system to work, you also need to add two fields to the Order page
layout: Fulfillment Plan and Orchestration Submission Status.
You Need a Rule Library
What Looks Like a Serious Problem Actually Isn’t
“Execute On” Rules
Fields and Attribute Mapping
How DRO works with Bundles
The Fulfillment Workspace
CONTRACTS
About Asset Creation
PARTNER USERS
MISCELLANEOUS TIPS

Things to Check if Products Aren’t Available for Selection


Product Classification
Price Book Entries Are Tied to Product Selling Models
Product Images

3
Attribute Field Values
QUESTIONS and ANSWERS

TRAINING NOTES
Salesforce Revenue Lifecycle Management | Partner Pocket Guide

Get Started: Developer Documentation

Get Started with Revenue Lifecycle Management

Understand the Business Rules Engine

Revenue Cloud is primarily built for a B2B sales rep persona.

COQAL: Configuration, Quoting, Order Capture, and Lifecycle management

Contract Lifecycle Management allows you to create the contract documents and redline
them. MS365 Add-in allows redlining

Order to Cash > order decomposition, orchestration, and fulfillment integrated into billing
system

Revenue Lifecycle Intelligence – actionable insights into all aspects of revenue lifecycle:

Product/Service Design > Price Mgmt > CPQ > CLM > Order Mgmt > Billing &
Collections > Revenue Lifecycle Intelligence

Assets = anything the customer owns, including subscriptions

Dynamic Revenue Orchestration – Order management/orchestration – User fulfillment


designer to define the process for the product and the system will generate it for your order.
We define the process and record the state of it – it doesn’t take the place of an ERP that
manages pick, pack, and ship – updates come through platform events

Billing and payments to be released in October

4
PCM = Product Catalog Management – Product Designer Home divided into Product,
Catalog, Attributes, Rules

Catalog has Type picklist and Categories related object; Categories can be nested

Attribute Definition has Data Types; related object Attribute Categories

Product Classification can have assigned Attributes – if you define a classification, you can
assign that to a Product and all the related Attributes will come along with it. Products can
be defined as configurable or static. Attributes must be tied to a Classification; they can’t be
assigned independently.

Qualification Rules define product eligibility – can apply to catalog, category, and other
objects – executable during browsing process

Specification Type – new concept – industry-specific terminology for product (examples:


offer, product, technical, auto insurance, home insurance, kit, pack, service) – can be used
in VRs and other automations, including API queries

PCM APIs:

● Product

● Catalog

● Category

● Product Details

● Catalog Details

● Category Details

Product Discovery:

● Product List Page – browse categories and products, filter and search
products
● Product Details Page – can see Bundle component and all related records
for attributes, rules, catalogs, classifications
Data Model – build from bottom up:

1. Catalog
a. Rules (Qualification, Configuration)
i. Bundled Products and Products
1. Product Categories
a. Product Classifications
i. Attribute Categories
1. Attribute Definitions

5
a. Picklist
b. Picklist Values
2. Products
a. Product Specification Record Types
i. Product Specification Types
1. Product Selling Models
a. Product Categories
3. Bundled Products – Build from top down
a. Product Component Groups
i. Static Simple Products
ii. Configurable Simple Products
iii. Static Bundles
iv. Configurable Bundles
4. Price Book Entries
5. Product Qualification Rules – Build from top down
a. Decision Tables - once table is created, click View Object Record Page
button to assign Products to it
b. Product Qualifications
c. Qualification Rule Procedures - select
“[YourName]ProductDiscoveryContext” for the Context Definition (the
extended context definition you set up initially)
i. Select the Decision Table and map the Context Tags that you set up
in Context Definition
d. Add Qualification Procedure to Setup > Product Discovery Settings

If “Sell only with other products” is selected, the product can’t be added to Product
categories or subcategories.

Category hierarchy and Bundle hierarchy can go 5 levels including root

Bundle hierarchy can have up to 200 components

Updates at one level of the model will automatically be reflected across all Products
assigned to a higher level, for newly quoted products; assets won’t be updated.

Product versioning is on the roadmap, but they have asset start/end dates that reflect
changes in attribute selections.

A Configurator Template can be assigned to an individual product and/or to a Product


Classification.

You can launch a Configurator from a Quote, from an Order, or from a Catalog

6
You can integrate with third-party configurators by adding a callout to it in a component of
the Configurator Template.

You can also create a custom component with a LWC.

There are 8 headless APIs you can use to customize the look of the Configurator UI.

Configuration Rules come in three flavors: Validation, Exclusion, Inclusion

A rule takes the form WHEN (Condition/s) THEN (Action/s)

If you save a Quote or Order that has a configuration error that violates a Validation rule (of
type “error”), you’ll see an error message and icon, and you won’t be able to activate the
Order.

Amendment Notes: Amendments are generated from the Assets list on Account, not from a Contract. The Configurat

POT pricing is now called Derived Pricing.

A pricing component and quick action allow you to price anything on any object.

On the roadmap: if your product list grows, the UI will show product cards as smaller
components on the layout, so a long list is easier to navigate. Also: the concept of Instance
Quantity, which allows you to change the quantity of a bundle component.

Contracts are on the roadmap – until October, you can’t apply year-over-year uplifts. But
you can create a field for the uplift and use it in the Price Definition. Cost-plus-markup and
Promotion Discounts are on the roadmap.

HOW TO GET A DEMO ORG


Option 1: If you are not a Salesforce Partner, use the "Communications Cloud Free Trial" /
"Learning Org" and not the "Communications Cloud Base Trial":
https://developer.salesforce.com/free-trials/comparison/communications-cloud

7
Option 2: If you are a Salesforce Partner, use the RLM-PDE from Partner Learning Camp > Demo
org.

Option 3: If you work for a company that provides access to Environment Hub, you can
take advantage of Winter ’25 self-paced enablement content. The Revenue Cloud Product
Management team has provided content across all pillars of the current suite of Revenue
Cloud. Start by listening to a 5 minute Revenue Cloud Overview recording that explains
the structure of the learning journey and describes how to access Revenue Cloud
Enablement content. After you listen to the recording, you can download a Journey
Map that provides links to all of the Revenue Cloud Enablement content.

In order to complete the Revenue Cloud hands-on exercises, you must have a
Salesforce Org pre-configured with Revenue Cloud reference data. An org can be
created using Environment Hub.

Please use this Trialforce ID, 0TTWs000000Vgnl, to create a Revenue Cloud enabled
Org to complete the hands-on exercises.

SETUP STEPS
Setup > Revenue Lifecycle Management Settings – enable everything there

The following Permission Set Licenses and Permission Sets will get you going; as you do
more, you’ll want to add others. For example, if you need a more customized quote
document than you can easily create with Document Builder, you should install OmniStudio
permissions because that’s the go-to document generator for Revenue Cloud.

Assign Permission Set Licenses:

Business Rules Engine Designer


Business Rules Engine Runtime
ContextService Admin Psl
ContextService Runtime Psl
Contract LifeCycle Management user
Fulfillment User
Partner Community
Product Catalog Management Administrator
Product Catalog Management Viewer
Product Configuration User

8
Product Discovery User
Revenue Lifecycle Management User
Salesforce Pricing Design Time User
Salesforce Pricing Run Time User
Ship and Debit Process Management

Assign Permission Sets:

Assetize Order
Calculate Prices API
Calculate Taxes API
CLM Admin
CLM Runtime User
Context Service Admin
Context Service Runtime
Create Orders from Quotes
Create Orders from Quotes for Partner Community
CreateContract API
Custom Partner Community User Perm Set
DRO Admin User
DRO Order Submit Initiate User
InitiateAmendment API
InitiateCancellation API
InitiateRenewal API
PlaceOrder API
Price and Tax Calculation for Quoting
Price and Tax Calculation for Quoting for Partner Community
Product Catalog Management Designer
Product Catalog Management Viewer
Product Configuration Rules Designer - no longer in Winter25
Product Configurator - no longer in Winter25
Product Discovery Admin
Product Discovery User
ProductAndPriceConfiguration API
Rule Engine Advanced Designer
Rule Engine Designer
Rule Engine Runtime
Salesforce Pricing Admin
Salesforce Pricing Manager

9
Salesforce Pricing Design Time User
Salesforce Pricing Run Time User
Ship and Debit Process Management Admin
Ship and Debit Process Management User
Tax Configuration

Setup > Contract Lifecycle Management > General Settings – enable all

Setup > Document Generation > General Settings – enable all

Setup > Dynamic Revenue Orchestrator Settings – enable

Setup > Feature Settings > Products > Product Schedules Settings – enable customizable
schedules

Setup > Salesforce Pricing Setup – Turn on Price Waterfall, Turn on Price Waterfall
Persistence

Modify and assign the Product page layout for the layout you’re using. Add buttons:
“Validate Product Definition” and “Copy Bundle” and “Preview”

Setup > Feature Settings > PCM Setup Entities > Product Specification Type – if you need
different types, create them here, e.g., “Commercial” and “Retail”

Setup > Feature Settings > PCM Setup Entities > Product Specification Record
Types – create a new record type for “Commercial” (check box “Is Commercial” and
use the Commercial Record Type)

Create a Product Selling Model for “One Time” – open the Product Selling Model object,
click New, select the One Time Selling Model Type, and make it Active.

For now, Quarterly isn’t supported. The picklist for Pricing Term isn’t editable.

Setup > Process Automation > Service Catalog > Catalog Settings – Set categorization
method to Data Categories

On Catalog object, edit Lightning Page Layout and add the Product List component

Clone the "Default Product Configurator Flow" (Setup > Flows>), activate it, and copy its
API Name
On the front end, open the Product Catalog Management Home Page and click
on Product Configuration Flows
Create a record:
- Flow Identifier: [Flow API Name]
- Default = true
- Status = Active

10
Skip this until you need it: For Product Qualifications, create a page layout on the object and create
custom fields for anything that will be part of a Decision Table (and make sure FLS makes them
visible/editable). Assign the page layout to profiles.

REVENUE CLOUD CONTEXT DEFINITION AND


PRICING PROCEDURE SETUP

About Context Definitions and Pricing Procedures

These concepts come from Vlocity; they’re the heart of the Business Rules Engine. You
work primarily with a Sales Transaction Context Definition and a Product Discovery Context
Definition. If you have a web store, you also have a Cart Context Definition. There are
others that will come up later in the Guide.

In a Context Definition, you have a structure that defines hierarchical object relationships.
In the Sales Transaction Context Definition, you start with an out-of-the-box definition,
clone (“extend”) it, and edit it to your needs. The OOTB definition comes with a predefined
structure that includes objects used in and by the Business Rules Engine, such as Sales
Transaction Item and Fulfillment Transaction Item.

You can edit and create new Context Definitions and insert new objects anywhere in the
hierarchy. You also map object fields to Context Tags (you can create tags for your custom
fields), which you use when you configure a Pricing Procedure. Finally, you can map a field
on an object in the Sales Context Definition to a field on an object used in configuring
records for Quotes, Quote Line Items, and more.

A Pricing Procedure is like a CPQ Price Waterfall on steroids. In Revenue Cloud, you no
longer have Price Rules. Instead of creating a Price Rule, you add elements and groups of
elements to your Pricing Procedure, which fire in sequence. You can insert new elements
and groups anywhere along the sequence, giving you maximum flexibility.

When you set up a Pricing Procedure, you tie it to a Sales Transaction Context Definition.
The Context Definition provides the objects, fields, and Context Tags available to you as
you define the logic of the Pricing Procedure’s sequence.

Each time you create a new Context Definition for sales, you need to remember to update your Pricing Procedure an

11
Overview of Steps (step-by-step instructions follow):

You create Context Definitions by “extending” the standard definitions, which cannot be
edited. You do this to provide flexibility to edit them as you build your org. Once you’ve
extended the OOTB definition, you’ll have a custom definition, visible on a separate tab
when you look at Setup > Context Definitions.

The system provides an option to clone a custom definition. Don’t ever clone one. Your custom definition has a look

The Sales Transaction Context, Revenue Management Default Pricing Procedure, and
Product Discovery Pricing Procedure are used to price your products. As you add custom
fields used for price-affecting product definitions, attributes, formula-based prices,
qualification rules, and discount rules, you update this context definition to include any
custom objects and/or fields needed to calculate your pricing. Whatever objects and fields
are mapped within this context definition are available in the Pricing Procedure you set up
(and can modify) later.

The Product Discovery Context and Default Discovery Procedure are used for Derived
Pricing, formerly known as Percent of Total Pricing. This context definition is simpler in
structure than the Sales Transaction definition and likely won’t need to be modified.

These are the steps you need to follow. Detailed step-by-step instructions are below.

1. Create two new Context Definitions as below:


RLM_SalesTransactionContext [Inherited from SalesTransactionContext__stdctx]
RLM_ProductDiscoveryContext [Inherited from ProductDiscoveryContext__stdctx]

2. Create the Product Discovery Pricing Procedure as below:


(Usage Type = Pricing Discovery – this is unchanged)
Context Definition = RLM_SalesTransactionContext

3. Create a new Revenue Management Default Pricing Procedure


(Usage Type = Pricing – this is unchanged)
Context Definition = RLM_SalesTransactionContext – this is updated

4. Update the Default Discovery Procedure


(Usage Type = Pricing)

12
Context Definition = RLM_ProductDiscoveryContext

5. Update the below settings in the Org :


a. Product Discovery Settings
Context Definition = RLM_ProductDiscoveryContext
Pricing Procedure = Product Discovery Pricing Procedure
Qualification Procedure = ProductQualification (if you follow the training)

b. Pricing Setup
Pricing Recipe = NGPDefaultRecipe
Pricing Procedure = Revenue Management Default Pricing Procedure

c. Revenue Settings
Pricing Procedure = Revenue Management Default Pricing Procedure

6. Update the below settings in Setup:


Explanation: These steps tell the org which contexts and pricing procedures to use.

a. Product Discovery Settings


Context Definition = RLM_ProductDiscoveryContext
Pricing Procedure = Product Discovery Pricing Procedure
Qualification Procedure = ProductQualification (if you follow the training)

b. Revenue Settings
Pricing Procedure = Revenue Management Default Pricing Procedure

c. Pricing Setup
Pricing Recipe = NGPDefaultRecipe
Pricing Procedure = Revenue Management Default Pricing Procedure

13
Salesforce Documentation

I find Salesforce’s documentation to be helpful, but limited. Still, here are links to it.

Extend a Context Definition

Create a Pricing Procedure

Step-by-Step Instructions

1. Extend the Sales Transaction Context Definition

a. Setup > Context Definitions. On the Standard Definitions tab, click the
caret on the row for SalesTransactionContext.

b. Click Extend.

c. Give your new definition a name (RLM_SalesTransactionContext)


and pick an Effective Date of the first of the month for your new context defi

d. Click Next, click Next again, and Save.

e. On the Custom Definitions tab, open your new context definition (click
on its name) and click the Map Data tab. On the first line, for Sales
Transaction, click the caret and select Edit. Check the box for “Mark as
Default” and click Map.

f. This opens the mapping flow page. Initially, you can ignore this; just
click the back arrow to accept the OOTB default.

i. If you’re setting up custom fields (like for


attributes), it’s easier if you set up the custom fields before extending
the context definition, because you can map them now. If you’ve
created them, follow these steps:

1. On the Structure tab of the definition, click Edit. Click


Next to open a Create Structure screen; click Next again to
open an Add Attributes screen. On this screen, scroll down to
the Sales Transaction Item node and add an attribute for
each custom field. For Type, I selected Input Output, which
gives you flexibility and is just less confusing later on.

2. Clicking Next took me to a Create Attribute Tags screen.


Scroll to the bottom and create tags for your custom fields.
Then click Save.

3. On the list of Custom Definitions, open the new definition.


Click the caret on the first row and select Input Mapping.

14
4. On the Edit Mapping screen, click the link at the top for
Generate All Mappings. Click Save.

5. Click the caret at the end of the first row of the definition
and select Default. Clicking Map takes you to the mapping
flow page. The left side of the screen displays objects and
fields defined in the structure of your context definition. On
the right side, you can add objects (their fields come with
them) to connect to the objects/fields on the left side. Map the
new fields.

ii. If this is your first time doing this, skip


this section and proceed to 1.g. below. If you create custom fields
after extending the definition, and need to come back to map them,
then follow these steps:

1. Click Edit on the second line of the custom context


definition (for QuoteEntitiesMapping), then click the caret and
select Input Mapping button.

2. Click Generate All Mappings.

3. Add Context Tags for your new fields. These are


essential for setting up your Pricing Procedure later.

4. Depending on your needs, you may need to add a node


to your context definition structure. (A node represents an
object in Salesforce.) With these steps done, click save.

5. Then go back to the Map Data tab of your context


definition. Click the arrow at the end of the row corresponding
to the object most directly affected by your new custom fields.
Price-affecting fields will generally apply to the
QuoteEntitiesMapping. Click the caret at the end of the row
and select Edit. Click the Map button in the lower right corner
of the modal; this is how you get back to the Mapping Flow
screen. Now map your objects and fields (see 1. f.i.6. above).

g. Don’t forget this step


Go all the way back to Setup > Context Definitions. On the Custom Definitions tab of Context Defi
click the caret at the end of the row of the
RLM_SalesTransactionContext definition you just created. Click Activate.

2. Now go to the front end and create a Revenue Management Default Pricing Procedure.

a. Start by opening the Expression Set Templates tab and selecting


Revenue Management Default Pricing Procedure. Open it and click Save
As.

15
b. Go to the Pricing Procedures tab and refresh the list view – now your
Revenue Management Default Pricing Procedure is visible. Click the
name to open it.

c. The procedure has the OOTB context definition selected, so click Edit
and replace it with your new RLM_SalesTransactionContext created in
Step 1. Save.

d. Click the Pricing Procedure Version to open it.

i. Click the Gear icon on the left-hand menu.

ii. Set the Start Date to today at 12 am.

iii. Set the Rank to 1.

iv. Click Save.

v. Click Activate.

3. Repeat Step 1 to extend the standard ProductDiscoveryContext Definition. Name it


RLM_ProductDiscoveryContext.

4. Repeat Step 2 to create the RLM_Product Discovery Pricing Procedure, with these
variations:

a. Start with the “Product Discovery Pricing Procedure” Expression Set


Template (not the “Default Pricing Discovery Procedure” template).

b. When you have your RLM Product Discovery Pricing Procedure, set
the Context Definition to the new RLM_ProductDiscoveryContext you
created in Step 3.

By now you’ve created two Pricing Procedures. Next you need to create a Discovery
Procedure (this is confusing: it is not the same thing as a Product Discovery Pricing
Procedure.

5. Update the Default Salesforce Pricing Discovery Procedure by renaming it Product


Discovery Procedure and assigning the RLM_Sales Transaction Context Definition you
created in step 1 to it.

The Product Discovery Procedure (created in this step) and the Product Discovery
Pricing Procedure (created in Step 4) must both be associated with the same
RLM_Sales Transaction Context Definition.

Select the Discovery Procedures tab. If you see a procedure listed, update its name and
assign the sales transaction context definition.

16
If the Default Discovery Procedure becomes corrupted, or if you don’t see one, it’s also
possible to create a new Discovery Procedure with the following steps. If you do this when
a procedure exists on the Discovery Procedures list, then you must delete it. This is
because Revenue Cloud does not allow more than one Discovery Procedure and your
system will throw an error when you try to add quote lines.

The procedure for creating a new Product Discovery Procedure:

Open the Expression Set Templates tab again. Now select “Default
Salesforce Pricing Discovery Procedure” (Again, this is wildly confusing,
because it contains the word “Pricing,” but is not the “Product Discovery
Pricing Procedure” you selected in Step 4).

a. Click Save As.

You may find that you cannot successfully save the Default Salesforce Pricing Discovery
Procedure as a new version. In that case, check the list of Decision Tables in Setup. If the
Asset Action Source Entries table is missing, then go to Setup > Pricing Settings. Switch
the toggle off and then switch it on again. This should restore the missing table.

b. If step a is successful, then from the App Launcher, select the


Discovery Procedures tab. (By now you will have noticed that on the
Pricing Procedures tab, there is a list view named “Discovery Procedures,”
which shows no records. That’s because they moved discovery procedures
to their own object but neglected to delete that list view.)

c. Open the Discovery Procedure clone you just created. Rename it to


RLM_ProductDiscoveryProcedure and set the Context Definition to the
RLM_Sales Transaction Context Definition you created in step 1.

d. Open your new discovery procedure version 1. Set the time to today at
midnight, and set the rank to 1. Click Save. Click Activate.

e. On the Discovery Procedures tab, click the arrow at the end of the row
showing your new RLM_ProductDiscoveryProcedure; click Activate.

The Product Discovery Procedure (created in Step 5) and the RLM Product
Discovery Pricing Procedure (created in Step 4) must both be associated with the same
RLM_Sales Transaction Context Definition.

6. Update settings in Setup


a. Product Discovery Settings
Context Definition = RLM_ProductDiscoveryContext
Pricing Procedure = Product Discovery Pricing Procedure
Qualification Procedure = ProductQualification (if you follow the training)

17
b. Pricing Setup
Pricing Recipe = NGPDefaultRecipe
Pricing Procedure = Revenue Management Default Pricing Procedure

c. Revenue Settings
Pricing Procedure = Revenue Management Default Pricing Procedure

d. Check Setup > Pricing Action Parameters, and make sure you have one for Quote and
one for Order.

18
You may also want to go ahead and create Pricing Action Parameters for Opportunity,
Contract, and Case. See documentation here.

Remember to update your Pricing Action Parameters if you ever change your SalesTransactionContext definition.

CREATING PRODUCTS
Notes on Product Creation

Creating Products in Revenue Cloud involves at least 15 objects – or up to 20 objects if you


have bundles.
If you calculate tax in Revenue Cloud, you need to create records for Tax Engine, Tax
Treatments, and Tax Policies before you create Products.

If you sell subscriptions, you may need to create a Proration Policy before you create
Products.

Unlike CPQ, Revenue Cloud has you create picklists as data – not as metadata.

You can assign more than one Product Selling Model to a single Product. For example, you
may have a Support service that you sell for $9.99 for Term-defined Months and for $99
Evergreen Annual. On the Related Lists of the Product record, assign both selling models
and both prices. When you’re adding Products to a Quote, you’ll be able to select which
selling model you want to use by clicking the ticket icon you’ll see when the Product listing
appears:

19
When you click Add here, nothing changes on the screen–but you have added it. Click
Configure to continue.

When you enter a Product Description, limit it to 80 characters, even though the field allows more. This is so yo

Creating Products and Related Records En Masse

Workbench and Dataloader do not have mappings for all fields on Revenue Cloud
objects. Salesforce recommends that you use Bulk API or Bulk API 2.0 to upload
records en masse. (See Salesforce documentation about Bulk API 2.0 here:
http://bit.ly/4cEhESk). Some Revenue Cloud users report success with Jetstream
(getjetstreamapp.com), SFDMU (https://help.sfdmu.com/), Prodly (prodly.co), and Data
Importer (dataimporter.io). In any case, until and unless Workbench or Dataloader
updates their interfaces, you will need to rely on a data engineer for this.
Whether you create Products one at a time in the UI or en masse with spreadsheets, you
will create records on these objects, in this order (the label is given first, followed by the
object API name, because sometimes they differ):

1. Attribute Picklists (AttributePicklist) - examples: Fabric, Color

2. Attribute Picklist Values (AttributePicklistValue) - examples: Cotton, Red

20
3. Attribute Definitions (AttributeDefinition) - examples: Fabric, Color

4. Attribute Categories (AttributeCategory) - examples: Button-down Shirts, Polo


Shirts

5. Attribute Category Attribute (AttributeCategoryAttribute) - ties an Attribute


Definition to an Attribute Category - examples: Fabric Color–Button-down Shirts;
Fabric Color–Polo Shirts

6. Catalogs (ProductCatalog) - examples: In-Stock Clothing, Bespoke Clothing. You


can give catalogs start and end dates, which is useful for promotions or seasonal
catalogs.

7. Categories (ProductCategory) - examples: Shirts, Button-down Shirts, Bespoke


Shirts. You can create category hierarchies by specifying a parent category.

8. Product Classification (ProductClassification) - examples: Shirts, Shoes

9. Product Classification Attributes (ProductClassificationAttr) - examples: Shirt


Color, Shoe Color. You tie your Product Classification (Shirts) to your Attribute
Definition (Color) to create this record you can name “Shirt Color.”

10. Products (Product2) - the usual Product records/object

11. Product Category (ProductCategoryProduct) - tie a Product to a Category,


examples: Oxford Shirt–Button-down Shirts; Pinstripe Shirt–Button-down Shirts.

12. Product Attribute Definition (ProductAttributeDefinition) - tie a Product to an


Attribute Definition, an Attribute Category, and a ProductClassificationAttribute. You
can also set override values for Attribute Definitions. Example: Name it Oxford Shirt
Color and set values for Oxford Shirt–Color–Button-down Shirts–Shirt Color. You
can also set a default Attribute Picklist value (ex: White) for the Attribute Definition.

13. Product Selling Model Option (ProductSellingModelOption) - tie a Product to a


Selling Model. Example: Oxford Shirt–One-time.

14. Product Relationship Type (ProductRelationshipType) - You should create two


records: Bundle to Bundle-Component Relationship, and Bundle to Product-
Classification-Component Relationship. (Salesforce does not use hyphens; I’ve
added them to make it clearer.) These define either the relationship between a
bundle’s parent product and its components, or between a bundle’s parent product
and components tied to a Product Classification. You’ll reference these when you
define your bundles.

15. Product Component Group (ProductComponentGroup) - you can create groups


of components; for example, if you want to sell bundles of Oxford Shirts in five
colors and bundles of Pinstripe Shirts in five colors, you can create a Product

21
Component Group named Shirt Bundles and assign the parent products, Oxford
Bundle and Pinstripe Bundle, to the group.

16. Product Related Component (ProductRelatedComponent) - this is where you


define your bundles by relating parent products to child products, and tie them to
Product Relationship Types and Product Component Groups. This is also where
you can define component cardinality.

17. Product Component Group Override (ProductComponentGrpOverride) - for a


given product, you can override maximum and minimum quantity settings defined
on a Product Component Group.

18. Product Related Component Override (ProductRelComponentOverride) - for a


given bundle, you can override settings for one or more components, such as
maximum and minimum quantities, whether a component is required or a default
component, or whether a component is included in the bundle price.

19. Price Book (Pricebook2) - the usual records/object

20. Price Book Entry (PricebookEntry) - the usual records/object

Using Existing Products in a New RLM Implementation

The Product Type field that RLM adds on the Product record cannot be edited once the
Product record is created. The field is used to tag a bundle parent product by setting the
value to Bundle. If you have products in your system that you want to use as bundle
parents, you must clone them, set the value, save, and deactivate the prior version, This
was intended to prevent problems if someone changed the value, but it does pose its own
difficulty, so the product team intends to address it somehow in a future release.

About Product Configuration Rules

Salesforce documentation about creating product configuration rules is good, so we won’t go into the details here. Bu

Also, you should only have one Rule Library for all the Product Configuration Rules. The
Rule Library record has Start Date and End Date fields, but the system won’t work if you
enter an End Date and create a second Rule Library for your Product Configuration Rules.
The presence of Start and End Dates would lead you to believe so, but Salesforce Support
confirms that you must only have one Rule Library for the Product Configuration Rules.

Trial orgs come with default context definitions, as well as an


FBCDSalesTransactionContext extended definition. It also comes with a Rule Library
named Product Config Library, which is tied to the FBCDSalesTransactionContext. You
need to change this Context Definition to the extended definition you created when you set

22
up your org. Doing this is more complicated than simply editing the Rule Library record.
These are the steps to follow:
1. Deactivate the current Active Rule Library Version - found on the right.
2. Clone the Rule Library Version.
3. Before Saving, change the context definition to the desired Pricing Context
Definition.
4. Save
5. Go to Setup -> Revenue Settings -> Turn OFF Product Configuration Rules
Toggle -> Turn ON Product Configuration Rules Toggle
6. Go to the newly created Rule Library Version
7. On the quick actions, you should see a dropdown for Activate. Click it.
8. Refresh the page; your newly created Rule Library Version should be active.

Now this rule library should reference the same sales context definition as the pricing
procedure and is ready to be used.

Do this any time you create a new Sales Context Definition.


If you don’t have an existing library to update, create a new one. The record settings are in
this screenshot:

Be sure to open the first version (auto-created) and use the quick action to activate it.

23
Add the Structure Tab to the Product Page Layout

If you don’t see the Structure tab, open the Lightning page editor. Add a tab and scroll
down far in the tabs picklist to find Structure. To that tab, add the component named ARC
Relationship Graph. In the Graph Name lookup field, enter EPC Product Structure Graph.
Give it a label and save.

About Product Bundles

When you add child products to bundles, the system will automatically create the Product
Component record with a box checked for Price Includes Component. This can be handy:
in a Laptop Bundle, you can add a Laptop that’s included in the price of the bundle, even if
the Laptop product has a list price that’s charged when it’s sold separately. You could add
other component products with the box unchecked, and adding them to the bundle will
increase the bundle’s base price.

But if you use Dynamic Revenue Orchestration, beware:

products that are included in the price of the bundle do not generate Fulfillment Line Items.

Attribute Field Values

A single product can have up to 25 Attributes. You can request an increase from Salesforce
(see “To Log a Case with the Feature Activations & Limit Team” in the Price Adjustments
section below).

Useful tip: If your Attribute requires a picklist, always select one value as the default.
Getting in the habit of doing this will save you time and headaches later on if you should
ever set up Dynamic Revenue Orchestration. It’s also helpful when creating test quotes.

Considerations while updating attribute field values:


● If you update attribute field values in the attribute definition, review and update the
corresponding attribute values on the product classification attributes.

● Then review and update the corresponding attribute values on the product
attributes.

● Then review and update the corresponding attribute value overrides in the context
of any bundles the product is a part of.

24
PRICE ADJUSTMENTS
The “Additional Discount” field we know in CPQ is now the “Manual Discount” in Revenue
Cloud.

A single Product Classification (group of Attributes) can contain up to 7 price-impacting


Attributes. If you need more, you can request an increase from Salesforce.

To log a case with the Feature Activations & Limit Team:


1. Have a System Administrator log a case with Salesforce Support.
Select the appropriate Product (Revenue Cloud) and select Feature
Activation & Limits as the Topic.
2. Please include the following details in the case description:
● Organization ID
● Name of the Feature or Limit
● Desired Change (Enable, Increase, Disable, etc.)
● A Business Case for the activation or increase
● Duration (if applicable)
3. Support will review the case and action it as needed.

About Attribute Based Pricing and Price Adjustment Schedules

You define a Price Adjustment Schedule to apply any kind of discount or override you
need, with start/end dates. The Schedule Types available are Volume, Term, Attribute,
Bundle, and Custom. These schedules contain Price Adjustment Tiers. Available
Adjustment Methods are Range or Slab.
If you mark an Attribute as “Price Impacting” = true, then on an Attribute Based
Adjustment record associated with the Price Adjustment Schedule, you enter the
conditions, Adjustment Value and Adjustment Type (dollar or percentage).

If you set up a Product Classification (again, a confusing name, because a Product Classification is a group of Attribu

Here’s what I don’t like about Attribute Based Pricing. Say you have a product with many
attributes, as with a Laptop I set up:

25
Now say you make five of these price-impacting. You need to create an Attribute Based
Adjustment record, which looks like this:

When you first create it, you enter the basic detail information you see in the screenshot above and click a Next butto

26
Every price-impacting attribute must have a value. And you cannot edit
your selections once you’re done creating the record.

See how it says simply “5” in the Attributes field, in the screenshot above? You can’t see
them here or on a related list. You can only see them by opening the list view of Attribute
Based Adjustment records, where you can click an eye icon in the Attributes column:

Clicking on it shows you a window like this:

These screenshots come from an Attribute Based Adjustment Record on which I’ve defined
a $25 discount off the list price if someone selects the listed Values in the screenshot
above. If I want to define another discount for a smaller screen size, then I need another
Attribute Based Adjustment record where all five attributes are defined as they are above,
except for the smaller screen size value.

In my Laptop setup, I have two Processor options, four Screen Size options, two Display
options, two Graphics options, and one Batteries option. That means I have 32 possible
combinations of options. If each Attribute has a single value that isn’t discounted, I need 27
Attribute Based Adjustment records (32 - 5 = 27). That seems excessively complicated to
me.

A Salesforce Support agent has logged enhancement requests with the product team to
improve the UI where you have to click on the eye icon to see the attributes. In the

27
meantime, I was told it is possible to write an apex class or flow that mashes up the
attribute adjustment condition records and updates the linked attribute based adj. record.
Then, it can be displayed in the same listview without an extra click.

The same agent logged another enhancement request to improve the creation of Attribute
Based Adjustment records. At this time, it does not seem like there's an alternative or less
config-heavy way to accomplish this.

Promo Codes
You can create a Promo Code attribute and for each promotion create a new Attribute
Value. Then you can create an Attribute-Based Adjustment record that defines the discount
for a specific Promo Code.

In case you want to apply another discount with a promo code, you can read a couple of
articles in Salesforce documentation to see how to set up your Pricing Procedure:

● https://help.salesforce.com/s/articleView?id=ind.pricing_assignment.htm&type=5

● https://help.salesforce.com/s/articleView?
id=ind.pricing_attribute_based_price.htm&type=5

Essentially, in your price procedure you define the first discount element, take the
NetPrice from that calculation, and use NetPrice as the input variable for ListPrice
on the next element for Attribute Based Price.

About the Revenue Management Default Pricing Procedure

28
This screenshot shows that the Revenue Management Default Pricing Procedure has six Pricing Procedure Versions.

Indeed, if you need to change the Context Definition that the Pricing Procedure is linked to,
you must have all Pricing Procedure Versions deactivated.

When you open a version, you see a visualization of JSON that looks like this:

29
This is the Expression Set Builder. Each outlined List Container box represents an
operation that has conditions for firing and one or multiple steps for price calculation. You
can expand the pricing elements to see something like this:

30
Notice that you can add as many conditions as you need and that you can limit the
application of an element to a Profile. You can add as many elements as you want to a List
Container by clicking on the + sign, which you can see any time you hover over the line that
connects the elements.

Formula elements allow you to set field values in interesting ways:

31
Here, the InputUnitPrice (defined in an Assignment element above, which assigned the
ListPrice to the InputUnitPrice) is assigned to the NetUnitPrice. Then, that price is multiplied
by the LineItemQuantity to give you the ItemNetTotalPrice.

There are many elements you can use. See them by clicking on the four-square Elements
icon on the left:

32
This is the full list.

33
You must ask your Salesforce account executive to provide you with the Apex Action
element. You can use it to call Apex code, as you can in Flows.

Notice that the variables in the pricing elements are blue hyperlinks. These point to the tags
in your Context Definition. As you start typing in the variable box, a list of tags appears to
help you find the one you need:

It’s key to be familiar with the tags in your Context Definition. In this example, I want
InputUnitPrice. If I start typing “Unit” I won’t find what I need. I must know that the tag starts
with “Input.”

34
Also as in Flows, you can create Resources to use in your pricing elements.

35
And you can name and rank your Pricing Procedure Version:

Notice the Start Date and Time.


These must be set to a date/time AFTER the Start Date/Time of your Context Definition.

36
This is very important: You must select each pricing element that generates a value you
want to output to your Quote Line Item (notice how this formula element is outlined in blue
to indicate that I’ve selected it). Then you must open the Element Details tab on the left,
and check the box for “Include in Output.” Otherwise, your element may do what you
configured it to do, but you won’t see the result.

Just as you can add pricing elements within a List Container, you can add additional List
Containers anywhere on the logic tree. Again, just hover over the connecting line to see the
+ icon, and click it.

You’ll see a list of elements to select, including the List Group element, which they should
have named List Container (or else the List Container should have been labeled List
Group).

37
About Decision Tables

Decision Tables are like the Lookup Tables you use in CPQ Price Rules. But whereas in
CPQ you create a custom object to hold your lookup values, in Revenue Cloud you create
a custom object AND a Decision Table.
Decision Tables are more powerful than CPQ Lookup Tables because you can link up to
four objects in a Decision Table and look up data from all of them. You can also output data
from multiple columns on a single row of the table.

A setting on a Decision Table record lets you specify if the table is small (Low Volume) or
large (High Volume). TIP: If you have a small table, selecting Low Volume will make table
refreshes much faster.

Decision Tables come in two types:

● A Decision Table uses multiple objects and complex logic to provide one or more
outputs.
● A Decision Matrix uses an exact-match lookup on a single object and provides a
single output.

You can invoke Decision Tables and Matrices from Expression Sets, Flows, Omni Scripts,
Apex, or APIs.

Two common uses cases for Decision Tables are:

● Affecting price calculations, as with CPQ Price Rules. Use a Decision Table with a
Price Adjustment Matrix element in a Pricing Procedure.

38
● Affecting product selections, as with CPQ Product Rules. Use a Decision Table with
a Qualification Rule (created on the Product Qualifications object).

Procedures for Creating and Using a Decision Table to Adjust Prices and Populate
Custom Fields on the Quote Line Item Object

Overview
1. Create a custom object for your lookup values.
2. On the Quote Line Item object, create custom fields to hold lookup values from your
custom object.
3. Create a Price Adjustment Schedule.
4. Create Price Adjustment Tiers.
5. Create a Decision Table.
6. Add the Decision Table to your default Pricing Recipe.
7. Update your Sales Transaction Context Definition.
8. Update your Sales Transaction Pricing Procedure and your Default Product
Discovery Procedure with the new Sales Transaction Context Definition.
9. In your Sales Transaction Pricing Procedure, clone your latest Pricing Procedure
Version.
10. Add a Price Adjustment Matrix element to your new Pricing Procedure Version.
11. Go to Setup > Pricing Settings and click the Sync button.

Use Case
I want to inject dollar values for Contracted Price and Zilliant Price into fields with those
names on a Quote Line Item record. Each product in the catalog has a Contracted Price
and a Zilliant Price, which are recorded in records on a custom object named Contracted
Prices.

This is an odd use case, because there’s an entire functionality built out for Contract
Pricing, but go with it. The procedures work for any values.

I am not going to use Contracted Price or Zilliant Price to change the product’s pricing, but
rather to show approvers what those prices are in custom fields on the Quote Line Item.
Therefore, I’m going to use 0 as the Adjustment Value, so the price is unchanged.

Procedures
1. Create a custom object named Contracted Price Entries. You need these fields:
a. Name
b. Product (Lookup to Product2)

39
c.
Adjustment Type (Text 18) When you create a record, this field can only contain 'AdjustmentPercen

d.
Adjustment Value (Number 18,0) j When you create a record, this field should contain 0.
e. Price Adjustment Schedule (Master-detail) (Price Adjustment Schedule)
f. Product Selling Model (Lookup to Product Selling Model)
g. ContractedPrice__c (Currency)
h. ZilliantPrice__c (Currency)

2. Create custom fields on the Quote Line Item object to match the fields in your
custom object; e.g., ContractedPrice__c and ZilliantPrice__c.

3. Create and activate a Price Adjustment Schedule


a. Name = Contracted Price Adjustment
b. Adjustment Method = Range
c. Price Book = Standard Price Book (or your preferred price book)
d. Effective From = select the first of the month so it doesn’t conflict with your
Price Procedure’s effective date
e. Schedule Type = Volume

4. Create Price Adjustment Tiers


a. Tier Type = Amount

40
b. Lower Bound = 1
c. Upper Bound = leave blank
d. Effective From = select the first of the month
e. Product = select the product for which you want to enter
f. Price Adjustment Schedule = Contracted Price Adjustment (this is the
schedule you created in Step 3)
g. Tier Value = In this case, because you’re using the Price Adjustment
Schedule to populate custom fields that don’t affect the price, the Tier Value
can be anything. It’s a required field, so you have to enter something, but it
won’t have an effect in this use case. If you were to create real price-
affecting price tiers, of course, you’d enter a dollar value here that would be
used in the Pricing Procedure.
h. Effective To = leave blank
i. Product Selling Model = the selling model on your product
j. Pricing Term = leave blank
k. Pricing Term Unit = leave blank

5. Create a Decision Table (see screenshot below)


a. Name = Contracted Price Entries
b. Source Object = Contracted Prices
c. Related Object = Price Adjustment Schedule.
d. Filter Results = First Match
e. Usage = Pricing

41
f. When you see a screen asking for a field value on the Price Adjustment
Schedule object, select Id and give it an alias of PriceAdjustmentSchedule.
g. Include the following on the Configure Columns screen:

Type = Required Input for

● Product (Lookup)
● Product Selling Model (Lookup)
● Price Adjustment Schedule (Master-Detail)
○ Operator = Equals

Type = Output for:

● Adjustment Type (Text)


● Adjustment Value (Number)

Type = InputOutput for:

● Contracted Price (Currency)


● Zilliant Price (Currency)
h. Activate the Decision Table.

42
6. Add your Decision Table to the default pricing recipe:
a. Go to Setup > Pricing Recipes > NGPDefaultRecipe
b. Click on the Price Adjustment Matrix tab
c. Click the Modify button
d. Click the + icon next to your Decision Table’s name
e. Save

43
7. Update your Revenue Cloud_SalesTransactionContextDefinition:
a. Clone it (you can’t edit it when it’s active, and you can’t deactivate it when
it’s tied to a Pricing Procedure)
b. On the Structure Tab, click Edit
c. Bypass the first screen, showing the structure. Click Next, and on the screen
showing Nodes and Attributes, select the SalesTransactionItem Inherited
node.
d. Click the Add Attributes button.
e. Add your custom field. (Do this for each new custom field you want to add)
f. Select the Type (Input Output is always safe) and Data Type (text, currency,
etc.)

g. Click Next, and add Context Tags for your new field(s).
h. Click Save.

44
i. Click on the Map Tab.
j. On the Quote Entities line, click the arrow and select Edit.

k. Click the Map button.

45
l. Scroll down to the Sales Transaction Item node, and map your new field(s)
to the Quote Line Item object.

m. Click Save.
n. Click the back arrow on this screen (not on your browser) to return to your
Context Definition.
o. On the row for your Quote Entities line, click the arrow and select Input
Mapping.
p. Click Generate All Mappings. Save. Wait for the save to finish (it could take
a couple of minutes) – This step may seem unnecessary, but you need to do
it so things we can’t see on the back end are correctly updated/mapped.

46
q. Click on Setup > Context Definitions.
r. Activate your new Context Definition (click the arrow and select Activate).

8. Update your Sales Transaction Pricing Procedure and your Default Product
Discovery Procedure with the new Sales Transaction Context Definition.
a. Open the Revenue Management Default Pricing Procedure.
i. Make sure no Pricing Procedure Versions are active.
ii. Update the Context Definition to your new definition.
iii. Reactivate the latest Pricing Procedure Version.

b. Open the Discovery Procedures object.


i. Select the Default Discovery Procedure.
ii. Deactivate the Default Discovery Procedure Version.

47
iii. Update the Context Definition to your new definition.
iv. Reactivate the Default Discovery Procedure Version.

c. Go to Setup > Context Definitions


i. Deactivate your first Revenue
Cloud_SalesTransactionContextDefinition. This saves later
confusion.

9. Clone your latest Revenue Management Default Pricing Procedure Version


a. Open the Pricing Procedures object
b. Select the Revenue Cloud_Revenue Management Default Pricing
Procedure

48
c. Click Save As.

10. Add a Price Adjustment Matrix from the list of Elements.

The Price Adjustment Matrix Element is used to achieve custom


adjustments/discounts beyond the OOTB price adjustments in Revenue
Cloud.

That’s why Adjustment Type, Adjustment Value, Quantity, and Input Unit
Price are required fields on your custom object and required Input Variables
in your Decision Table.

49
a. Create a Constant resource.
i. Name = ContractedPriceAdjustmentId
ii. Date Type = Text
iii. Default Value = the record id of your Price Adjustment Schedule,
created in Step 3.

50
b. In the Price Adjustment Matrix element, set Variables:

Because you’re in a Pricing Procedure, the variables you select will have as
names the Context Tag you gave them in your Context Definition (except for
the constant you just created)..

Input Rule Variables

Product = Product

Price Adjustment Schedule = ContractedPriceAdjustmentId

Product Selling Model = ProductSellingModel

Output Rule Variables

Adjustment Type = AdjustmentType

Adjustment Value = AdjustmentValue

Contracted Price = ContractedPrice

Zilliant Price = ZilliantPrice

Input Variables

51
Adjustment Type Field =
Constant_AdjustmentType_Contracted_Price_Entries_PAM*

Adjustment Value Field =


Constant_AdjustmentValue_Contracted_Price_Entries_PAM*

Quantity = LineItemQuantity

Input Unit Price = InputUnitPrice

Output Variables

Net Unit Price = NetUnitPrice

* For Adjustment Type Field and Adjustment Value Field: These constants
are in your Resource list (in left-side menu) under Constants. Click the name
of each and then click Edit. For Default Value, enter the API field name for
each, as created on your custom object (Contracted Price Entries): like
Adjustment_Type__c and Adjustment_Value__c. The data type for both
should be Text.

52
c. With your Price Adjustment Matrix highlighted, open the Element menu on
the left-hand side (the last icon). Check the box for Include in Output.

53
d. Save your Pricing Procedure Version.
e. Activate your Pricing Procedure Version.

11. Go to Setup > Pricing Setup and click the Sync button.

How to Use Multiple Pricing Procedures for Different Transaction Types

By now you may be wondering, as I did, whether it’s possible to use multiple Pricing
Procedures. Salesforce says repeatedly that only one Pricing Procedure–and only one
version of it–can fire in a transaction.

How, then, can you use multiple Pricing Procedures?

The steps are documented well by Salesforce here.

54
The quick explanation is: Say you have different pricing for B2B and B2C customers. By
creating a flag (or flags) on your Quote, such as checkboxes for B2B and B2C, you can tell
the system which Pricing Procedure you want to fire.

Once you have your flag, say for B2B, you create a record on the Sales Transaction Type
object. On this record, you select the Pricing Procedure you set up for B2B transactions.
Then you create a flow that selects the Sales Transaction Type that matches your flag–and
voila, your B2B Pricing Procedure fires.

Usage-Based Pricing

You’ll need to set up both Rate Management and Usage Selling.


Only evergreen products can be set up for usage-based pricing.
Documentation lacks some key information:

● As with pricing, you will set up both a Rating Procedure and a Rating
Discovery Procedure. Clone them from the Expression Set Templates.

● Open the first version of the Rating Procedure and click Save As so you can
edit it. Be sure the Base Rate element is selected to Include in Output.

● Once your Rating Discovery Procedure is set up, be sure to go to Setup >
Revenue Cloud Settings and select the Default Rating Discovery Procedure as
your Default Usage Rating.
○ You must name it “ Default Rating Discovery Procedure” – you can’t
name it anything else; it must be exactly that.
○ The documentation is incorrect at present. If you look up Usage Selling in
the documentation, it will tell you to set the Default Usage Rating to your
Rating Procedure. Don’t do that! Set it to the Rating Discovery
Procedure.

● Manual Rate Discount – It’s not necessary to add this to your rating procedure;
however, if you want to, you can. I saved the Default Rating Procedure as
RLM_DefaultRatingProcedure. You need to create custom tags to use in the
Manual Rate Discount element. This means creating two Constants in your
Rating Procedure–it does not mean updating the Rating Context Definition. The
tags you need to create are AdjustmentType and AdjustmentValue:

○ Name:
AdjustmentType
○ Data Type:
Text
○ Default Value:
Override

○ Name:
AdjustmentValue

55
○ Data Type:
Number
○ Default Value:
0


You must add a field to your Product layout: Usage Model Type.
(This is not documented.) It’s a picklist field. I’ve heard that if your
product is a parent product, set the value to Anchor; otherwise, set it to Pack.
But I also set up a Product Usage Grant and in doing so saw an error message
that says you cannot charge an overage if your product’s Usage Model Type is
Pack – so that seems to indicate that the model type also depends on whether
or not you want to charge an overage.


If you have a custom Permission Set for your sales users, modify it; if not, create one. Add Read/Edit pe
○ Product Usage Grant
○ Usage Grant Renewal Policies
○ Usage Grant Rollover Policies
○ Usage Resources

● Be sure to add this Permission Set License to your User record:


○ Usage: Design User


Once you’ve gone through the Rate Management setup steps in the documentation, you must
search documentation for Usage Selling.
Rate Management will not function until you go through the setup process for
Usage Selling.

● You need to create records on these objects, which are not mentioned in the
documentation:

○ Product Usage Grant


○ Price Book Rate Card

A Product Usage Grant describes what comes with a usage product. For
example, a Voice Plan might come with 500 Minutes. A Price Book Rate Card is
a junction object that ties your Rate Cards to your Price Book.

● Be very, very careful when you create records on these objects: Product Usage
Grant and Usage Resource. You must create these records in Draft status.
Once saved, you can then update the status to Activated. But be very sure
you’re ready to activate the records, because a known bug prevents you from
editing or deleting an activated record.

○ But Tomáš Migra figured out this workaround: Set the End Date to today
and wait a day. (Setting it to yesterday doesn’t work.)

○ You need a Usage Resource record for every usage product you have.

● Once you have your usage product, product selling model, price book entry, rate
card, rate card entry, price book rate card, product usage grant, usage resource,

56
unit of measure class, unit of measure, and usage resource billing policy
records, you must update four decision tables:

○ Price Book Entries v2

○ Rate Card Entries

○ Price Book Rate Card Entries

○ Rate Card Entry Resolution Entries

It’s best to refresh these tables individually, rather than using the Sync button,
so you don’t max out your limit of 20 refreshes per hour.

● When you add a usage product to a Quote, you can click the down arrow on the
Quote Line Item to select Price By Usage.

This will bring up a screen showing details related to your product and its usage.

Rate Management was introduced in Winter ‘25 and is not yet compatible with Billing.

Revenue Cloud Advanced doesn’t have the ability to expose Rate Cards during
quoting, the way CPQ can expose Consumption Schedules that users can edit during
deal negotiations.

57
Derived Pricing

Derived Pricing is known as Percent of Total pricing in CPQ. Create a Derived Price
record to define the product being priced this way and the calculation formula for the
percentage price. If it’s a percent of the price of a product, define the Pricing Source as
Product and populate the Source Product lookup field. If it’s a percentage of the total
quote cost, define the Pricing Source as Header and leave the Source Product blank.
For a Shipping product that’s 5% of the product total on the Quote, the Pricing Source
is Header and the formula is PERCENTAGE(HeaderTotal,5).

Add the Derived Pricing element to your Pricing Procedure. Because I defined the Header as the Pricing Source
map Subtotal to
TotalLineAmount. (If you map it to ItemNetTotalAmount, you won’t be able to activate
the Order.)

Bundle-based Adjustments

You can create bundles with products that have different selling models, but your bundle-
based adjustments will apply only to products that have the same selling model as the
parent product. If a parent’s model in Evergreen and a child’s model is One-time, the child
product will take the List Price even if you set up an adjustment on that product.

Cost-Plus-Markup Pricing

If you’re going to use this method, you need to build a Cost Book Entries decision table.

58
Then open your Sales Context Definition and map the Sales Transaction to the Price Book.
The fields you need to map are CostBook, TotalCost, and TotalAmountCosted. On the
Price Book side of your mapping, you need to find the Cost Book Id – which you do by
connecting CostBook to Pricebook2.Id.Costbook.Id – but you won’t see that immediately.
Start on the right side, with the PriceBook. You will only see Pricebook2.Id on the field list –
but there’s a + icon next to the field name. Click on that; then you can select CostBook.Id.
From there, map it to CostBook on the left, in the SalesTransaction node. (h/t Joe
Jaggassar)

59
QUOTING
New Quote

In CPQ, you could create a Custom Action to put a New CPQ Quote button on the
Opportunity object and set default field values for the Quote record. In Revenue Cloud, the
core Quote object is not supported for Quick Actions. You can use the OOTB New Quote
button on the Quotes related list on Opportunity. Alternatively, you can follow directions
here to create a Custom Action that uses URL as the Content Source:
https://www.passagetechnology.com/passage-technology-blog/new-quote-button

Product Selection

You cannot set the order of products in the product selector when you click Browse
Catalogs. Products are always displayed alphabetically.
If you don’t want bundle component products to be visible in the product selector, on
the Product record, mark them “Sell only with other products.”

Depending on how you click through the product configurator, you may inadvertently
end up creating multiple Quote Line Items for a single product. There are two ways to
avoid this:

1. Check the box at left before you configure your product. Once it’s configured,
click the Save button (to save the configuration) and then click the Add button
(to select it for addition to the Quote), and then click Save again (to add it to the
Quote as a Quote Line Item).

2. (Effective, but annoying): Don’t check the box at left; don’t configure the product;
just click the Add button and Save. Then use the caret at the end of the Quote
Line Item to select Configure; configure the product and Save.

Product Configurator

The Product Configurator shows your products and their Attributes (if any), as well as
bundle parent/child products. You can open the OOTB Default Product Configurator Flow

60
to see the components in the screen element. You cannot declaratively alter what’s in the
components on the screen, but you can do it programmatically – and you can add standard
fields to the screen layout.

For example, you can add Start Date and End Date fields to the configurator to make it
easier to define them for a subscription product.

Steps for Adding Fields to the Product Configurator


1. In Setup, open the Default Product Configurator Flow template and save it as a new
flow with a different name.
2. Create a new flow resource for the Quote Line Item record variable:

61
3. Open the screen element, which looks like this:

(More information about these components comes after this list of instructions.)

4. Scroll down to where you want to insert the fields. I decided to put them after the
Product Header.
5. On the left panel of elements, select the Fields tab and select the Quote Line Item
record variable you just created.

62
When you do, fields from the record will become available for selection:

Support for custom fields will be provided in an upcoming release.

6. Scroll down to find the Start Date and End Date fields, and drag them to your
screen element.

63
7. Click Done.
8. Activate the flow.
9. Navigate to the Product Catalog Management app and open Product Configurator
Flows:

You can see that I have two, and one is default. The one I just created is not defaulted.

10. Open the new one.


11. On the Related List named Product Configuration Flow Assignment, click the New
button.
12. Select the Product to which you want to apply this new flow that shows the dates.
That’s it – now, when you select this product when building a Quote, you’ll see the
Start Date and End Date fields in the Product Configurator.

To use the values you input in the customized configurator, you need a developer.

See: Product Configurator Business APIs and Use Place Quote API or Place Order API for
Data Transfer in Developer Documentation.

Data/objects are exposed out of the Data manager component. They can be passed out of
Data Manager into a Lightning Web Component via flow input properties in the Flow
Builder. See: https://help.salesforce.com/s/articleView?
id=sf.product_configurator_data_types_for_configurator_user_interface.htm&type=5
And see documentation on how to expose your LWC properties to Flow Builder:
https://developer.salesforce.com/docs/platform/lwc/guide/use-config-for-flow-
screens.html

64
Subscriptions

When you add a subscription product to a Quote Line Item, click the arrow at the right
end of that line and select View. This opens the Quote Line Item record. Here you have
Start Date and End Date fields, where you define the dates of the subscription term.
For an Evergreen subscription, just enter the Start Date.

There’s a Start Date field on the Quote, but entering a date there doesn’t carry forward
to Quote Line Items. Out of the box, you can manually open each Quote Line Item
record that requires start/end dates and enter them. But with a little work, you can
follow the instructions in the previous section to add the date fields to the product
configurator.

You can add additional fields for subscription information to the Quote Line Item page
layout:

If your selling model is Term Defined Year or Evergreen, you can set the Period
Boundary to “Day of Period” and select the Month and Day:

65
If you have a subscription period defined by Start Date and End Date, it isn’t necessary
to set the Period Boundary.

How the Pricing Term Works.


The Pricing Term on the Product Selling Model is not the same thing as the Subscription
Term or as the Billing Frequency.

The Pricing Term is always 1 when you create it because it's telling the system that the
product price is for 1 month or 1 year or whatever Pricing Term Unit you choose.

When you add the product to a quote, on the quote line item record, you can enter
Subscription Term. If you enter 12 and your Pricing Term Unit is 1 month, the Net Unit
Price will be 12 x Price.

Billing Frequency changes the Pricing Term on the Quote Line Item so that the system
knows that on an invoice, the Amount Due should be calculated according to how many
Pricing Term Units are in that billing period. So, if you set the Pricing Term to Month on the
Product Selling Model, and Billing Frequency to Quarterly, the amount due will be the Price
x 3 months (the number of Pricing Term Units in the Billing Period for the Quote Line Item).

Ramp Deals

Instructions for setting up ramp deals are good in Salesforce product documentation,
but here’s a bit more information about adding a ramped product to a Quote.

Salesforce designed this feature to support free trial periods and discounts, but not
uplifts. This is a pretty severe limitation that several users have pointed out to
Salesforce already. I’ve never wanted to set up a ramp deal that didn’t have price uplifts
year over year, so I don’t know what they were thinking. You can’t get around this by
entering a negative discount percentage, either, because that’s not supported. I
considered creating a custom Uplift field, updating the sales context definition, and
updating the pricing procedure. But you can’t add a field to the display of ramp items
and you can’t open the Quote Line Item records for any but the first segment, so you
wouldn’t be able to use a custom Uplift field if you created one.

66
They tried to make it possible to create monthly segments, and that works if you have
more than 12 months. They plan to fix it so you can have fewer than 12 months in an
upcoming release.

If you do want to set up a ramp deal with a free trial period and/or a discount, here’s
what they don’t include in the documentation: Select the product as usual and save the
Quote Line Item. At the end of the row displaying the product, click the caret and select
Ramp. On the modal that appears, you can set the length of the subscription term (and,
if you configured it, of the trial period). Click the Generate button and the system will
create multiple Quote Line Items, one for each ramp period. The Start Date of the first
segment will be today’s date. You can click the date fields for each segment to edit
them. Click the Save button.

Your list of Quote Line Items will show only ONE line for the product. The Net Unit Price
displayed is for the first ramp period. If your first period is a free trial, the Net Unit Price
will be $0 and the Discount will be 100%. If you hover over the Total Price, you’ll see
the breakdown of each ramp period and its price. We are all hoping they display all
segments, with segments two through X indented, as for a bundle–or make them
accessible in some way.

Quote Documents

Revenue Cloud comes with a Document Builder, accessible in Setup. When you create
a new document, you decide whether to start with a default template or a blank
template. The default template for Quotes shows quote lines with columns that cannot
be changed or edited. But if you start with a blank template, you can add the Quote
Lines component to it and have the ability to select the fields you want to use for your
columns. If Document Builder isn’t to your liking, you can create documents with more
flexibility by using Omnistudio Document Generator.

About the Calculate Prices and Update Prices buttons

Salesforce documentation tells you how to add these buttons to the Quote page layout
(actually, Calculate Prices is a Lightning Web Component that looks like a button).
They don’t tell you that these buttons aren’t needed, because your pricing updates
automatically every time you save.

ADVANCED APPROVALS
Assign Object Permissions:

● Approval Submissions
● Approval Submission Details

67
● Approval Work Items

If you’ve ever set up Advanced Approvals with CPQ, you know that you’re not able to lock a
record during the approval process without some clever work on dynamic page layouts.
Well, rejoice, because record locking is now a thing in Revenue Cloud.

Approvals require flows to work. You must be good at flow configuration to set this up.

Jean-Michel Tremblay made an excellent video to show you how to configure Rev
Cloud Advanced Approvals, available here. I suggest you watch it before you read this
section. (And when you do, subscribe to his channel.)

You may also want to read this excellent overview of Revenue Cloud Advanced Approvals
by Tu Phan before you begin.

Smart Approvals and Delegated Approvers are not yet included, but you could devise flows
to handle those situations.

Use Case

My use case is slightly different from the one in Jean-Michel’s video:

● If the Quote’s grand total is greater than or equal to $500,000, it needs approval by
the Pricing Manager

● If any Quote Line Item has a discount less than or equal to 5% and no lines have
higher discounts, auto approve

● If any Quote Line Item has a discount greater than 5% and less than or equal to
10%, it needs approval by the Pricing Manager

● If any Quote Line Item has a discount greater than 10%, it needs approval by the
Pricing Manager, the Pricing Analyst, and the CEO

Create a Flow to Evaluate the Quote

First you need a flow that does two things: Assign variables you’ll use in your Approval
Orchestration flow, and update the Quote’s Status when approval is submitted, granted, or
rejected.

In my use case, I need a variable that holds the Quote’s Grand Total. I also need collection
variables for Quote Line Items that have discounts < 5%, >= 5% and < 10%, and > 10%.
I’ve decided that because approvers will have to open the Quote, where the list of Quote
Line Items clearly displays the Discount Percentage, it’s not necessary to find or use only
specific line items that have discounts. It’s enough to know whether there are lines with
discounts in those ranges.

Create an Auto-Launched Flow from Scratch. I named mine “Approval - Quote Evaluation.”

68
My first step is to get the Quote that’s being evaluated. Create a text variable named
recordId and set up the Get element like so:

Save only the first record and store all fields.

Next, add a Decision element to evaluate the Quote Status.

69
On the Draft or In Review path, add an Update element to change the Quote status to In
Review.

Next, create a number variable named GrandTotal and assign its value from the Quote:

Add a Get element to get all Quote Line Items. Add a Loop element. Inside the loop, create
a Decision element to evaluate the Discount value on each quote line. Create decision
paths for discounts ranging from 5 or less, 5 to 10, and 10+. Add collection variables to hold
quote line items in each path.

70
Create a boolean variable named IsOrchestrationConditionMet and use an Assignment
element to set its value to TRUE.

After the Loop is complete, and on the default path from the Quote Status decision
element, connect this Assignment element.

This flow is now complete:

71
Create Flows to Update Quote Status to Approved or Rejected

Create separate subflows to update the Quote Status. These are simple auto-launched
flows with a single Update element. This is the one I created for Approved:

72
Create another one that updates the Status to Rejected.

Create an Approval Orchestration Flow

Create a new flow from scratch and select Autolaunched Approval Orchestration.

This type of flow allows you to add Stages for the approval flow, Steps to take at each
stage, and Decision elements to create different paths.

73
Click the + sign to add a Stage and name it Quote Submitted. (Later, we’ll create a Submit
for Approval button on the Quote object, which will trigger this flow when it’s clicked.) Set
the element to complete when all steps are completed. This will be true in all the Stages we
add.

Click the Add Step button in the Stage element. This gives you a choice of Approval Step
or Background Step. Select the Background Step.

I selected the first flow we just created as the Action to run and used its name in the name
of the Step. I set the condition to start the step when the Stage starts:

74
Scrolling down in the Step, I see a list of all the variables in my Approval - Quote
Evaluation flow. I toggled them on and created variables in this flow with the exact same
names as the variables in the Approval - Quote Evaluation flow (the names must match).

Next, I add a Decision element to evaluate the Grand Total:

75
Look closely at the Resource field. You need to click through several values to get to the
one you need, as shown in this screenshot:

Because the Quote needs Pricing Manager approval if the total is >= $500,000, I add a new
Stage to the first decision path. I name it Manager Approval, and this time I add an
Approval Step (not a Background Step):

For the Action, I select Approvals Workflow: Evaluate Approval Requests, which is a flow
that comes OOTB. This is the screen flow that lets the approver approve or reject the
Quote and add a comment. It looks like this:

Scrolling down from the Action in the Approval Step, I set values as below.

76
Note that the Approver Type can be User, User Resource, Group, Group Resource,
Queue, or Queue Resource. If you select one of the resources, you need to create a
variable for it. I selected User and populated the lookup field with the user I want.

I don’t recommend selecting User, Group, or Queue


(as I’ve done here simply for ease of setup and testing). If you do, you w
select User Resource, Group Resource, or
Queue Resource. Of course, this means you also have to use a Get element and assign a
value to your variable.

Again, I pass in the recordId, and here is where I lock the record and allow the approver to
edit it. I also defined the Approval Chain Name (“Manager”).

Now I need a Decision element to evaluate whether the Quote is approved or not. Your
Outcome should look like this:

77
For this Resource value, follow the path in this screenshot:

With the resource selected, you can now finish the decision outcome by defining Equals
Approve . It is not “Approved” with a final d.

Name your Decision element’s Default Outcome “Rejected.”

From the Decision element, add two new Stages, one for Approved and one for Rejected.

78
In each, add a Background Step, in which you select your Quote Approved subflow or your
Quote Rejected subflow as the Action. Toggle on the variable for recordId and populate it
with the recordId resource.

Next, I need to configure the orchestration for evaluation of the Quote Line Item discounts,
so I add another Decision element after the Approved Stage. Each outcome describes
conditions for each collection variable:

79
If all the Quote Line Items have discounts less than or equal to 5%, I want the Quote to be
auto approved. This outcome is true if the record collection for 5 or Less is not empty, and if
the record collections for 5 to 10 and 10 + are empty. For this decision path, I add a new
Stage and a Background Step for Auto Approval. It’s configured the same way as the
Manager Approval Stage and Step. (I could simply link this decision path to that Manager
Approval Stage element, but I want to make it clear to anyone reading the flow that the
decision outcome leads to Auto Approval.)

80
The 5 to 10 outcome is true if that record collection is not empty. I link that decision path to
the Manager Approval Stage.

The 10 + outcome requires approval from a Pricing Analyst, so now I need a new Stage
and Approval Step. I name the Stage Pricing Analyst Approval and select the user I want to
approve the Quote at this stage (again, if you’re going to deploy this flow to another org,
select a User Resource, Group Resource, or Queue Resource for the Approver Type).

81
Finally, I need another Decision element to evaluate whether the approver approved or
rejected the Quote. This is configured the same way as for the Manager, except that in
selecting the Resource, you must start with this Orchestration Stage (Pricing Analyst
Approval):

82
From each Decision outcome path (Approved or Rejected), you can link the element back
to the Approved/Rejected Stages earlier in the flow.

So far, this flow is set up for serial approvals; that is, first the manager approves, then, if
necessary, the pricing analyst approves. But what if you want both the pricing analyst and
the CEO to approve at the final stage? That would be a parallel approval. To do it, just click
the Add Step button in the Stage again, and select the CEO user.

83
Note that here I do not select Lock the record, because the record is already locked
at the Pricing Analyst step. If you select Lock the record here, you’ll get an error. I gave this
Approval Chain a different name and updated the Stage name to Pricing Analyst/ CEO
Approval.

For the parallel approval to work, I update my Decision element, this time selecting the
output of the CEO Approval step:

I also change the default outcome’s name back to Default Outcome and add a new
Outcome; I want to be sure the approval is rejected if either the pricing analyst or the CEO
rejects it.

84
The final flow looks like this:

85
Obviously, you can make this as complex as you like. For example, you can create a
subflow that sends an email notification to your users and call that in a step. If you’ve
gotten this far, you know how to configure whatever you need to.

86
Create a Lightning Web Component for the Submit for Approval Button

Jean-Michel Tremblay has provided code for creating the LWC here. Scroll down the page
and look for Implementing the Button: LWC & Apex Example

If you don’t know how to create a LWC, check out the instructions here.

Create the Submit for Approval Button and Update the Quote Page Layout

You’ve probably created a button before; just open the Quote object in Setup, and click on
Buttons, Links, and Actions on the left-side menu.

1. For Action Type, select Lightning Web Component.


2. Select the LWC you just created.
3. For Label Type, leave it at None.
4. Enter the Label: Submit for Approval
5. Save

Now update the page layout by dragging the button to the Mobile and Lightning Actions.

Back on the front end, click on a Quote record and select Gear Icon > Edit Page to enter
the Lightning Page Editor.

In the Highlights Panel, add an Action and select “Submit for Approval”.

Add a new Tab and name it Approvals (a custom name).

Drag the Flow Orchestration Work Guide component to the new tab. This displays the
Accept/Reject/Comments window in the approval screen flow you added to your
orchestration flow.

Add the Approval Trace component to the tab underneath the Work Guide. This displays
the approval steps. In our example, only the first step for Manager Approval will be shown
until the Manager takes action. If approved, the next steps for Pricing Analyst and CEO
approval will be shown.

87
BILLING
Billing in Revenue Cloud

Billing in Revenue Cloud (available in Winter ‘25) is not the same thing as Salesforce
Billing; it isn’t supported if you have the Salesforce Billing managed package installed.
Billing does not support ramp deals, usage-based products, or early renewals; if you need
these features, use Salesforce Billing (or the billing system of your choice). Or wait until a
later release.

Permissions

You need this permission set license:


● Billing User

You need these permission sets:

● Billing Admin
● Billing Operations User
● Create Billing Schedules from Billing Transactions API
● Credit Memo Operations User
● Data Pipelines Base User
● Generate Invoices from Billing Schedule API
● Manage Errors Using Invoice Error Recovery API
● Tax Admin
● Tax Configuration
● Void a Posted Invoice API

Once you’ve assigned the Data Pipelines Base User permission set to your own user
record, enable Data Pipelines:

Setup > Data Pipelines > Get Started: toggle Data Pipelines on

Check the Salesforce box. Later, if you set up additional data warehouses, you can
enable them.

Setup

Setup is quite straightforward and the documentation for it is fine. There are just two things
to watch out for:
1. Billing Batch Schedulers

Be very careful when you create a Billing Batch Schedule. You cannot edit it once it’s been
saved. The only thing you can do is to Activate a schedule that’s been saved as a Draft.
Salesforce is aware that it’s a problem not to be able to edit these records, and will fix that

88
in an upcoming release. For now, you have to deactivate any unwanted record and create
a new one.

2. Billing Settings

Once your records have been created, be sure to go to Setup > Billing Settings and
complete that page.

a. Context Definition = BillingContext (given to you OOTB)


b. Context Mapping = OrderEntitiesMapping (give to you OOTB)
c. Legal Entity = the entity you created
d. Billing Treatment = the treatment you created
e. Tax Treatment = Tax Treatment for taxable products
f. DPE Definition to Close Legal Entity Accounting Periods = Close Legal Entity
Accounting Period
g. The last few settings on the page are up to you to decide how to handle

Don’t forget to open the flow template named Order To Billing Schedule Flow
and save it as a new flow. As with the Order Submit flow, this one contains a Get element
that fetches an ApplicationUsage record and a Decision that evaluates the Type value. And
as with that other flow, if you keep them in your version, you’ll get an error message when
you try to activate an Order.
Delete the Get and Decision elements and leave only the Action element that call
Salesforce will fix this bug in a later
release.

Also, pay attention to the Start Conditions. The OOTB flow contains the condition Status =
Activated. In my setup, I changed the Status values on my Order object; I want the flow to
be triggered when the Status = Submitted. Just make sure your flow matches the Stage
you use on your Order object.

If you have Billing enabled in Setup, even if you don’t have a tax calculator set up, you must select a default tax trea
Tax Treatment
for taxable products. If you don’t select this setting, you’ll get an error message when you
activate an Order.

Tax

You can set up as many tax engines as you want. Go to Setup > Feature Settings > Billing
> Guided Setup > Step 2: Tax Configurations to follow the steps for setting up the engines
and tax records.

89
Once you do those steps, all you need to do is set which engine and which policy is the
default (let's say it's Avalara). Go to Setup > Billing Settings to set the default.

Because you can have multiple tax treatments tied to multiple tax engines and policies,
when you want to apply a tax treatment other than the default, you should be able to use a
flow to update the Quote Line Item records with the tax treatment you need for the other
regions. But unlike with Salesforce Billing and CPQ, here the Quote Line Item record does
not have a lookup field for the Tax Treatment. I’m creating a case to call this to the product
team’s attention.

Given the current product architecture, it seems the only way to apply an alternate tax
treatment is to have multiple product records for the same product, and assign those with
Tax Treatment 1 to one Price Book, and those with Tax Treatment 2 to a second Price
Book. That way, you could select the US or Other Price Book according to your customer's
location.

90
But that means an awful lot of duplicate product configuration, especially if you have many
attributes and attribute-based adjustments.

DYNAMIC REVENUE ORCHESTRATOR


DRO works with Revenue Cloud Advanced at present. In 2025, Salesforce plans to release
a version that will also work with CPQ.

First, go to Setup > Dynamic Revenue Orchestrator Settings and click the toggle to turn on
DRO. Set the Fulfillment User to the User Who Submitted the Order, or to a User you
specify in the lookup field.

There are two main parts to DRO: Order LifeCycle Management and Fulfillment
Management.

Revise the Order Submit Flow

You use a flow to call a Submit Order API element. Typically, when an Order’s Status is updated to an Activated valu
This flow does not work as designed.
Getting it to work is easy, though: simply remove the Get element and the Decision
element, leaving only the API element.
Modify this:

91
To this:

Modify Your Custom Assetize Order Flow

Before getting to DRO, you should have opened the Assetize Order flow and saved it as a
custom flow. To avoid errors with DRO, open your custom flow and modify it so it fires only
when a record is updated to meet the entry conditions, and check the box to add an
asynchronous path to the flow. Cut-paste the action element to the asynchronous path.

Extend the FulfillmentAssetContext Context Definition

As you did when you first set up Context Definitions, you must extend the OOTB
FulfillmentAssetContext context definition. Just click Extend and save it with a new name,
like RLM_FulfillmentAssetContext. Edit it to mark the mapping as Default. Then activate it.

Define Context Definitions for Dynamic Revenue Orchestration

Go to Setup > Feature Settings > Dynamic Revenue Orchestrator > Context Definition
Settings

In the first section (Sales Transaction Context Definition), change the setting to the latest version of your RLM Sales

92
You must map each node:

These settings will ensure that any attributes selected on a product will be carried forward
to the records your fulfillment team will see (once you do some additional configuration for
attribute mapping).

About Order Lifecycles

Salesforce documentation discusses Order Lifecycles in Revenue Cloud here. As of mid-


September 2024 (Dreamforce), this documentation is not updated. The process introduces
new objects. I talk about that below.

93
Order LifeCycle Management Setup

Create a Custom Permission and Custom Permission Set

Documentation covers this, but it confused


me, so I want to call out that you must create a
Custom Permission in Setup and assign it to a custom permission set.
1. To do so, go to Setup > Custom Code > Custom Permissions. Create a new one
named Object State Transitions. Give it a description like, “Able to create records
for Object State Transition and Object State Value to define Order lifecycles.”
Make a note of the recordId, which you need later.

2. Next, create a custom Permission Set: Clone the Orchestration Process Manager
Permission Set; unlike most of the available perm sets, this one gives you access to
the Custom Permissions settings. I named mine Custom Order Mgmt Permission.
Open it; click Custom Permissions; then click the Edit button and select the Object
State Transitions Custom Permission you just created.

3. Finally, assign the Custom Order Mgmt Permission to yourself and any users who
need to manage order fulfillment.

Create an Object State Definition Record

Start by creating Stage picklist values on the Order object. Then you can create custom
Order Stages and define valid transitions from one stage to another (for example, from
Draft to Ready to Submit, and from Ready to Submit to Submitted). Doing so requires you
to create records on objects named Object State Definition, Object State Value, and Object
State Transition. For some reason, the App Launcher provides no direct access to the
Object State Value and Object State Transition objects; they’re accessed through the
Related List tab on Object State Definition records.

My org came with an Object State Definition (and related records) for Contract LifeCycle Management. I created a ne
Make a
note of the Object State Definition record Id.

94
Create Object State Value Records

On the Related tab of the record you’ve just created, you can see lists for Object State
Transitions and Object State Values, which come with a New button. Start by creating
Object State Values. I created records for each of these Order Stages:
● Draft
● Ready to Submit
● Activated
● Processing
● Fulfilled
● Rejected

These records have a lookup field for Custom Permission. This is where you should be able to find your Custo

keep a list of the


record Ids of each record as you create it.

95
If you want to limit access to the Order, you can select one of the values in the
Reference Record Access Type picklist, but this isn’t required. The Reference Record
Layout Field Value isn’t required, but you should enter the Order Status picklist value
that corresponds to this Object State Value.

Create Object State Transition Records


Next, create Object State Transition records. These are the records I created:
● Draft to Ready
● Ready to Activated
● Activated to Processing
● Processing to Fulfilled
● Processing to Rejected
Here, you have lookup fields to your Object State Value records so you can define the
From State and the To State.
You also have a lookup to the Object State Definition you created. And finally, a loo
Again, as you create the records, keep a list of the record Ids.

96
Populating the Custom Permission–The Workaround:

1. Open the Developer Console (click the gear icon, select Developer Console)
2. In the top menu, click Debug
3. Select “Open Execute Anonymous Window” – a modal opens with the label “Enter
Apex Code”
4. Copy-paste this sample code into the modal:
// User-provided values

String userProvidedObjectStateDefinitionId = 'IDPROVIDEDBYUSER';


String newCustomPermissionId = 'NEWCUSTOMPERMISSIONID';
try {
// Update ObjectStateTransition records
List<ObjectStateTransition> ostRecords = [
SELECT Id, CustomPermissionId
FROM ObjectStateTransition
WHERE ObjectStateDefinitionId
= :userProvidedObjectStateDefinitionId
];
for (ObjectStateTransition ost : ostRecords) {
ost.CustomPermissionId = newCustomPermissionId;
}
if (!ostRecords.isEmpty()) {
update ostRecords;

97
}
// Update ObjectStateValue records
List<ObjectStateValue> osvRecords = [
SELECT Id, CustomPermissionId
FROM ObjectStateValue
WHERE ObjectStateDefinitionId
= :userProvidedObjectStateDefinitionId
];
for (ObjectStateValue osv : osvRecords) {
osv.CustomPermissionId = newCustomPermissionId;
}
if (!osvRecords.isEmpty()) {
update osvRecords;
}
System.debug('Records updated successfully.');
} catch (DmlException e) {
System.debug('An unexpected error has occurred: ' +
e.getMessage());
}
5. Edit the code: substitute your record Ids for the ones in the sample
a. On row 2, for IDPROVIDEDBYUSER, enter the recordId of your ObjectState
Definition
b. On row 3, for NEWCUSTOMPERMISSIONID, enter the recordId of your
Custom Permission
6. Click the Execute button
That’s it–your records should be updated.

Activate the Object State Definition

Just open your record and check the Activate box.

98
Two Objects Will Confuse You, But You Can Ignore Them for DRO

Object State Action Definition (different from the Object State Definition you created
above) and Object State Transition Action (different from the Object State Transition you
created above): when the Contract Lifecycle Management (CLM) license is enabled, the
Object State Definition Action and Object State Transition Action records are created.
Admins can create new records, but should not modify the records that were auto-created.
The only perms a user needs to view these objects is the CLM Admin perm.

These two objects are not used in DRO.

Fulfillment Setup

Salesforce documentation doesn’t make a few things clear that you must know to follow
their instructions.

Order of Record Creation

Some of the steps below refer to things you may have to set up before you can complete
the steps. For example, if a Fulfillment Step is to send an email notification to the customer,
you may want to create a Flow to do that first, so you can refer to the Flow in the Fulfillment
Step record. Or, your step may be a callout to an external system; then, you would need to
set up an Integration Definition first. Or, you may want your step to refer to an Omniscript
that you have defined previously.
1. Product Fulfillment Rule Library
2. Product Fulfillment Decomposition Rule – here is where you define the bundle
parent as a Source Product and a component as a Target Product.
a. Execute On Rule (optional)
3. Fulfillment Workspace
4. Fulfillment Step Group (aka Fulfillment Step Definition Group)
5.
Fulfillment Step Group Scenario Required to make the Step Groups visible
6. Fulfillment Step Definition
a. Execute On Rule (optional)
7. Fulfillment Step - you can assign the step to a User or a Queue

You Must Update the Order Page Layout

To see Fulfillment Lines, you need to go to an Order record, click the gear icon, and select
Edit Page. Add a tab and select Fulfillment Lines as the name. From the components list on
the left, drag the Decomposition Viewer to the Fulfillment Lines tab. Save.

99
For the system to work, you also need to add two fields to the Order page layout:
Fulfillment Plan and Orchestration Submission Status.

How DRO works with Bundles

Say I have a Laptop Pro Bundle that has two products, Laptop and Mouse, that are
included in the price of the bundle. It also has optional products you can select: Keyboard,
Bag, Antivirus Protection, Warranty; selecting these products increases the bundle price.

For fulfillment, you need to set up Product Fulfillment Decomposition Rules.


Each bundle product, whether optional or not, needs its own rule. The rule
decomposes a bundle into its constituent parts, like so:

Source Product: Laptop Pro Bundle | Target Product: Keyboard

Source Product: Laptop Pro Bundle | Target Product: Bag

For each product, you will set up fulfillment steps, such as Assembly, Packaging, and
Shipment.

Because every product in the bundle has its own decomposition rule and its own fulfillment
steps, only the products you select for the bundle package–which appear as Order Lines–
generate Fulfillment Lines.

But here’s the unfortunate thing I’ve observed: If a child product is included in
the bundle’s price–that is, if you don’t need to select it as an optional product, and if it’s
not priced separately–it won’t generate a Fulfillment Line. Instead, you’ll get a Fulfillment
Line for the parent product, and your fulfillment team will need to know what is included–in
this example, the Laptop and Mouse. This has been logged as a bug at Salesforce.

You Need a Rule Library

Before you do anything, be sure to create a Rule Library (call it Product Fulfillment Rule
Library) with your default RLM_SalesTransactionContext and Dynamic Revenue
Orchestrator selected as the Usage Type. If you don’t have a rule with the DRO Usage
Type, you won’t be able to create any “Execute On” Rules on your Decomposition Rules.
(More on those below.)

What Looks Like a Serious Problem Actually Isn’t


It only looks like you’re up a creek without a paddle if you set up the system for fulfillment
and then create a new Context Definition.

You select your current sales transaction Context Definition when you set up your Rule
Library. Once saved, the Rule Library can be edited–but the Context Definition cannot be
changed. If you have a new Context Definition, you can’t update the Rule Library.

But you CAN assign a new Context Definition to a VERSION of your Rule. When you clone a new rule library versi

100
“Execute On” Rules

Next, you’ll create a Product Fulfillment Rule. It defines a Source Product that decomposes
to one of its components, named a Destination Product here.

Within this rule, you have the option of creating an “Execute On” Rule, where you define
conditions under which the Product Fulfillment Rule should apply. For example, when
Quantity >= 1. You can add multiple conditions to create rules of high complexity. If you
don’t create an Execute On Rule, your Product Fulfillment Rule will fire every time (which
can be fine).

At this writing, unfortunately, I’m still having trouble generating Fulfillment Line Items when I
include an Execute On Rule – something to do with a context tag. Salesforce Support is
investigating.

Fields and Attribute Mapping

Also within each Product Fulfillment Rule, you can map fields on the Source Product to
fields on the Target Product (see Salesforce documentation for an explanation)
. It is not a requirement to map any fields.
But say you have a bundle and the component
products have Attributes. Then you must map them in your Product Fulfillment Rule so the
Attributes appear on the Fulfillment Line Item record.

In my trial org, I created a Laptop Pro Bundle that has several component products, most of which have Attributes. Th
I had to edit my Laptop product
so its “Based On” field says “Computers.” That adds the Attributes to your parent product,
which makes them available for mapping.

But because other component products also have Attributes, I need to create a new Product Classification to hold a co
all
of the component products. I then need to add this new Classification to the bundle parent
product’s Based On lookup field.

101
So, a tip: If you don’t see Attributes on the left side of the Fields & Attribute Mapping tab on
your Product Fulfillment Rule, you’ve forgotten to add the Attributes to the parent bundle
product.

Putting all the Attributes on the parent product also means that when you add the bundle to
a Quote, you’ll see a gear icon on the parent product, for configuration. Whatever
configuration you select on the parent product will not matter; it is only configuration of the
component products that carries forward. But if you have any attributes that are marked as
required, give them a default value; otherwise, you’ll have to select something on the
parent product.

When you map the Attributes, you connect the name of the attribute on the left of the
screen to the same name on the right of the screen, like so:

When I click the Graphics attribute on the right side, I get a popup screen:

You use the “As Is” mapping type for text, number, or date fields, and “List Mapping” if you
have an attribute picklist. I have several picklists to map.

In my screenshot above, I connected the Graphics Attribute for mapping. This is a picklist,
so I selected List Mapping and the popup screen changed to this:

102
This was confusing: I assumed I could select “Existing List” and enter “Graphics” in the List
Name lookup and find the Attribute List. But no. Even though I have an Attribute Picklist for
Graphics, this lookup field is not pointing to that object. Instead, I have to select New List,
enter a List Name, and click the +Add Row button that becomes active when I enter the
name.

On the first row, I can click into the field in the left column and see the available values from
my Attribute Picklist:

103
The same thing happens when I click in the field on the right column:

Continue in this way until you’ve added as many rows as are available in your picklist, and
until you’ve added all the new lists you need for your Attributes.

Once you’ve created these lists, you’ll be able to search for them using the Existing List
radio button when you set up other products that have the same Attribute Picklists.

One thing I like is that if you’ve excluded an Attribute Picklist value from the list that applies
to this product, the full list of picklist values appears in the left column, but the list with the
excluded value appears in the right column.

When done mapping, my Product Fulfillment Rule’s Fields & Attributes Mapping tab looks
like this:
Unfortunately, this is as far as I’ve gotten here. While I now know how to map the attributes,
I still haven’t been able to create fulfillment line items that display those attributes.
Salesforce has launched an investigation.

104
The Fulfillment Workspace

The Fulfillment Workspace begins as a record you create on that object. Records you
create in subsequent steps affect the appearance of the workspace by creating a Visio-type
flow with swimlanes containing linked steps.
Fulfillment Step Groups creates the swimlanes. Fulfillment Steps appear inside the lanes.

Fulfillment Step Scenarios define when the step should happen: Add, Amend, Renew, or
Cancel.

CONTRACTS
Creating Contracts

You can create new contracts from a Quote or from an Order. Either add the “New Contract” button to the page layo

If you create a Contract from a Quote, the system will create Contract Item Price records
(visible on a related list on the Contract).

If you create one from an Order, Contract Item Price records will not be created, unless you
copy/save/modify the Create Contract from Quote flow and change Quote to Order. Also,
the Order must be in an inactive status when you create a Contract from it. And the only
way to activate a Contract created from an Order is to activate the Order first.

About Asset Creation

Even though the Product2 records contain a checkbox for “Is Assetizable,” Revenue Cloud
will create Assets for all products, even those that don’t have that box checked. Some
would call this a design flaw. Your business may not want to create Assets for all products,
so you can get around this with a flow.
Salesforce documentation describes using a flow to create Assets from Orders here. To
create Assets selectively, you can add a checkbox for Is Assetizable to the Order Product
object; populate that box on Order Products with a flow; and add a decision element to the
flow that creates Assets. Decide whether “Is Assetizable” is TRUE on the Product record,
and only if it is, proceed to the Invoke Order to Asset action.

If a customer orders a product with a quantity of 3, a single Asset record will be created
with that quantity. On the roadmap, Salesforce plans to enable “asset serialization,” which
would in this example create three Asset records.

105
Evergreen assets may only be amended, renewed, or canceled on their anniversary date.

For pricing renewals or amendments of Assets, set the value of the Pricing Source field on
the Asset record. You can select Last Transaction or List. If you have a blanket policy or
want to select one of these values as the default, you can populate the field with a flow that
fires on creation.

Migrating Assets

If you’re migrating Assets from a legacy org, keep these things in mind:

● You can just use generic Salesforce APIs to create assets.

● There's a special org perm that you'll have to log a Support case to get. The perm
will grant Create and Edit access to Asset Action, Asset Action Source, and Asset
State Period records.

● During migration, you'll want to create that data too, if you expect the migrated asset
to be eligible for Revenue Cloud Amend/Renew/Cancel features.

Renewing Bundles

When renewing bundles, you have to renew the whole bundle. This may not pose a
problem, but it may, depending on what’s in the bundle. For example, you sell a software
subscription that comes with support for the life of the subscription – no problem. But if you
sell a computer that comes with a support subscription you can buy or not, your customer
may want to renew only the support option. In that case, you have to renew the whole
bundle and give the computer a 100% discount. Not ideal, but that’s the way it works.

Renewal Opportunities

If you want the system to create Renewal Opportunities when you renew an Asset from a
Contract, you must be sure to go to Setup > Quote Settings and deselect Create Quotes
Without A Related Opportunity.

Canceling Assets

The Status field on the Asset record will not change when you cancel an Asset. You need
to create a flow to update the Asset record when an Asset Action record is created and the
Type is Cancel.

106
PARTNER USERS
If you set up an Experience site and enable Partner Users, you need to do two things to
enable them to create a Quote:

1. Go to Setup > Security > Sharing Settings and change the setting for Sales
Transaction Type to Public Read for both internal and external users.

2. Go to Setup > Permissions > Custom Partner Community User Perm Set and add
Read access to the Sales Transaction Type object.

The system uses this object in the background to call the Pricing Procedure, so your
Partner Users must have access to it. Salesforce will probably change the default settings
in a future release.

MISCELLANEOUS TIPS
Things to Check if Products Aren’t Available for Selection

Whenever you add a product or an attribute that affects pricing, you must go to Setup >
Feature Settings > Salesforce Pricing > Salesforce Pricing Setup and click the Sync button.
This is required to make the product visible in the product selector.

You can refresh the pricing decision tables 20 times an hour. If you wait, it will work again.
You can avoid problems by refreshing just the decision table related to the changes you
have made, but that can still take several minutes for each one (Setup > Decision Tables >
click the one you want > click Refresh button top right).

Be sure your Product Discovery Procedure is completely mapped, that your default Product
Discovery Procedure is correct, and that your Sales Context Pricing Procedure is applied to
your Product Discovery Procedure and to your Product Discovery Pricing Procedure.

If you’ve done all this and you still don’t see your product(s) when you click Browse
Catalogs, wait. It can take up to an hour for the system to catch up to you.

Product Classification

Weird nomenclature: “Product Classification” – actually, Product Attributes are assigned to


Product Classifications. Products are not assigned to Product Classifications. Products are
assigned to Categories.

107
Price Book Entries Are Tied to Product Selling Models

The same product can be added to a single price book more than once if it has different
Product Selling Models.

Product Images

Product images should be uploaded as static resources before you use the URL in the
Product detail.

Doc Gen

You need to install the Omniscript managed package if it's an existing SF org. See
https://help.salesforce.com/s/articleView?
id=xcloud.os_install_or_upgrade_the_omnistudio_package.htm&type=5

QUESTIONS and ANSWERS


1. I created a Context Definition and mapped fields and added tags, so why can’t I see
the custom fields in the Qualification Procedure flow (Expression Set)? They aren’t
showing up as variables for selection.

a. ANSWER: I neglected to activate the Context Definition.

2. If I add a bundle to a quote, I only see one quote line for the bundle. Is there a way
to display the components? How does the user configure the component options,
such as the number of USB ports?

a. ANSWER: When selecting the product from the catalog, you have to click
the gear icon to configure the product.

3. Why don’t I see the Configure quick action on Quote Line Item?

a. ANSWER: I was looking at the QLI record; instead, on the list of QLIs, click
the caret at the end of the line row to reveal View, Edit, Configure, Delete.

4. When I add a bundle to a Quote by using the Add Products search bar on the Quote
Line Items related list (instead of using the Browse Catalogs button), why don’t I see
the component products?

a. ANSWER: When using the Add Products button, the system will add only
the required child products to the quote, not optional child products. So, it
works for a static bundle where you have required child products, but not for
a configurable bundle.

108
5. Why do I get this error message when I add a product to a Quote Line Item?
“Resolve error: Something went wrong while hydrating additional context fields:
Cannot invoke
“industries.context.api.service.model.runtime.schema.impl.defaultimpl.DefaultConte
xtRuntimeentityAttribute.getTags()” because the return value of
“java.util.Map.get(Object)” is null”

a. Context Definition Mappings not done correctly (Changing Field Types from
Object after the Context Mapping is done, Ex: Changing Text field in Product
to Picklist field)

b. Incorrect/No Mappings for Custom Tags in the Context Definition Mappings


(Try Generate All Mappings )

c. No Default Mapping in Context Definition.

d. If you have a new version of your sales context definition, make sure it's
linked on your Product Discovery Procedure as well as on the Sales
Transaction Procedure.

e. Make sure your Decision Tables are synced.

f. Make sure the Attribute-Based Pricing element of your Pricing Procedure is


selected for output.

g. You don’t have all the required permission sets assigned to you.

109

Common questions

Powered by AI

Challenges in configuring the Product Configurator in Salesforce Revenue Cloud include managing complex product hierarchies, ensuring synchronization of products and pricing, handling multiple configuration rules, and customizing the user interface. To address these challenges programmatically: 1. Manage complex hierarchies by leveraging decision tables and qualification rule procedures for product eligibility and configuration . Use Catalogs and Product Hierarchies to organize products effectively and ensure backward compatibility across updates . 2. Ensure synchronization of products and pricing by regularly refreshing pricing decision tables and syncing the Salesforce Pricing setup following changes to products or attributes . Use the Bulk API for importing large datasets efficiently when dealing with a large number of products . 3. Handle configuration rules by utilizing the built-in rule library to manage validation, exclusion, and inclusion rules, ensuring that configurations adhere to business requirements . Configuration rules can be programmatically managed through Headless APIs to customize UI interactions . 4. Customize the UI programmatically by using custom Lightning Web Components (LWC) and flows to add fields like start and end dates to the configurator, enhancing its functionality . Custom components can be developed to integrate with third-party configurators or to add specific fields and logic needed for complex product configurations . Adapting these programmatic solutions allows for effective management and customization of the Product Configurator to meet specific business needs within Revenue Cloud.

Pricing Procedures and Context Definitions in Salesforce Revenue Cloud are closely interlinked, playing a critical role in configuring pricing strategies. A Context Definition sets the objects and fields available for use in a Pricing Procedure, defining the structure of relationships and tags needed for pricing logic . You extend standard Context Definitions, like the Sales Transaction Context, to create custom ones that suit specific business needs, mapping custom fields and objects which are then leveraged for pricing calculations . Pricing Procedures use these Context Definitions to fire sequences of pricing elements and rules, ensuring flexibility and preciseness in pricing . Both Procedures and Context Definitions must align, as the latter dictates the scope of actionable data that pricing logic can access .

Implementing Evergreen pricing for subscription models in Salesforce Revenue Cloud requires specific configurations such as setting the Start Date for subscriptions and ensuring that these dates are reflected accurately in Quote Line Items . This involves using the Product Configurator to handle Dates and mapping the Sales Transaction to the Price Book with relevant fields like CostBook, TotalCost, and TotalAmountCosted for precise cost management . Evergreen subscriptions can only be amended, renewed, or canceled on their anniversary date, requiring precision in setting these parameters at the outset .

Custom fields can be incorporated into Salesforce Revenue Cloud's Product Discovery Pricing Procedure by first creating Context Definitions that map these fields to the required objects and fields. This involves extending the standard Sales Transaction and Product Discovery context definitions to include these custom fields . Once the Context Definitions are updated, the custom fields can influence pricing calculations by being available for use within the Pricing Procedure's logic . These customizations allow for additional elements such as formula-based prices, qualification, and discount rules to factor into the pricing calculations . Upon making these updates, it's important to ensure that the pricing procedure versions are activated, and the context definitions are mapped correctly to ensure the custom fields are included in pricing algorithms ."}

Critical steps to updating a context definition in Salesforce Revenue Cloud involve extending the standard context definitions and updating related pricing procedures. First, extend the Sales Transaction Context Definition and create a custom definition . Next, ensure this custom definition includes all necessary custom fields and attributes for your pricing needs by mapping them appropriately . Then, create or update the related pricing procedures such as the Revenue Management Default Pricing Procedure, ensuring they are tied to your newly created context definitions . This process allows for the inclusion of custom objects and fields, necessary for calculating accurate pricing, ensuring that your pricing procedures can be tailored to your business needs . This process is essential because it provides the flexibility needed to adapt the standard out-of-the-box logic to specific organizational requirements, allowing for the dynamic adjustment of prices based on custom-defined criteria and enhancing the overall pricing accuracy and efficiency .

A Price Adjustment Matrix in Salesforce Revenue Cloud is designed to facilitate custom pricing adjustments or discounts beyond the out-of-the-box (OOTB) capabilities. This matrix requires key fields like Adjustment Type, Adjustment Value, Quantity, and Input Unit Price to be included on custom objects. It plays a crucial role in customizing pricing by allowing users to input these variables into Decision Tables, thereby enabling complex and tailored pricing solutions . The Decision Table linked to the matrix can manage a range of pricing scenarios by using variables such as ContractedPrice__c and ZilliantPrice__c, which can be displayed on Quote Line Items to reflect various customized pricing strategies . By utilizing a Price Adjustment Matrix within a Pricing Procedure, businesses can create specific pricing adjustments that cater to different customers or transaction types, thereby enhancing the flexibility and precision of pricing solutions in the Revenue Cloud .

Using Flow Builders in Salesforce Revenue Cloud enhances the flexibility and efficiency of product configuration by allowing for customization and automation of processes through configurable flows. These flows can be tailored to adapt to specific business needs, thereby enhancing user efficiency and minimizing manual processes . Flow Builders provide the capability to integrate with third-party systems, customize the user interface with headless APIs, and create custom components like Lightning Web Components (LWC) for better adaptability to different product and pricing scenarios . Additionally, they enable the inclusion of comprehensive configuration rules, streamlining the configuration process by automating complex decision-making logic, which directly improves efficiency .

Salesforce Revenue Cloud automatically creates Assets for all products, even those not marked as 'Assetizable,' which might not align with all business strategies . To customize asset creation, businesses can use flows to selectively create Assets by adding decision elements that check whether a product is marked 'Assetizable'; only then will it proceed to asset creation . Additionally, Salesforce plans to introduce asset serialization, which would create individual Asset records based on ordered quantities, providing even further customization opportunities .

To update product and pricing records in Salesforce Revenue Cloud using custom actions, you must use context definitions and pricing procedures. The process involves creating or modifying existing context definitions such as the Sales Transaction Context and Product Discovery Context to include custom fields, objects, or any new components relevant to pricing updates . You begin by extending the standard Sales Transaction Context and Product Discovery Context to create customized versions, which allow you to map necessary fields and objects for pricing calculations. These customized context definitions are used in pricing procedures, where you sequence pricing actions using elements and groups . Once these context definitions are set up, you can assign them within your pricing procedures. These procedures, similar to enhanced CPQ Price Waterfalls, allow flexible insertion of pricing elements and are executed in sequence. Through these steps, you ensure that any updated product or pricing data is accurately reflected in associated pricing procedures . Additionally, you might need to manage these updates through relevant settings in Revenue Cloud, adjusting settings for your custom contexts and pricing procedures to ensure synchronization across your organization’s pricing functionalities .

Revenue Cloud offers improved flexibility and customization over traditional CPQ models through the use of dynamic Pricing Procedures that replace static Price Rules. Elements and groups within these procedures can be inserted or modified to adapt pricing logic flexibly and allow sequence adjustments for custom pricing actions . Additionally, Revenue Cloud introduces a configurable Context Definition, enabling users to define custom fields and objects associated with sales transactions, providing improved flexibility for unique pricing needs . Advanced features like Dynamic Revenue Orchestration and the ability to create and apply complex pricing models without fixed price rules enable customization across different transaction types .

You might also like