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 |
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));
}
}
}
}
}
}