0

Hi I am inserting two parents along with two child records each. I am getting the following error using the nested for loop.

System.ListException: Before Insert or Upsert list must not have two identically equal elements

Contructor:

public Quotelineitem_IBC(ApexPages.StandardController controller){
        flag=true;
        qouteLineItemMap=new map<Integer,Quote_line_Item__c>();
        batchMap=new Map<integer,List<Batch__c>>();
        //Capturing parent Quote id from URL
        parentId=Apexpages.currentPage().getParameters().get('ParentId');
        //Adding new QuoteLineItem without batches to map  which will be displayed after loading the page
        count=2;
        count1=2;
        List<Batch__c> listBatchToadd=new List<Batch__c>();
        For(integer i=0;i<count;i++){
            qouteLineItemMap.put(i+1,new Quote_line_Item__c(Quote1__c=parentId));
        }
        For(integer j=0;j<count1;j++){
            batch__c b=new batch__c();
            listBatchToadd.add(b);
            batchMap.put(j+1,listBatchToadd);
        }
        quoteLineItemMapsize=qouteLineItemMap.size();
    }//End of constructor

Save Method:

public pageReference save1(){

        //Local varibles and instance 
        List<Quote_Line_item__c> listtoinsert =new List<Quote_Line_item__c>();
        List<Batch__c> batchListToInsert =new List<Batch__c>();
        List<Integer> sortkey=new List<Integer>();
        sortkey.addAll(qouteLineItemMap.keySet());



        for(integer qli:sortkey){
            listtoinsert.add(qouteLineItemMap.get(qli));
        }//End of for 
        // Inserting the list of QuoteLine Items
        try{
            upsert listtoinsert;
        } catch(DmlException de){
             return null;
        }
        //Iterating the loop to store the list of Batches which are going to be inserted into the databse
        for(integer qli:sortkey){
            for(Batch__c bat: batchMap.get(qli)){
                if(bat.Asked_Qty__c!=Null){
                    bat.Quote_Line_Item__c=qouteLineItemMap.get(qli).id;
                }
                batchListToInsert.add(bat);
            }//End of for 
        }// End of for
        try{
            upsert batchListToInsert;
        } catch(DmlException de){ 
             return null;
        }
    }//End of method

I have tried converting list to set and again set to list, but it still throws the same error.

2
  • try to convert List<Integer> sortkey=new List<Integer>(); this list into Set and check. Aug 10 '15 at 14:00
  • @TusharSharma still the same error
    – Teja
    Aug 10 '15 at 14:09
1

The for loop below is adding the same listBatchToadd list to your map on each iteration of the loop, which is why you have duplicate batch__c objects in your list.

    For(integer j=0;j<count1;j++){
        batch__c b=new batch__c();
        listBatchToadd.add(b);
        batchMap.put(j+1,listBatchToadd);
    }

To directly answer the question in the title of your post:

how to sort out this type of error

You are adding the same batch__c record multiple times to batchListToInsert in the line below. Figure out what is going on in your loops so that you only add the each instance to batch__c to the list once.

batchListToInsert.add(bat);
2
  • How can i proceed suggest me some way .I am sole employee in my company .Any idea would be very great full for me
    – Teja
    Aug 10 '15 at 14:18
  • 1
    Your code doesn't make sense to me. It seems to be a lot of random loops. Can you explain what you are trying to do and then someone should be able to help you simplify your code.
    – BarCotter
    Aug 10 '15 at 14:25

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.