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
Deepak Singh 116Deepak Singh 116 

Need a trigger which Update minimum date parent record from number of child record .

Hi,
I have to two custom object Building__c and lease__c bothe objects have a firld name Expiry date.Building__c is parent and lease__c is child in look relatioship.I can not create MD relatioship between them because of some reason.now i want a trigger which pick the minimum expiry date from the lease records and upadte by building__c expiry date.

Thanks in advence!
Best Answer chosen by Deepak Singh 116
Steven NsubugaSteven Nsubuga
Trigger updateMinimumExpiryDateOnBuilding on lease__c (after insert, after update, after delete) {
    
    Set<Id> buildingIds = new Set<Id>();

    for (lease__c lease : Trigger.new) {
        buildingIds.add(lease.Building__c);
    }

    if (Trigger.isUpdate || Trigger.isDelete) {
        for (lease__c lease : Trigger.old) {
            buildingIds.add(lease.Building__c);
        }
    }

    Map<id,Building__c> buildingMap = new Map<id,Building__c>([select id, Expiry_date__c from Building__c where id IN :buildingIds]);

    List<AggregateResult> ars = [SELECT Building__c, min(Expiry_date__c) FROM lease__c WHERE Building__c IN :buildingIds group by Building__c];
    
    for (AggregateResult ar : ars) {
        buildingMap.get(String.valueOf(ar.get('Building__c'))).Expiry_date__c = Date.valueOf(ar.get('expr0'));
    }
    update buildingMap.values();
}

 

All Answers

Ajay K DubediAjay K Dubedi
Hi Deepak,

Please refer the below code.

Trigger:-
--------------
trigger ExpiryDateChangeTrg on lease__c (after insert, after update) {
    ExpiryDateChangehelper.test(trigger.new);
}

Helper Class:-
--------------

public class ExpiryDateChangehelper
{
  public static void test(List<lease__c> leaselist)
  {
      set<ID> setid=new set<ID>();
      for(lease__c l : leaselist)
      {
        setid.add(l.Building__c);  
      }
      List<Building__c> blist=[SELECT expiry_date__c from Building__c where Id IN:setid];
     List<lease__c> lelist=[SELECT expiry_date__c from lease__c where Building__c IN:setid ];
      List<lease__c> lelist2 = new List<lease__c>();  
          
      for(Building__c Build : blist)
      {
         for(lease__c le : lelist)
           {
               if(Build.expiry_date__c >  le.expiry_date__c)
               {
                   le.expiry_date__c=Build.expiry_date__c;
                   lelist2.add(le);
               }
              
          }
      }
      update lelist2;
  }
}

Mark it as a best if it help you.

Thanks,
Ajay Dubedi 
Steven NsubugaSteven Nsubuga
Trigger updateMinimumExpiryDateOnBuilding on lease__c (after insert, after update, after delete) {
    
    Set<Id> buildingIds = new Set<Id>();

    for (lease__c lease : Trigger.new) {
        buildingIds.add(lease.Building__c);
    }

    if (Trigger.isUpdate || Trigger.isDelete) {
        for (lease__c lease : Trigger.old) {
            buildingIds.add(lease.Building__c);
        }
    }

    Map<id,Building__c> buildingMap = new Map<id,Building__c>([select id, Expiry_date__c from Building__c where id IN :buildingIds]);

    List<AggregateResult> ars = [SELECT Building__c, min(Expiry_date__c) FROM lease__c WHERE Building__c IN :buildingIds group by Building__c];
    
    for (AggregateResult ar : ars) {
        buildingMap.get(String.valueOf(ar.get('Building__c'))).Expiry_date__c = Date.valueOf(ar.get('expr0'));
    }
    update buildingMap.values();
}

 
This was selected as the best answer
Deepak Singh 116Deepak Singh 116
Thanks 
Steven Nsubuga.
I have a question Please expalian the followinhgg statment why we convert it to string.
   buildingMap.get(String.valueOf(ar.get('Building__c'))).Expiry_date__c =Date.valueOf(ar.get('expr0'));

 
RazaRaza
 
Hi Deepak
Try This is easy way Code
trigger TriggerOnLese on Lease__c (after update,after insert) {
    List<Lease__c>  llList = new List<Lease__c>();
     List<Building__c> bdList = new List<Building__c>();
     List<Lease__c>  updatebdList = new List<Lease__c>();
     Set<Id> sid = new Set<Id>();
    for(Lease__c ll:Trigger.New){
          sid.add(ll.Building__c);
    }
    bdList  =[SELECT Name,ExpiryDate__c FROM Building__c where Id IN: sid ] ;
     llList = [SELECT Name,ExpiryDate__c FROM Lease__c where Building__c IN:sid];
      
        
      for(Building__c bb : bdList){
         for(lease__c ll : llList){
               if(bb.ExpiryDate__c >ll.ExpiryDate__c)
               {
                   ll.ExpiryDate__c=bb.ExpiryDate__c;
                   updatebdList.add(ll);
               }
              
          }
      }
    if(updatebdList.size()>0){
         update updatebdList;
    }
  }
    
 Thanks 
 Raza