0
votes

I'm using the Salesforce Force.com REST API. I need to determine which Products (Product2) are associated with Opportunities (Opportunity). Thus far, I've been unable to make the connection.

In the Salesofrce UI, opportunities can be associated with pricebooks and products. Pricebooks contain products, but it is also possible to associate products with an opportunity directly.

Querying an opportunity via the API yields the following:

Array
(
    [0] => Array
        (
            [attributes] => Array
                (
                    [type] => Opportunity
                    [url] => /services/data/v33.0/sobjects/Opportunity/xxxxxxxxxxxxxxxx
                )

            [Id] => xxxxxxxxxxxxxxxx
            [IsDeleted] => 
            [AccountId] => xxxxxxxxxxxxxxxxx
            [Name] => Some Name
            [Description] => 
            [StageName] => Closed Won
            [Amount] => 650
            [Probability] => 100
            [CloseDate] => 2012-04-12
            [Type] => New Business
            [NextStep] => A string
            [LeadSource] => something
            [IsClosed] => 1
            [IsWon] => 1
            [ForecastCategory] => Closed
            [ForecastCategoryName] => Closed
            [CampaignId] => 
            [HasOpportunityLineItem] => 1
            [Pricebook2Id] => xxxxxxxxxxxxxxxxxxxxx
            [OwnerId] => xxxxxxxxxxxxxxxxxxx
            [CreatedDate] => 2012-12-30T20:17:35.000+0000
            [CreatedById] => xxxxxxxxxxxxxxxxxxxxxxxxxxx
            [LastModifiedDate] => 2015-05-22T15:20:18.000+0000
            [LastModifiedById] => xxxxxxxxxxxxxxxxxxxxxxxx
            [SystemModstamp] => 2015-05-22T15:20:18.000+0000
            [LastActivityDate] => 
            [FiscalQuarter] => 1
            [FiscalYear] => 2015
            [Fiscal] => 2015 1
            [LastViewedDate] => 2015-06-03T14:38:03.000+0000
            [LastReferencedDate] => 2015-06-03T14:38:03.000+0000
            [SyncedQuoteId] => 
            [Type_of_Deal__c] => Monthly Contract Count
            [Number_of_Contracts__c] => 999
            [Fee_Per_Contract__c] => 999
            [Installation_Fee__c] => 
            [Roof_Top_Fee__c] => 
            [LID__LinkedIn_Company_Id__c] => 
            [inclusion_type__c] => inclusion type
            [Total_Contract_Term__c] => 999
            [Monthly_Value_of_Fee_Per_Contract__c] => 999
            [Total_Value_of_Fee_Per_Contract__c] => 999
            [Total_Value_of_Roof_Top_Fee__c] => 0
            [Monthly_Fidels_Revenue__c] => 999
            [Total_Value_of_Deal__c] => 999
            [Number_of_Roof_Tops__c] => 
            [Monthly_Value_of_Roof_Top_Fee__c] => 0
            [Installation_Date__c] => 2012-01-01
            [Reason_if_Lost__c] => 
            [Total_Monthly_Revenue__c] => 999
            [Existing_Agency__c] => Service Group
            [Number_of_Contracts_in_Last_Batch__c] => 999
            [Agent_Name__c] => John Smith
            [Total_Value_of_Agency_Revenue__c] => 9999
            [Contract_Start_Date__c] => 2012-01-01
            [Batch_Received__c] => Yes
            [Administrator__c] => 
            [Per_Contract__c] => 999
            [Integration_type__c] => 
            [Last_Batch_ID__c] => 
            [Last_Batch_Date__c] => 
        )

)

From which you can see that no Product2 data is available. There is however, a Pricebook2Id. One might assume that querying that specific pricebook would yield information on which products are associated with it. However, querying a specific pricebook yields the following:

Array
(
    [0] => Array
        (
            [attributes] => Array
                (
                    [type] => Pricebook2
                    [url] => /services/data/v33.0/sobjects/Pricebook2/xxxxxxxxxxxx
                )

            [Id] => xxxxxxxxxxxxxxxxxxxx
            [IsDeleted] => 
            [Name] => Company Price Book
            [CreatedDate] => 2011-11-14T18:36:23.000+0000
            [CreatedById] => xxxxxxxxxxxxxxxxxxx
            [LastModifiedDate] => 2011-11-14T18:36:23.000+0000
            [LastModifiedById] => xxxxxxxxxxxxxxxxxxxxxxx
            [SystemModstamp] => 2011-11-14T18:36:23.000+0000
            [LastViewedDate] => 2015-06-04T19:41:20.000+0000
            [LastReferencedDate] => 2015-06-04T19:41:20.000+0000
            [IsActive] => 1
            [Description] => 
            [IsStandard] => 
        )

)

As you can see, no information about products is available from the pricebook. So my question is:

How do I determine which products are associated with opportunities using the Salesforce Force.com REST API?

1

1 Answers

0
votes

There is an object called 'Opportunity Product'. you need to get that object as well and link the proper opportunity to product. It's a many to many relation and not one to many so more than one product might be related to each opportunity and vise versa.