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
Subodh shuklaSubodh shukla 

How to bulkify these trigger


trigger Updateinvoicestatus on Line_Item__c (after insert,after update) {
trigger Updateinvoicestatus on Line_Item__c (after insert,after update) {
  
    Invoice_Statement__c[] I = new list<Invoice_Statement__c>();
    for(Line_Item__c ln: trigger.new)  {     
        Invoice_Statement__c INV= new Invoice_Statement__c(id = ln.Invoice_Statement__c);
        List<Line_Item__c>Lnv=[select id,Name from Line_Item__c where Invoice_statement__c =:INV.id];
        if(Lnv.size()==2){
            INV.status__c='Closed';
             I.add(INV);
             }
            if(lnv.size()==3){
            ln.addError('You cant add more then five item');
           
        }
        
       
    }  
     Update I;
    

}
Plz give Suggestion
Best Answer chosen by Subodh shukla
Le NguyenLe Nguyen
Hi,

Here is the bulkify:
trigger Updateinvoicestatus on Line_Item__c (after insert,after update) {
   set<id> ISS = new set<id>()l
    for(Line_Item__c ln: trigger.new)  {  
            ISS.add(ln.Invoice_Statement__c)
    }

    Invoice_Statement__c[] I = new list<Invoice_Statement__c>();
   for(Invoice_Statement__c INV : [select id, (select id, name from Line_Items__r) from In   voice_Statement__c where id in:ISS ]){
     if(INV.Line_Items__r.size()==2){
            INV.status__c='Closed';
             I.add(INV);
             }
            if(INV.Line_Items__rsize()>=5){
                trigger.new[0].addError('You cant add more then five item');
        }
}

if(l.size() > 0){
     Update I;}
    

}

I'm not sure the name of relationship, So I assume it's Line_Items__r
Le

All Answers

Le NguyenLe Nguyen
Hi,

Here is the bulkify:
trigger Updateinvoicestatus on Line_Item__c (after insert,after update) {
   set<id> ISS = new set<id>()l
    for(Line_Item__c ln: trigger.new)  {  
            ISS.add(ln.Invoice_Statement__c)
    }

    Invoice_Statement__c[] I = new list<Invoice_Statement__c>();
   for(Invoice_Statement__c INV : [select id, (select id, name from Line_Items__r) from In   voice_Statement__c where id in:ISS ]){
     if(INV.Line_Items__r.size()==2){
            INV.status__c='Closed';
             I.add(INV);
             }
            if(INV.Line_Items__rsize()>=5){
                trigger.new[0].addError('You cant add more then five item');
        }
}

if(l.size() > 0){
     Update I;}
    

}

I'm not sure the name of relationship, So I assume it's Line_Items__r
Le
This was selected as the best answer
Le NguyenLe Nguyen
for(Invoice_Statement__c INV : [select id, (select id, name from Line_Items__r) from Invoice_Statement__c where id in:ISS ]){
Akhil AnilAkhil Anil
You can use the below snippet, in case you want the error to be appended on the corresponding record and not just on the very first record.
In the below snippet you can relate the Trainingforce__Order_Line_Item__c with your Line_Item__c object and Trainingforce__Customer_Order__c with your Invoice_Statement__c object respectively.
 
trigger UpdateOrder on Trainingforce__Order_Line_Item__c (after insert, after update) {

   List<Trainingforce__Customer_Order__c> ct = new List<Trainingforce__Customer_Order__c>();
   
   List<Id> custord = new List<Id>();
   
   Set<Id> lineids = new Set<Id>();
   
   for(Trainingforce__Order_Line_Item__c test:Trigger.New) {
      
      custord.add(test.Trainingforce__Customer_Order__c);   
   
   }
   
   AggregateResult[] groupedResults = [SELECT COUNT(Id), Trainingforce__Customer_Order__c FROM Trainingforce__Order_Line_Item__c where Trainingforce__Customer_Order__c IN :custord GROUP BY Trainingforce__Customer_Order__c ];
   
   for(AggregateResult ar:groupedResults) {
     
     if(ar.get('expr0') == 2) {
       Id custid = (ID)ar.get('Trainingforce__Customer_Order__c');
       Trainingforce__Customer_Order__c ct1 = new Trainingforce__Customer_Order__c(Id=custid, Trainingforce__Stage__c='Closed');
       ct.add(ct1);
     }
     else if((INTEGER)ar.get('expr0') >= 5) {
       lineids.add((ID)ar.get('Trainingforce__Customer_Order__c'));
     }  
      
      
   }
   
   
   for(Trainingforce__Order_Line_Item__c test1:Trigger.New) {
      
      if(lineids.contains(test1.Trainingforce__Customer_Order__c)) {
        
        test1.addError('You cant add more than five items');
      
      }     
   
   }
   
   update ct;

}