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
bryansosa01bryansosa01 

Too many DML statements: 151 / How to improve my code??

 Is there eny way to improve my code in order to process about 30,000 records.

 

I would appreciate your help.

 

trigger SetPorcentajesdePerdidasEnCartera on RORAC__c (after insert) {

    
    for (RORAC__c rorac : System.Trigger.new) {
        
        for( Cartera_de_Credito__c cartera: [select id, Fecha_al__c, 
                                            Perdida_Esperada_p_Garant_a_Hipotec__c,
                                            Perdida_Esperada_p_Garant_a_Prendaria__c, 
                                            Perdida_Esperada_p_Garant_a_Hipotecaria__c
                                            from Cartera_de_Credito__c where Fecha_al__c =: rorac.Fecha_al__c ])
        {
                cartera.Perdida_Esperada_p_Garant_a_Hipotec__c = rorac.Perdida_Esperada_p_Garant_a_Hipotecaria__c;
                cartera.Perdida_Esperada_p_Garant_a_Prendaria__c = rorac.Perdida_Esperada_p_Garant_a_Prendaria__c ;
                cartera.Perdida_Esperada_p_Garant_a_Hipotecaria__c = rorac.Perdida_Esperada_p_Garant_a_Hipotecaria__c;
            
        update cartera;    
        }   
        
    } 
    }

 

testrest97testrest97
trigger SetPorcentajesdePerdidasEnCartera on RORAC__c (after insert) {

    list<Cartera_de_Credito__c> cList=new list<Cartera_de_Credito__c>();
    for (RORAC__c rorac : System.Trigger.new) {
        
        for( Cartera_de_Credito__c cartera: [select id, Fecha_al__c, 
                                            Perdida_Esperada_p_Garant_a_Hipotec__c,
                                            Perdida_Esperada_p_Garant_a_Prendaria__c, 
                                            Perdida_Esperada_p_Garant_a_Hipotecaria__c
                                            from Cartera_de_Credito__c where Fecha_al__c =: rorac.Fecha_al__c ])
        {
                cartera.Perdida_Esperada_p_Garant_a_Hipotec__c = rorac.Perdida_Esperada_p_Garant_a_Hipotecaria__c;
                cartera.Perdida_Esperada_p_Garant_a_Prendaria__c = rorac.Perdida_Esperada_p_Garant_a_Prendaria__c ;
                cartera.Perdida_Esperada_p_Garant_a_Hipotecaria__c = rorac.Perdida_Esperada_p_Garant_a_Hipotecaria__c;
            
        clist.add(cartera);    
        }   
        
    }
if(CList.size()>0)
update cList; }
bryansosa01bryansosa01

Now I get the following error: 

 

Too many DML rows: 10001
 
I would appreciate your help.
testrest97testrest97

hmm not exactly sure how to handle this....I guess you need to write a batch class to handle these update....anyone has  a better idea??

 

search batch paex here:

http://www.salesforce.com/us/developer/docs/apexcode/index.htm

Sneha PatilSneha Patil
trigger SetPorcentajesdePerdidasEnCartera on RORAC__c (after insert) {
    map<String,RORAC__c> mapRorac = new map<String,RORAC__c>();
    list<Cartera_de_Credito__c> updatedCarteraList = new list<Cartera_de_Credito__c >();
 
    for (RORAC__c rorac : System.Trigger.new) {
      mapRorac.put(rorac.Fecha_al__c ,rorac  );
    }

   for( Cartera_de_Credito__c cartera: [select id, Fecha_al__c,                                                                                Perdida_Esperada_p_Garant_a_Hipotec__c,
                                       Perdida_Esperada_p_Garant_a_Prendaria__c,   
Perdida_Esperada_p_Garant_a_Hipotecaria__c from Cartera_de_Credito__c where Fecha_al__c IN: mapRorac.keySet() ]) { if(mapRorac.containsKey(cartera.Fecha_al__c ) ){ cartera.Perdida_Esperada_p_Garant_a_Hipotec__c = rorac.Perdida_Esperada_p_Garant_a_Hipotecaria__c; cartera.Perdida_Esperada_p_Garant_a_Prendaria__c = rorac.Perdida_Esperada_p_Garant_a_Prendaria__c ; cartera.Perdida_Esperada_p_Garant_a_Hipotecaria__c = rorac.Perdida_Esperada_p_Garant_a_Hipotecaria__c; updatedCarteraList.add(cartera); } if(updatedCarteraList.size() > 0) update updatedCarteraList; }

 Hope this helps!!

 If this answer helped you please hit KUDOS and mark this as solution 

bryansosa01bryansosa01

Now I am getting the following error:

 

Variable does not exist rorac.Perdida_Esperada_p_Garant_a_Hipotecaria__c

 

Please help me I would really appreciate it.

 

Bryan Sosa.

Dhaval PanchalDhaval Panchal

Use below, It will work for you.

 

trigger SetPorcentajesdePerdidasEnCartera on RORAC__c (after insert) {
	Set<ID> setFechaId = new Set<ID>();
	for (RORAC__c rorac : System.Trigger.new) {
		setFechaId.add(rorac.Fecha_al__c);
	}
	List<Cartera_de_Credito__c> lstCriteria = new List<Cartera_de_Credito__c>();
	if(setFechaId.size()>0){
		lstCriteria = [select id, Fecha_al__c, 
                                            Perdida_Esperada_p_Garant_a_Hipotec__c,
                                            Perdida_Esperada_p_Garant_a_Prendaria__c, 
                                            Perdida_Esperada_p_Garant_a_Hipotecaria__c
                                            from Cartera_de_Credito__c where Fecha_al__c In: setFechaId];
		if(lstCriteria.size()>0){
			for(Cartera_de_Credito__c cartera:lstCriteria){
                cartera.Perdida_Esperada_p_Garant_a_Hipotec__c = trigger.newMap.get(cartera.Fecha_al__c).Perdida_Esperada_p_Garant_a_Hipotecaria__c;
                cartera.Perdida_Esperada_p_Garant_a_Prendaria__c = trigger.newMap.get(cartera.Fecha_al__c).Perdida_Esperada_p_Garant_a_Prendaria__c ;
                cartera.Perdida_Esperada_p_Garant_a_Hipotecaria__c = trigger.newMap.get(cartera.Fecha_al__c).Perdida_Esperada_p_Garant_a_Hipotecaria__c;
			}
			update lstCriteria;
		}
	}
}

 

bryansosa01bryansosa01

Fecha_al__c