Implementing Qualification & Disqualification Rules in Salesforce Revenue Cloud

Photo of author
Written By Jean-Michel Tremblay
Salesforce Consultant

A step-by-step guide that takes you from custom fields all the way to a fully filtered product catalog.

Why Qualification Rules Matter

Even well-curated product catalogs can confuse sellers when certain SKUs are limited to specific geographies, industries, or contract terms. Qualification rules ensure reps only see products that are actually sellable in a given situation, reducing quoting errors and improving customer satisfaction. This guide walks through an end-to-end implementation that filters products by Region —but you can adapt the pattern to any field or combination of fields.

Prerequisites

ItemNotes
Revenue Cloud org with Product Discovery enabledAPI version Summer ’25 (or later)
Permission to create custom objects, fields, flows, and ApexSystem Administrator or equivalent
Familiarity with Decision Tables and ProceduresHelpful but not mandatory
(Optional) Jetstream CLISpeeds up bulk field creation

1 · Create Custom Fields

We need a single Region picklist on two objects:

ObjectFieldTypeValues
QuoteRegion__cPicklistAmericas, EMEA, APAC
Product DisqualificationRegion__cPicklistSame list

Tip: Jetstream supports multi-object field creation. If you prefer the UI, navigate to Object Manager → [Object] → Fields & Relationships → New.

2 · Extend the Product Discovery Context Definition

  1. Setup → Product Discovery Context Definitions
  2. Clone or edit Product Discovery.
  3. Add a sibling node named Quote at the root level.

  4. Inside the new node, add an Attribute called Region
    (Data Type = Picklist, Direction = Input/Output).
  5. Tag the node and attribute (e.g., Quote and Quote.Region).

3 · Map Quote Data to the Context

  1. Still in the context definition, open Data Mappings → Product Discovery Mapping.
  2. Click Edit SObject Mapping+ Object → select Quote.
  3. Drag Quote (node)Quote (object).
  4. Map Region (attribute)Region__c (field).
  5. Save and Activate the context definition.

4 · Create Product Disqualification Records

Navigate to Product Disqualifications and insert rows like:

ProductRegionEffective FromEffective To
Americas SubscriptionAmericas2025-05-012099-12-31
APAC SubscriptionAPAC2025-05-012099-12-31

5 · Build a Decision Table

  1. Setup → Lookup Tables → New
  2. Type: Decision Table → Next

  3. Table Type: Standard  • 
    Usage: Product Qualification
  4. Select the Product Disqualification Decision Table template → Finish.

  5. Re-open the table → Add Condition Column

    Field: Region__c  •  Operator: != (Not Equal)
  6. Save, Activate, and (whenever you add data) Refresh the table.

6 · Create the Qualification Procedure

  1. App Launcher → Qualification Procedures → New
  2. Name: Product Disqualification  • 
    Usage: Product Qualification
  3. Context Definition: Extended Product Discovery
  4. Open Version 1 → Add ElementEvaluate Decision Table
  5. Point to your decision table and map variables:
Decision ColumnContext Variable
Product IDProduct.ID
Parent Product IDParentProduct.ID
Root Product IDRootProduct.ID
RegionQuote.Region
Is QualifiedIsQualified
ReasonReason

Save and Activate the procedure.

7 · Add the Apex Class for Extra Context

Create a class that converts any record (Quote or Order) into JSON for the Product Discovery LWC.

public class ProductDiscoveryAdditionalContextData {
    // This class is used to hold input parameters
    public class FlowInput{
        @invocableVariable(required=false)
        public String objectApiName;
        @invocableVariable(required=false)
        public String recordId;
    }
    // This class is used to hold output parameters
    public class FlowOutput{
        @invocableVariable
        public runtime_industries_cpq.ContextDataInput[] additionalContextData;
    }
    // This method can be called from a Flow
    @invocableMethod(label='Generate JSON' description='Generates additional Context data JSON for Quote node')
    public static List<FlowOutput> generateJSON(List<FlowInput> inputs){
        String apiName;
        String recId;
        FlowOutput output = new FlowOutput();
        // Create a list to hold results
        System.debug('Log Input :' + inputs);
        for(FlowInput input: inputs){
            apiName = input.objectApiName;
            recId = input.recordId;
        }
        List<runtime_industries_cpq.ContextDataInput> lstAdditionalContextData = new List<runtime_industries_cpq.ContextDataInput>();
        runtime_industries_cpq.ContextDataInput contextData = new runtime_industries_cpq.ContextDataInput();
        contextData.nodeName = apiName;
        contextData.nodeData = new Map<String, Object>();
        contextData.nodeData.put('id', recId);
        lstAdditionalContextData.add(contextData);
        output.additionalContextData = lstAdditionalContextData;
        List<FlowOutput> outputs = new List<FlowOutput>();
        outputs.add(output);
        return outputs;
    }
}

8 · Clone and Modify the Discover Products Flow

  1. Setup → Flows → Discover ProductsClone as New Flow.
  2. Add an Apex Action just before the Product List screen.

    Class: ProductDiscoveryAdditionalContextData.GenerateJSON

    objectApiName = “Quote”

    recordId = {!recordId}
  3. On the Product List screen, bind Context Data Input Array to the action’s
    output (additionalContext).
  4. Save as Custom Browse Products and Activate.

9 · Wire Everything Together in Settings

SettingValue
Context DefinitionExtended Product Discovery
Qualification ProcedureProduct Disqualification
Browse / Add Products FlowCustom Browse Products
Enable Qualification Procedure

10 · Test the Result

  1. Create a Quote with Region = Americas.
  2. Click Browse Catalog —only Americas products appear.
  3. Toggle Show Disqualified Products —APAC SKUs display as unavailable.
  4. Change the Quote’s Region to APAC; results invert exactly as expected.

Troubleshooting Checklist

SymptomLikely Cause
All products still appearFlow not updated or wrong flow selected in settings
No products appearQualification Procedure active but Region not mapped/populated
Unexpected resultsDecision Table operator mis-configured (= vs !=)
Apex errorsIncorrect object API name or field selection

Best Practices & Next Steps

  • Granular Data Model — consider custom metadata for multi-dimensional eligibility.
  • Version Control — store Qualification Procedures in VCS for auditability.
  • Automated Tests — build Apex tests that assert IsQualified across scenarios.
  • User Feedback — surface the Reason column in product tiles so reps know why a SKU is unavailable.

Conclusion

With Qualification Procedures in place, sellers navigate a cleaner catalog, pricing teams enforce policy automatically, and customers see only relevant options. Adapt this tutorial to other attributes—industry, contract length, compliance flags—and further streamline the quoting experience.

Questions or feedback? Comment on the accompanying YouTube video or reach out on LinkedIn. Interested in structured, hands-on guidance? Join the waitlist for the forthcoming Revenue Cloud course.

Leave a Comment