Find Lookup Records

The sample Apex class can be used in the Legacy Quote Line Calculator to query records within the plugin and use fields from those records to set each quote line’s Description field.
Available in: Salesforce CPQ Winter ’16 and later

Salesforce CPQ no longer provides support for Legacy Quote Calculator plugins. Check out the Javascript Quote Calculator Plugin for support and improved features.

Note

Example

global class QCPForFindingLookupRecords implements SBQQ.QuoteCalculatorPlugin, SBQQ.QuoteCalculatorPlugin2 {
 global set<String> getReferencedFields() {
 return new Set<String> {
 String.valueOf(SBQQ__QuoteLine__c.SBQQ__ProductCode__c),
 String.valueOf(SBQQ__QuoteLine__c.SBQQ__Description__c)
 };
 }

 global void onInit(SObject[] lines) {}

 global void onBeforeCalculate(SObject quote, SObject[] lines) {}

 global void onBeforePriceRules(SObject quote, SObject[] lines) {}

 global void onAfterPriceRules(SObject quote, SObject[] lines) {}

 global void onAfterCalculate(SObject quote, SObject[] lines) {
 if (!lines.isEmpty()) {
 String[] productCodes = new String[0];
 for (SObject line : lines) {
 String productCode = (String)line.get(String.valueOf(SBQQ__QuoteLine__c.SBQQ__ProductCode__c));
 if (productCode != null && !productCode.isWhitespace()) {
 productCodes.add(productCode);
 }
 }
 SBQQ__LookupData__c[] ds = [SELECT Id, SBQQ__Category__c, SBQQ__Value__c FROM SBQQ__LookupData__c WHERE SBQQ__Category__c IN :productCodes];
 if (!ds.isEmpty()) {
 Map<String,String> valuesByCategory = new Map<String,String>();
 for (SBQQ__LookupData__c d : ds) {
 valuesByCategory.put(d.SBQQ__Category__c, d.SBQQ__Value__c);
 }
 for (SObject line : lines) {
 String productCode = (String)line.get(String.valueOf(SBQQ__QuoteLine__c.SBQQ__ProductCode__c));
 if (productCode != null && !productCode.isWhitespace()) {
 line.put(String.valueOf(SBQQ__QuoteLine__c.SBQQ__Description__c), valuesByCategory.get(productCode));
 }
 }
 }
 }
 }
}