Download PDF
Download page Comparing Products.
Comparing Products
This is used to retrieve products, based on product IDs, and compare them side by side. This is typically done from the Product Catalog, to decide between products before adding them to the cart.
Prerequisite: You must set up feature sets and associate them with the products you want to compare. There is no API for this process—you must configure this in your org. For more information, see Configuring Product Comparison.
API | Signature |
---|---|
compareProducts | webService static List compareProducts(Apttus_CPQApi.CPQ.FeatureInfoRequestDO request) |
Parameters | ||
---|---|---|
Name | Type | Description |
request | Apttus_CPQApi.CPQ.FeatureInfoRequestDO | The request data object. |
Request Data Object - Apttus_CPQApi.CPQ.FeatureInfoRequestDO | ||
---|---|---|
Field | Type | Description |
productIds | List<ID> | The list of Ids of the product you want to compare. |
Response Data Object - Apttus_CPQApi.CPQ.FeatureInfoResponseDO | ||
---|---|---|
Field | Type | Description |
FeatureInfos | List<Apttus_CPQApi.FeatureSupport.FeatureInfo> | This returns the list of features for each of the products included in the comparison. |
ProductId | ID | ID of the products, which have a feature set to be compared. |
Data Object - Apttus_CPQApi.FeatureSupport.FeatureInfo | ||
---|---|---|
Field | Type | Description |
ProductFeatureSet | FeatureSet | Associated Product Feature Set |
ProductFeatureSOId | Id | Id of associated ProductFeature__c Salesforce Object |
Data Object - Apttus_CPQApi. FeatureSupport.FeatureSet | ||
---|---|---|
Field | Type | Description |
Description | String | Description of associated product feature set |
Features | List<Apttus_CPQApi. FeatureSupport.ProductFeatureValue> | List of associated feature values |
FeatureSetSOId | Id | Id of associated Apttus_Config2__FeatureSet__cSalesforce Object |
Name | String | Name of the associated Product Feature Set |
Sequence | Decimal | Order of the feature set |
Data Object - Apttus_CPQApi.FeatureSupport.ProductFeatureValue | ||
---|---|---|
Field | Type | Description |
FeatureSOId | Id | ID of the associated feature set. |
IsIncluded | Boolean | Whether it is included |
Name | String | Name of the feature |
ProdFeatureValueSOId | Id | Product Feature Value SoId |
ProdId | Id | ID of the product. |
Sequence | Decimal | The feature display sequence |
Value | String | Product Feature Value |
Code Sample
The sample below enables you to fetch the IDs of the selected products. Two or more products should be selected to enable comparison. After the user selects two or more products such as a Laptop from different vendors, invoke this API.
public List<CPQ.FeatureInfoResponseDO> compareProducts(List<ID>productIds)
{
//Prompt appropriate error message validation message when the productIds parameter has less than two products.
if(productIds.size()< 2)
{
System.debug('Please select atleast two products to compare.');
return null;
}
//If two or more products are selected execute the code below
else{
Apttus_CPQApi.CPQ.FeatureInfoRequestDO request = new Apttus_CPQApi.CPQ.FeatureInfoRequestDO();
request.ProductIds = productIds;
//Invoke the compare products API
List<Apttus_CPQApi.CPQ.FeatureInfoResponseDO> response = Apttus_CPQApi.CPQWebService.compareProducts(request);
return response;
}
}
Code sample
The sample code below allows you to create a table in a Visualforce page to display the compared products:
'compareFeatureSets' in Visualforce code is the getter variable which hold the
response from compareProducts apex method.
Visualforce code
<!-- Compare Products Panel -->
<apex:outputPanel layout="block" Id="compareProductsPanel" styleClass="grid-2-13 clearfix compareProductsPanel">
<table>
<apex:repeat var="featureSetName" value="{!compareFeatureSets}">
<tr> <th data-priority="1" colspan="{!colSpan}"><h4>{!featureSetName}</h4></th></tr>
<apex:repeat var="featureValue" value="{!compareFeatureSets [featureSetName][0].productFeatureSet.features}">
<apex:outputPanel layout="none"rendered="{!hasIncludedProduct[compareFeatureSets[featureSetName][0].productFeatureSet.featureSetSOId]}">
<tr><th class="label">{!featureValue.Name}</th>
<apex:repeat var="product" value="{!productIds}">
<apex:repeat var="prodFeatureInfo" value="{!productFeatureInfosResponse[product]}">
<apex:outputPanel layout="none" rendered="{!prodFeatureInfo.productFeatureSet.Name == featureSetName}">
<apex:repeat var="prodFeatureValue" value="{!prodFeatureInfo.productFeatureSet.features}">
<apex:outputPanel layout="none" rendered="{!prodFeatureValue.featureSOId == featureValue.featureSOId && prodFeatureValue.isIncluded}">
<td style="border:1px #CCCCCC solid;">{!prodFeatureValue.Value}</td>
</apex:outputPanel>
<apex:outputPanel layout="none" rendered="{!prodFeatureValue.featureSOId == featureValue.featureSOId && NOT (prodFeatureValue.isIncluded)}">
<td style="border:1px #CCCCCC solid;"></td>
</apex:outputPanel>
</apex:repeat>
</apex:outputPanel>
</apex:repeat>
</apex:repeat>
</tr>
</apex:outputPanel>
</apex:repeat>
</apex:repeat>
</table>
</apex:outputPanel>
Integration Details
Use the following information in your integrations with CPQ Web Services API. Refer to Integrating Conga with External Systems for information on how to get started.
API Prerequisites
None.
Response/Request XML
Example Request
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:cpq="http://soap.sforce.com/schemas/class/Apttus_CPQApi/CPQWebService"
xmlns:cpq1="http://soap.sforce.com/schemas/class/Apttus_CPQApi/CPQ">
<soapenv:Header>
<cpq:SessionHeader>
<cpq:sessionId>00DZ000000NAEIA!ASAAQHmIRqgn4R9Oi1yQjWTIVk4UZmsDe_.eK0Z9z6qLij7Tu.L_Yo8dRA_p8OmhKMeRs4uzCZTadIgQ9fEbDKciXEQYRyaA</cpq:sessionId>
</cpq:SessionHeader>
</soapenv:Header>
<soapenv:Body>
<cpq:compareProducts>
<cpq:request>
<cpq1:ProductIds>01ti0000006iMl3</cpq1:ProductIds>
<cpq1:ProductIds>01ti0000006iMl8</cpq1:ProductIds>
</cpq:request>
</cpq:compareProducts>
</soapenv:Body>
</soapenv:Envelope>
Example Response
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns="http://soap.sforce.com/schemas/class/Apttus_CPQApi/CPQWebService"
xmlns:FeatureInfoResponseDO="http://soap.sforce.com/schemas/class/Apttus_CPQApi/CPQ"
xmlns:FeatureInfo="http://soap.sforce.com/schemas/class/Apttus_CPQApi/FeatureSupport"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<compareProductsResponse>
<result>
<FeatureInfoResponseDO:FeatureInfos>
<FeatureInfo:ProductFeatureSet>
<FeatureInfo:Description xsi:nil="true"/>
<FeatureInfo:Features>
<FeatureInfo:FeatureSOId>a1wi0000000jcV3AAI</FeatureInfo:FeatureSOId>
<FeatureInfo:IsIncluded>true</FeatureInfo:IsIncluded>
<FeatureInfo:Name>AutoCPQ951Feature1</FeatureInfo:Name>
<FeatureInfo:ProdFeatureValueSOId>a1zi0000000WsYeAAK</FeatureInfo:ProdFeatureValueSOId>
<FeatureInfo:ProdId>01ti0000006iMl3AAE</FeatureInfo:ProdId>
<FeatureInfo:Sequence>1</FeatureInfo:Sequence>
<FeatureInfo:Value>No</FeatureInfo:Value>
</FeatureInfo:Features>
<FeatureInfo:Features>
<FeatureInfo:FeatureSOId>a1wi0000000jcV4AAI</FeatureInfo:FeatureSOId>
<FeatureInfo:IsIncluded>true</FeatureInfo:IsIncluded>
<FeatureInfo:Name>AutoCPQ951Feature1</FeatureInfo:Name>
<FeatureInfo:ProdFeatureValueSOId>a1zi0000000WsYfAAK</FeatureInfo:ProdFeatureValueSOId>
<FeatureInfo:ProdId>01ti0000006iMl3AAE</FeatureInfo:ProdId>
<FeatureInfo:Sequence>2</FeatureInfo:Sequence>
<FeatureInfo:Value>Yes</FeatureInfo:Value>
</FeatureInfo:Features>
<FeatureInfo:FeatureSetSOId>a1vi0000000psEiAAI</FeatureInfo:FeatureSetSOId>
<FeatureInfo:Name>AutoCPQ951FeatureSet</FeatureInfo:Name>
<FeatureInfo:Sequence>1</FeatureInfo:Sequence>
</FeatureInfo:ProductFeatureSet>
<FeatureInfo:ProductFeatureSOId xsi:nil="true"/>
</FeatureInfoResponseDO:FeatureInfos>
<FeatureInfoResponseDO:ProductId>01ti0000006iMl3AAE</FeatureInfoResponseDO:ProductId>
</result>
<result>
<FeatureInfoResponseDO:FeatureInfos>
<FeatureInfo:ProductFeatureSet>
<FeatureInfo:Description xsi:nil="true"/>
<FeatureInfo:Features>
<FeatureInfo:FeatureSOId>a1wi0000000jcV3AAI</FeatureInfo:FeatureSOId>
<FeatureInfo:IsIncluded>true</FeatureInfo:IsIncluded>
<FeatureInfo:Name>AutoCPQ951Feature1</FeatureInfo:Name>
<FeatureInfo:ProdFeatureValueSOId>a1zi0000000WsYjAAK</FeatureInfo:ProdFeatureValueSOId>
<FeatureInfo:ProdId>01ti0000006iMl8AAE</FeatureInfo:ProdId>
<FeatureInfo:Sequence>1</FeatureInfo:Sequence>
<FeatureInfo:Value>Yes</FeatureInfo:Value>
</FeatureInfo:Features>
<FeatureInfo:Features>
<FeatureInfo:FeatureSOId>a1wi0000000jcV4AAI</FeatureInfo:FeatureSOId>
<FeatureInfo:IsIncluded>true</FeatureInfo:IsIncluded>
<FeatureInfo:Name>AutoCPQ951Feature1</FeatureInfo:Name>
<FeatureInfo:ProdFeatureValueSOId>a1zi0000000WsYkAAK</FeatureInfo:ProdFeatureValueSOId>
<FeatureInfo:ProdId>01ti0000006iMl8AAE</FeatureInfo:ProdId>
<FeatureInfo:Sequence>2</FeatureInfo:Sequence>
<FeatureInfo:Value>No</FeatureInfo:Value>
</FeatureInfo:Features>
<FeatureInfo:FeatureSetSOId>a1vi0000000psEiAAI</FeatureInfo:FeatureSetSOId>
<FeatureInfo:Name>AutoCPQ951FeatureSet</FeatureInfo:Name>
<FeatureInfo:Sequence>1</FeatureInfo:Sequence>
</FeatureInfo:ProductFeatureSet>
<FeatureInfo:ProductFeatureSOId xsi:nil="true"/>
</FeatureInfoResponseDO:FeatureInfos>
<FeatureInfoResponseDO:ProductId>01ti0000006iMl8AAE</FeatureInfoResponseDO:ProductId>
</result>
</compareProductsResponse>
</soapenv:Body>
</soapenv:Envelope>