I am getting an error message on a trigger that was working until recently. The issue arises on a trigger that inserts an OpportunityLineItem on an Opportunity. Here is the error:

Insert failed. First exception on row 0; first error: FIELD_INTEGRITY_EXCEPTION, field integrity exception: unknown (pricebook entry is in a different pricebook than the one assigned to the opportunity):

Here is my confusion - I have a hard coded PriceBook Entry ID in the code (for now). But this id is drawn from the correct pricebook. To check myself, I was able to manually add an Opportunity Product and I display the Pricebook ID (via formula field). It is the same value. Any thoughts? Thanks

1 Answer 1


From the Product and Schedule Objects Data Model:

enter image description here

The PricebookEntry used by the OpportunityLineItem must have the same Pricebook2Id as the Opportunity.Pricebook2Id that you are adding it to.


Id opportunityId = '006000000000001';
Id pricebookEntryId = '01u000000000001';

Opportunity opp = [Select Id, Pricebook2Id from Opportunity where Id = :opportunityId];
PricebookEntry pbe = [Select Id, Pricebook2Id from PricebookEntry where Id = :pricebookEntryId];
System.assertEquals(opp.Pricebook2Id, pbe.Pricebook2Id, 'OpportunityLineItem.PricebookEntry.Pricebook2Id should equal  OpportunityLineItem.Opportunity.Pricebook2Id');
  • Yes, it did. I had no problem entering that same product from the same pricebook manually. I changed it all to a query and the issue went away.
    – jaw999
    Mar 6, 2019 at 14:59

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .