Skip to main content

#Salesforce CPQ & Billing31 utenti parlano di questo argomento

Once invoices are generated, how are you managing payment reminders, dunning, and collections follow-up? Custom Flow/Apex, a third-party AR tool, or still manual chasing in Service Cloud or spreadsheets?  

 

Disclosure: I work on Quick Receivable, an AR automation app for Salesforce. Genuinely curious what teams here are doing post-invoice, not trying to pitch anything. 

 

#Salesforce CPQ & Billing

1 risposta
  1. 7 set, 14:44

    We’ve found Flow is fine for basic reminders, but collections gets messy pretty quickly once invoices go overdue in different ways. At that point I’d rather have a proper AR tool handling the follow ups than keep adding more Flow rules or tracking things in spreadsheets.

0/9000

We have a product rule set up as follows in Sandbox and Production. Below is the Current Product Rule Configuration.  

 

Product Rule Header: 

  • Type=Selection 
  • Conditions Met = All 
  • Scope = Product 
  • Evaluation Event = Always 
  • Evaluation Order = 10 

Error Condition: 

  • Tested Object = Quote 
  • Tested Field = Boost = True
  • Operator = equals 
  • Filter Type = Value
  •  Filter Value = TRUE 

Price Action 1

  • Product = Product A 
  • Type = Enable 

Price Action 2

  • Product = Product B 
  • Type: Enable & Add 

Price Action 3

  • Product = Product C 
  • Type = Enable & Add 
  • Required = True 

Price Action 4

  • Product = Product C 
  • Type = Hide 

Configuration Rule

:  

Product = Bundle 1  

 

Results in the Configurator

 

In Sandbox the following is occurring in the Configurator:

  • Product A is not appearing
  • Product B is not appearing
  • Product C is appearing and checked

In Production the following is occurring in the Configurator:

  • Product A is appearing
  • Product B is appearing and checked
  • Product C is not appearing

What the Sales team would like to have happen is:

  • Product A is appearing
  • Product B is appearing and checked
  • Product C is appearing and checked

What correction needs to happen to get this to occur? At a minimum I would think I would delete Product Action 4. 

 

Thank you. 

Rachel 

 

#Salesforce CPQ & Billing  #CPQ @* Salesforce Revenue Cloud *

1 risposta
  1. 6 set, 02:36

    Your instinct to delete Price Action 4 is right, and here's why it's likely the actual root cause of the environment difference, not just a cleanup step. 

    You have two Product Actions targeting the same product (Product C) within one rule, with directly contradictory outcomes: Action 3 says Enable & Add + Required, Action 4 says Hide. Unlike Product Rules themselves (which have an explicit Evaluation Order field to control which rule "wins" when multiple rules affect the same product), individual Product Actions within a single rule don't have a documented, configurable sequence field in the UI. When two actions in the same rule conflict like this, which one is applied can come down to internal record creation order - and if this rule was built independently in Sandbox and in Production (rather than deployed as a single unit via change set/package that preserves record order), it's entirely plausible the two environments evaluate Action 3 vs. Action 4 in a different order, which would produce exactly the opposite behavior you're seeing on Product C between the two orgs. 

    Given the outcome the Sales team actually wants — Product C appearing and checked — the fix is straightforward: delete Price Action 4 (Hide on Product C) entirely, and keep only Price Action 3 (Enable & Add, Required) for Product C. That removes the ambiguity rather than relying on action-order behavior that isn't guaranteed to be consistent across orgs. 

    One more thing worth confirming before you conclude it's purely a config issue: since Product A and B's behavior also flipped between environments (not just C), double-check that the Quote.Boost__c field is actually set to TRUE in both orgs during your test — if the condition itself isn't evaluating the same way in both places (e.g., a default value difference on that field between Sandbox and Production data), that alone could explain the whole rule appearing to "not fire" in one environment before you even get to the Product C ordering issue.

0/9000

Hello!

Any idea why search filters are not visible for specific users? I see it in Quote Line Editor but user with the same permission sets does not. We have different profiles but I can not guess which option is resposible for that. Modify all and view all permission do not change anything

6 risposte
  1. 10 ago 2023, 07:34

    @Pawel Wiktorek Please check-

    1. If User has access to Search Filter records.

    2. If there are multiple "Add Products" custom actions and the other user is looking at a different Add Products custom action.

    3. Try executing scripts under CPQ Package Setting -> Additional Settings

    4. Try creating another Search Filter with Product Code-contains-blank. If it works, change the Field to HierarchyLocation__c

    5. If nothing helps, please create a case with SF CPQ Support.

0/9000
Has anybody heard of a way segment (or desegment) all line items on a quote? 
11 risposte
  1. 4 set, 13:21

    @Ben Boring

     

    The above custom is only working after quote lines got saved then if we click the buton it is segmenting, but the refresh screen is not working, we need to manually refresh the screen to see the segmented lines. 

     

0/9000

I have two items related to reconfiguring bundles and how to handle existing subscriptions and assets. 

First Bundle

 

Currently we have a bundle configured as below:

  1. Bundle Header (Parent) - Product A (renewable subscription that has a price associated with it)
    1. Child Product (product option) - Product B (one-time asset that has a price associated with it).

When added to a quote, since the child is not flagged as Bundled, pricing sits at both lines. The business now wants to re-design the bundle. They want it to look like the following:

  1.  Bundle Header (Parent) - Product C (renewable subscription that has a $0 price)
    1. Child Product (product option) - Product A (renewable subscription that has a price associated with it).
    2. Child Product (product option) - Product B (one-time asset that has a price associated with it).

Pricing would sit at each child product line. I was thinking I could just reconfigure the bundle by creating the bundle header and adding Product A as a child and then Product B as a child. And remove the child option (product B) from from Product A (basically breaking the original bundle apart).  

But my concern is existing data that was sold under the current configuration. Do I create subscription bundle headers and then realign the current subscriptions and assets to the new bundle header (adding the Root ID, Required By ID, adjust the product option information on each subscription and asset)? If so, what are the possible risks to amendments and renewals? If this is not the best approach what would you suggest? I can’t create new product codes so I need to use the current products and product codes. 

 

Second Bundle

We have a one time subscription Service product that is part of two bundles. We want to break this apart from the bundles to make it standalone and have it only added on new sales quotes. This Service product is a one-time subscription product.  

For new sales, I need to hide the options within the two bundles and have the product auto added. For amendments, I need the options available for the products being revised but if we are adding one of the two bundles for the first time we need the option for the Service product hidden in both bundles.  

How would i build this? For new sales I am thinking a product selection rule to add the standalone product. For new sales a product selection rule to hide the options. For amendments, how would I approach this? 

 

Thank you. 

 

#Salesforce CPQ & Billing  #CPQ  #CPQAskAnExpert

0/9000

Hello, 

I am trying to understand best practice for discount schedules when applying to a brand new sale and when applying to an amendment. Here are the scenarios:

  1. New Sale - pulls in current discount schedule. The discount schedule is using either the SBQQ__Quantity__c field or a custom quantity field. Cross Orders is checked true. Some discount schedules have aggregation scope blank and some have aggregation scope set to Product.
  2. Amendments - subscriptions lines being pulled in through the amendment process apply the original discount schedule as expected. Any new lines added are applying old discount schedules without a tier. But we want the new discount schedule to apply to new lines. Things to note are in number 1 above the SBQQ__QuoteLineQuantityField__c and the fact that Cross Order is checked as true. I have written a price rule that does the following and is working as expected on the new lines but I am not getting the Discount Tiers. Do I need an additional price rule to apply the tier or do I need to create duplicate Discount Schedules that look at the SBQQ__EffectiveQuantity__c field for amendments?
    1. Price Rule Header
      1. Evaluation Scope: Calculator
      2. Lookup Object: SBQQ__DiscountSchedule__c
      3. Calculator Evaluation Event: Before Calculate
    2. Price Conditions
      1. SBQQ__Existing__c equals false
      2. SBQQ__Product__c not equal to blank
    3. Lookup Query
      1. Query 1
        1. Tested Object: Quote Line
        2. Match Type: Field Value
        3. Tested Field: SBQQ__Product__c
        4. Operator: equals
        5. Lookup Field: SBQQ__Product__c
      2. Query 2
        1. Tested Object: Quote
        2. Match Type: Field Value
        3. Tested Field: SBQQ__PricebookId__c
        4. Operator: equals
        5. Lookup Field: SBQQ__Pricebook__c
      3.   Query 3
        1. Match Type: Static Value
        2. Tested Value: true
        3. Operator: equals
        4. Lookup Field: Active_for_New_Quote_Lines__c
      4.  Query 4
        1. Match Type: Static Value
        2. Tested Value: 2026
        3. Operator: equals
        4. Lookup Field: APricing_Year__c
    4.  Price Actions
      1. Price Action 1
        1. Target Object: Quote Line
        2. Target Field: SBQQ__DiscountSchedule__c
      2. Price Action 2
        1. Target Object: Quote Line
        2. Target Field: SBQQ__DiscountSchedule__c
        3. Source Lookup Field: Id

Thank you. 

 

#Salesforce CPQ & Billing  #CPQ

1 risposta
0/9000
4 risposte
0/9000

We use Salesforce CPQ and we do not use MDQ. We use quote line groups on a quote to signify the year of the subscription. For example,

  1. Year 1 quote line group has dates of 1/1/2026 through 12/31/2026 and comes on as list price. 
  2. Year 2 quote line group has dates of 1/1/2027 through 12/31/2027 and we want to apply a 5% uplift using the year one price and apply 5% uplift to each line in the Year 2 quote line group.
  3. Year 3 quote line group has dates of 1/1/2028 through 12/41/2028 and we want to apply a 5% uplift using the year 2 price and apply that 5% to each line in the Year 3 quote line group.

Does anyone else done this before? If so, and you used the QCP could you share how you built it? We need help building this and adding to our current QCP.    Thank you.   

1 risposta
  1. 14 ago, 20:28

    Hi Rachel - yes, this is very doable with the QCP, and since Year 1 comes in at list you actually have a clean shortcut. Two approaches, depending on exactly what you're upflifting from: 

     

    Common setup for both: order your Quote Line Groups by the group's Start Date so you always know which is Year 1, 2, 3, and match lines across groups by Product (add any configuration attributes to the match key if the same product is configured differently across years). 

     

    Option A - uplift off list (simplest, and it fits your description): because every year holds the same product at the same list price, a compounding 5% is just a per-group markup. The simplest lever is a negative Additional Discount (%), which acts as a markup in CPQ - set it by group in onBeforeCalculate: Year 2 = -5, Year 3 = -10.25. The formula per group is -(1.05^(year-1) - 1) x 100. That lands Year 2 at list x 1.05 and Year 3 at list x 1.1025 - true compounding - and you never have to read another line's calculated price. (Just confirm negative discounts are allowed in your CPQ package settings; if they aren't, set the target Unit Price directly instead.) 

     

    Option B - compound off the prior year's actual (discounted) price: if Year 1 might carry negotiated discounts and you want 5% on the real Year 1 price, do it in onAfterCalculate instead. Build a map of each product's Customer Price (or Net Price) from the prior group, then set this line's price to priorPrice x 1.05. One gotcha worth knowing: CPQ re-derives List Price from the price book during calculation, so don't try to override List - apply your value at the Customer/Net price stage, which is exactly why onAfterCalculate is the right hook here. 

     

    For a straight 'Year 1 at list, +5% each year' setup, Option A is far less code and less fragile, so I'd start there and only move to B if you need to compound off discounted prices. 

     

    (A CPQ Price Rule can handle a flat per-group uplift too, but the compounding across three groups is cleaner to express in the QCP - so your instinct is right.) 

     

    Happy to sketch the grouping/ordering loop if you go with Option A!

0/9000

Using Enterprise Edition with CPQ. On a CPQ quote a sales rep pushes a custom button to book the order, which creates a case that moves on to Contracts, then the Sales Order team for entry into the ERP. There is a one-to-one lookup relationship between CQP Quote and Case. On the case, once the Sales Order teams confirms the quote is good, I would like to put a button or a checkbox on the case that runs a flow that goes to the quote and checks the box Ordered, which creates an order. The flow should then get the newly created order and do the same actions that clicking the Activate button does. I suspect it runs the two CPQ Apex triggers, on named OrderTrigger and the other named OrderProductTrigger. The main question is, would this take care of all the things that the order's Activate button does if you select it manually? Any other advice on how to "press the Activate button" via automation rather than manual action?

1 risposta
  1. 12 ago, 15:03

    Setting the Order Status to Activated should run the triggers and perform the same actions as using the button.  

     

    Note that Order creation runs some async processes that must complete before you Activate. Check the documentation for this. Some of the processes include creating price schedules (if needed) or contracting an amendment (if needed). You may need to build in a delay before triggering activation automatically. There may be some documentation or a knowledge article with more details. 

     

    -Frank 

0/9000

I created several custom fields on the Opportunity Contact Role object. I want these fields to be available in the "Add Contact Role" popup that appears when adding a Contact Role from an Opportunity.

I have already added the custom fields to the Opportunity Contact Role Multi-Line Layout, but they are still not displayed in the popup.

Is this popup customizable to show custom Opportunity Contact Role fields? If so, are there any additional configuration steps required? If not, what is the recommended Salesforce approach for capturing custom Opportunity Contact Role field values during contact role creation?

I've attached a screenshot for reference. 

How can I display custom Opportunity Contact Role fields in the

 

 

 

#Sales Cloud  #Salesforce  #Salesforce Developer  #Salesforce Admin  #TrailblazerCommunity  #Trailhead  #Trailhead Superbadges  #Trailhead Support  #Salesforce CPQ & Billing

4 risposte
  1. 11 ago, 03:34

    Hi Suhani, currently, Salesforce does not support customizing the standard 'Add Contact Role' multi-line layout pop-up to display custom fields, even if you add them to the multi-line layout. This is a known platform limitation.Recommended Approach: As a workaround, you can create a custom Screen Flow using Flow Builder to capture the contact roles along with your custom fields, and expose it via a custom quick action button on the Opportunity page.

0/9000