function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
sivapriyaa maniam sivakumarsivapriyaa maniam sivakumar 

INVALID_CROSS_REFERENCE_KEY, invalid cross reference id: []

Hi,

Can anyone please tell what is the error and solution.

Scenario:
I need to update the distributor discount value in account,It will update the QuoteLineItem,Quote and Opportunity Product.

But It thrown an error as follows,

Error:Apex trigger DistributorDiscountChangeTrigger caused an unexpected exception, contact your administrator: DistributorDiscountChangeTrigger: execution of AfterUpdate caused by: System.DmlException: Update failed. First exception on row 0 with id 0QLi0000004XP1LGAW; first error: INVALID_CROSS_REFERENCE_KEY, invalid cross reference id: []: Trigger.DistributorDiscountChangeTrigger: line 66, column 1 

id- 0QLi0000004XP1LGAW --> Contains QuoteLineitem

Trigger Code:
trigger DistributorDiscountChangeTrigger on Account (after update) {
    
    Map<Id, Account> accByIds = new Map<Id, Account>();
    Map<Id, Account> accsByIds = new Map<Id, Account>();
    
    for ( Account acc: Trigger.NEW) {
        if ( acc.Distributor_Discount_Service__c != Trigger.oldMap.get(acc.Id).Distributor_Discount_Service__c || acc.Distributor_Discount_Product__c != Trigger.oldMap.get(acc.Id).Distributor_Discount_Product__c ) {
            accByIds.put( acc.Id, acc);
        }
    }

    if ( !accByIds.isEmpty() ) {
        
        Map<Id, Opportunity> oppByIds = new Map<Id,Opportunity>( [ SELECT Id, Distributor__c FROM Opportunity WHERE Distributor__c IN: accByIds.keySet() AND IsClosed = FALSE]);        
        List<OpportunityLineItem> oppProds = [ SELECT Id, Distributor_Discount_Product_HIDDEN__c,Distributor_Discount_Service_HIDDEN__c,Opportunity.Distributor__c, PricebookEntry.Product2.Family, Distributor_Discount_1__c, Opportunity.Distributor__r.Distributor_Discount_Service__c, Opportunity.Distributor__r.Distributor_Discount_Product__c FROM OpportunityLineItem WHERE OpportunityId IN: oppByIds.keySet()];
        List<QuoteLineItem> qlis = [ SELECT Id, Distributor_Discount_1__c, Quote.Opportunity.Distributor__c, PricebookEntry.Product2.Family, Quote.Opportunity.Distributor__r.Distributor_Discount_Service__c, Quote.Opportunity.Distributor__r.Distributor_Discount_Product__c FROM QuoteLineItem WHERE Quote.OpportunityId IN: oppByIds.keySet()];
        List<Quote> oppqt = [ SELECT Id, Distributor_Service_Discount_Temp__c,Opportunity.Distributor__c,Distributor_Product_Discount_Temp__c,Distributor__c FROM Quote WHERE Quote.OpportunityId IN: oppByIds.keySet()];
       
         for ( Quote qt: oppqt ) {
            if ( qt.Opportunity.Distributor__c == null ) {
                qt.Distributor_Product_Discount_Temp__c  = 0;
                qt.Distributor_Service_Discount_Temp__c=0;
                continue;
            }
            if ( qt.Opportunity.Distributor__c != null) {
                qt.Distributor_Product_Discount_Temp__c = accByIds.get( qt.Opportunity.Distributor__c ).Distributor_Discount_Product__c;
                 qt.Distributor_Service_Discount_Temp__c= accByIds.get( qt.Opportunity.Distributor__c ).Distributor_Discount_Service__c;
            }       
         }
        

        for ( QuoteLineItem qli: qlis ) {

            if ( qli.Quote.Opportunity.Distributor__c == null ) {
                qli.Distributor_Discount_1__c = 0;
                continue;
            }
            if ( qli.PricebookEntry.Product2.Family == 'Service') {
                qli.Distributor_Discount_1__c = accByIds.get(qli.Quote.Opportunity.Distributor__c).Distributor_Discount_Service__c;
            } else if ( qli.PricebookEntry.Product2.Family != 'Non-Discount' ) {
                qli.Distributor_Discount_1__c = accByIds.get(qli.Quote.Opportunity.Distributor__c).Distributor_Discount_Product__c;
            } else {
                qli.Distributor_Discount_1__c = 0;
            }
            
        }
        for ( OpportunityLineItem oli: oppProds ) {
            if ( oli.Opportunity.Distributor__c == null ) {
                oli.Distributor_Discount_1__c  = 0;
               oli.Distributor_Discount_Product_HIDDEN__c=0;
                oli.Distributor_Discount_Service_HIDDEN__c=0;
                continue;
            }
            if ( oli.PricebookEntry.Product2.Family == 'Service') {
                oli.Distributor_Discount_1__c = accByIds.get( oli.Opportunity.Distributor__c ).Distributor_Discount_Service__c;
                oli.Distributor_Discount_Service_HIDDEN__c=accByIds.get( oli.Opportunity.Distributor__c ).Distributor_Discount_Service__c;
            } else if ( oli.PricebookEntry.Product2.Family != 'Non-Discount' ) {
                oli.Distributor_Discount_1__c = accByIds.get( oli.Opportunity.Distributor__c ).Distributor_Discount_Product__c;
                oli.Distributor_Discount_Product_HIDDEN__c=accByIds.get( oli.Opportunity.Distributor__c ).Distributor_Discount_Product__c;
            } else {
                oli.Distributor_Discount_1__c = 0;
            }
        }
        
        update oppqt;
        update qlis; // Error  indicates this line
        update oppProds;
      
            
        }
        
    

}

Thanks,
Sivapriyaa M S










 
ManojSankaranManojSankaran
Hi Sivapriyaa,

Normally you will get this error whenever you have assigned a wrong id to a field. For Example.

in contact object we have a lookup to account, If i try to create a new contact and give an invalid id in the AccountID of contact you will get the error.

Please Print the qlis before updating and see if there is any ID assigned to it. So that we will know which id is invalid.



Thanks
Manoj S