An Opportunity can have associated OpportunityLineItem records only if the Opportunity has a Pricebook2. An OpportunityLineItem must correspond to a Product2 that is listed in the opportunity's Pricebook2.
An Opportunity can have associated OpportunityLineItem records only if the Opportunity has a
Pricebook2. An OpportunityLineItem must correspond to a
Product2 that is listed in the opportunity's
Pricebook2. For information about inserting
OpportunityLineItem for an opportunity that does not have an associated
Pricebook2 or any existing line items, see Effects on Opportunities.
This object is defined only for those organizations that have products enabled as a feature. If the organization does not have the products feature, this object does note appear in the describeGlobal() call, and you can’t use describeSObjects() or query the OpportunityLineItem object.
For a visual diagram of the relationships between OpportunityLineItem and other objects, see Product and Schedule Objects.
If multicurrency option has been enabled, the
CurrencyIsoCodefield is present. It can’t be modified, and is always set to the value of the
CurrencyIsoCodeof the parent Opportunity.
Effects on Opportunities
Opportunities that have associated
OpportunityLineItem records are affected in the following ways:
- Creating an OpportunityLineItem increments the Opportunity Amount value by the TotalPrice of the OpportunityLineItem. Additionally, inserting an OpportunityLineItem increments the ExpectedRevenue on the opportunity by the TotalPrice times the opportunity Probability.
- The Opportunity Amount becomes a read-only field when the opportunity has line items. The API ignores any attempt to update this field on an opportunity with line items. Update requests are not rejected, but the updated value is ignored.
- You can’t update the PricebookId field or the CurrencyIsoCode field on the opportunity if line items exist. The API rejects any attempt to update these fields on an opportunity with line items.
- When you create or update an OpportunityLineItem, the API verifies that the line item corresponds to a PricebookEntry in the Pricebook2 that is associated with the opportunity. If the opportunity does not have an associated Pricebook2, the API automatically sets the pricebook on the opportunity if the line item corresponds to a PricebookEntry in an active Pricebook2, and if the PricebookEntry has a CurrencyIsoCode field that matches the CurrencyIsoCode field of the opportunity. If the Pricebook2 is not active or the CurrencyIsoCode fields do not match, an error is returned.
- The Opportunity HasOpportunityLineItem field is set to true when an OpportunityLineItem is inserted for that Opportunity.