Activity Forums Salesforce® Discussions Getting Error of FIELD_INTEGRITY_EXCEPTION while Executing Batch Class in salesforce

  • Getting Error of FIELD_INTEGRITY_EXCEPTION while Executing Batch Class in salesforce

    Posted by Vikas Kumar on January 2, 2017 at 11:11 am

    Hi All,

    While Executing Batch Class i Am Getting the following Error

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

    Batch Class

    global class UpdateProductInOpportunity implements Database.Batchable<sobject> {
    global List <Id> inputforid;
    global String query;
    global String oppproduct;

    public UpdateProductInOpportunity(List<Id> userInputId){
    inputforid=userInputId;
    oppproduct='productForTest';

    }
    global Database.QueryLocator Start(Database.BatchableContext BC){

    query='Select id FROM Opportunity WHERE id=:inputforid';
    System.debug('####check###');
    System.debug(query);
    return Database.getqueryLocator(query);

    }
    global void execute(Database.BatchableContext BC,list<opportunity>scope){
    System.debug('####check###');

    for(opportunity oppp:scope){
    Product2 pr=new Product2();

    pr.Name=oppproduct;
    pr.IsActive=true;
    insert pr;
    PriceBook2 customPriceBook=new PriceBook2();
    customPriceBook.Name='customPriceBook';
    customPriceBook.IsActive=True;
    insert customPriceBook;
    PriceBook2 customPriceBookRec=[select Id from PriceBook2 WHERE id=:customPriceBook.id];
    PriceBook2 standardPriceBookRecId=[select Id from PriceBook2 WHERE isstandard=true];
    PriceBookEntry standardPriceBookEntry = new PriceBookEntry();
    standardPriceBookEntry.Product2Id=pr.Id;
    standardPriceBookEntry.Pricebook2Id=standardPriceBookRecId.id;
    standardPriceBookEntry.UnitPrice=2000;
    standardPriceBookEntry.IsActive=true;
    insert standardPriceBookEntry;

    PriceBookEntry customPriceBookEntry = new PriceBookEntry();
    customPriceBookEntry.Product2Id=pr.Id;
    customPriceBookEntry.Pricebook2Id=customPriceBookRec.Id;
    customPriceBookEntry.UnitPrice=5000;
    customPriceBookEntry.IsActive=true;
    insert customPriceBookEntry;
    System.debug('####check###');
    OpportunityLineItem oppLineItem = new OpportunityLineItem();
    oppLineItem.OpportunityId = oppp.Id;
    //oppLineItem.PricebookEntryId = customPriceBookEntry.Id;
    oppLineItem.PricebookEntryId = standardPriceBookEntry.Id;
    oppLineItem.UnitPrice = 7000;
    oppLineItem.Quantity = 5;
    insert oppLineItem;

    }
    }

    global void finish (Database.BatchableContext BC) {
    System.debug('####check###');

    }

    Thanks
    }

    Vikas Kumar replied 5 years, 8 months ago 2 Members · 2 Replies
  • 2 Replies
  • sushant

    Member
    January 6, 2017 at 1:11 pm

    Hi Vikas,

    you can check pricebook object in your salesforce org.you may have assigned any other pricebook there and you are mentioning another pricebook id in your code.

    Thanks

  • Vikas Kumar

    Member
    January 11, 2017 at 7:19 am

    Hi sushant,

    Thanks For the Help it works now

Log In to reply.

Popular Salesforce Blogs

Popular Salesforce Videos