Loading

Configuring Header Discounts with Discount Distribution Service (DDS) in Revenue Cloud

Veröffentlichungsdatum: May 26, 2026
Beschreibung

In Salesforce Revenue Cloud, Header Discounts allow a discount to be applied at the header level of a Quote or Order and distributed proportionally or equally across all line items using the Discount Distribution Service (DDS) NGP element within a Pricing Procedure.

Key Limitation: The DDS element cannot coexist with a Derived Pricing element within the same Pricing Procedure. If your org uses Derived Pricing, you must use two separate Pricing Procedures orchestrated via a Procedure Plan Definition.

This article covers:

  • Scenario 1: When Derived Pricing is NOT used
  • Scenario 2: When Derived Pricing Is used
Lösung

Scenario 1: Pricing Procedure Changes When Derived Pricing Is NOT Used

  1. Navigate to Setup → Pricing Procedures → Custom Revenue Management Default Pricing Procedure.
  2. Clone the OOTB Pricing Procedure with the same configuration and settings.
  3. Open the Expression Set associated with the cloned Pricing Procedure.
  4. Remove the NGP Pricing Element where Derived Pricing is involved.
  5. Add the following Constants into the Pricing Procedure:
    Constant NameMaps To
    DDS_NetUnitPriceNetUnitPrice
    DDS_OverrideOverride
    DDS_AmountAmount
    DDS_PercentagePercentage
  6. Configure Conditions for each of the following for DDS Integration:
    • Condition for Amount
    • Condition for Percentage
    • Condition for Override
  7. Add the Discount Distribution Service (DDS) NGP Element into the Pricing Procedure.
    ⚠️ Important: The DDS element must be placed as the last element in the Pricing Procedure sequence.
  8. Save and Activate the Pricing Procedure.
  9. Update Revenue Settings to use the new Pricing Procedure as default under:
    • `Setup → Salesforce Pricing → Salesforce Pricing Setup → Select a Pricing Procedure`
    • `Setup → Revenue Cloud → Revenue Settings → Set Up Salesforce Pricing`

Scenario 2: Pricing Procedure Changes When Derived Pricing IS Used

Because DDS cannot be used in the same Pricing Procedure as Derived Pricing, use a Procedure Plan Definition to run two separate Pricing Procedures sequentially.

 Part A: Configure the New Pricing Procedure (HeaderAdjustmentPP)

  1. Create a new Pricing Procedure named `HeaderAdjustmentPP`.
  2. Add the following Constants:
    Constant NameMaps To
    DDS_NetUnitPriceNetUnitPrice
    DDS_OverrideDDS_Override
    DDS_AmountAmount
    DDS_PercentagePercentage
  3. Configure Conditions for Amount, Percentage, and Override for DDS Integration.
  4. Add the DDS NGP Element as the last element in the Pricing Procedure.
  5. Save and Activate the Pricing Procedure.

### Part B: Configure a Procedure Plan Definition for Orders (HeaderDiscountPPDOrder)

  1. Navigate to Setup → Procedure Plan Definition and create a new definition:
    • Title: `HeaderDiscountPPDOrder`
    • Process Type: Revenue Cloud
    • Primary Object: Order
    • Context Definition: `PricingTransactionCD`
  2. Create Procedure Plan Sections:
    FieldSection 1 (Default)Section 2 (HeaderDiscountSection)
    Section TypeStandardStandard
    Section NameDefaultHeaderDiscountSection
    PhasesPricingPricing
    Resolution TypeDefaultDefault
    Read Context MappingOrderEntityMappingOrderEntityMapping
    Write Context MappingsOrderEntityMappingOrderEntityMapping
    ProcedureCustom Revenue Management Default Pricing ProcedureHeaderDiscountPP
  3. Save and Activate the Procedure Plan Definition.

### Part C: Configure a Procedure Plan Definition for Quotes (HeaderDiscountPPDQuote)

  1. Navigate to Setup → Procedure Plan Definition and create a new definition:
    • Title: `HeaderDiscountPPDQuote`
    • Process Type: Default
    • Primary Object: Quote
    • Context Definition: `PricingTransactionCD`
  2. Create Procedure Plan Sections:
    FieldSection 1 (Default)Section 2 (HeaderDiscountSection)
    Section TypeStandardStandard
    Section NameDefaultHeaderDiscountSection
    PhasesPricingPricing
    Resolution TypeDefaultDefault
    Read Context MappingQuoteEntityMappingQuoteEntityMapping
    Write Context MappingsQuoteEntityMappingQuoteEntityMapping
    ProcedureCustom Revenue Management Default Pricing Procedure (OOTB)HeaderDiscountPPQuote
  3. Save and Activate the Procedure Plan Definition.

### Part D: Revenue Settings Configuration

Navigate to Setup → Revenue Setup and apply the following:

  1. Remove the pricing procedure under "Set Up Salesforce Pricing".
  2. Enable Procedure Plan Orchestration for Pricing.
  3. Enable Exclude Default and Sales Transaction Type Pricing Procedures.

## Known Limitations & Issues

IssueDetails
DDS + Derived Pricing conflictDDS cannot coexist with a Derived Pricing element in the same Pricing Procedure. Use separate procedures via a Procedure Plan Definition.
DDS with Subscription Products (Term > 12 months)DDS does not correctly calculate discounts for subscription products with terms exceeding 12 months as it does not account for the Prorate Multiplier. GUS bug W-20106626 has been filed.
Workaround for Subscription Terms > 12 monthsAdd a Formula-Based Pricing Element before the DDS call: `TermAdjustedUnitPrice__c = ItemNetTotalPrice / LineItemQuantity`. Map this transient variable as both List Price and Input Unit Price in the DDS element.
Grand Total not updating after repeat discountsThe Grand Total on a Quote may not update correctly after second or subsequent header discount applications, even when QLI discounts apply. Investigate via Apex Debug Logs and Revenue Cloud Operations Console.
DDS not compatible with Revenue Cloud Advanced QuotesDDS is not integrated with Revenue Cloud Advanced Quotes. Custom fields and additional configurations may be required.

 Key Configuration Notes

  • The DDS element must always be the last element in any Pricing Procedure and can only be used once.
  • Fields such as `HeaderDiscountType`, `HeaderDiscountValue`, `HeaderDistributionType`, `HeaderDistributionLogic`, and `MinimumNetUnitPrice` must be mapped to custom fields on Quote and QuoteLineItem entities in the Context Definition.
  • The `isCustomMappingAllowed: true` flag must be set in the SalesTransactionContext for custom field mapping to work.
  • The Header Distribution Logic must be set to either `Equal` or `Proportional` — null values will cause discounts not to apply.
Nummer des Knowledge-Artikels

005385523

 
Laden
Salesforce Help | Article