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
Raj88Raj88 

Delete record using trigger

Need help in writing trigger.
I have a custom object 'MPEContact__c' is associated with Account and an standard object 'Contact'. If i delete the Contact record, the record associated with 'MPEContact__c' object should also be deleted.

My Code:

trigger updateContactMpe on MPEContact__c (after update) {

    Set<Id> accountId = new Set<Id>();
    Set<Id> empAppId = new Set<Id>();
    Set<String> ctxType;
    List<Contact> contactUpdateList = new List<Contact>();
    Map<String,MPEContact__c> mapContact = new Map<String,MPEContact__c>();
    Map<String,Contact> accContact = new Map<String,Contact>();
    Map<String,Contact> conUpdMap = new Map<String,Contact>();
  
    Schema.DescribeSObjectResult CONT_RT = Schema.SObjectType.Contact;
    Map<String,Schema.RecordTypeInfo> CONT_RTMapByName = CONT_RT.getRecordTypeInfosByName();
    Schema.RecordTypeInfo MPE_PART_CON_NAME = CONT_RTMapByName.get('MPE Partner Contact');
    Id PART_CON_RTId = MPE_PART_CON_NAME.getRecordTypeId();
  
  
try{
    for(MPEContact__c mpContact: trigger.new)
    {
        if(mpContact.Account__c!=null && mpContact.Application__c!=null && mpContact.EMail__c!=null)
        {
                accountId.add(mpContact.Account__c);
                empAppId.add(mpContact.Application__c);
                mapContact.put(mpContact.Last_Name__c.toLowerCase()+'-'+mpContact.Email__c.toLowerCase(),mpContact);
        }
    }

    List<Empower_Application__c> empApp = new List<Empower_Application__c>();
    if(accountId.size()>0)
        empApp= [Select  Id,Application_Status__c from Empower_Application__c where Id in :empAppId and Application_Status__c in ('Transition Completed','Approved')];
  
    if(empApp.size()>0){
        if(accountId.size()>0){
            List<Contact> theContact = [Select Id, AccountId, firstName, lastName, Email, Phone, Title, MailingStreet, MailingCity, MailingState,
                                               MailingPostalCode, MailingCountry, MobilePhone, Salutation, Technolgy_Preference__c,
                                               Contact_Type__c, Primary_Contact_Type__c, Vertical_Market_Preference__c, Preferred_Language__c
                                          From Contact Where Accountid in :accountId];
          
            if(theContact.size()>0){
                for(Contact con : theContact)
                {
                    if(con.Email != null && mapContact.containsKey(con.lastName.toLowerCase()+'-'+con.Email.toLowerCase())) {
                        accContact.put(con.lastName.toLowerCase()+'-'+con.Email.toLowerCase(),con);
                    }
                }
            }
        }
      
        for(MPEContact__c mpContact: trigger.new)
        {
          
            if(mpContact.Account__c!=null && mpContact.Application__c!=null && mpContact.EMail__c!=null)
            {
              
                Contact cont;
                ctxType = new Set<String>();
              
                if (mpContact.Secondary_Role__c != null){
                    ctxType = new Set<String> (mpContact.Secondary_Role__c.split(';'));
                }
              
                if(accContact.containsKey(mpContact.Last_Name__c.toLowerCase()+'-'+mpContact.Email__c.toLowerCase()) &&
                   !conUpdMap.containsKey(mpContact.Last_Name__c.toLowerCase()+'-'+mpContact.Email__c.toLowerCase())) {
                  
                    cont = new Contact(Id=accContact.get(mpContact.Last_Name__c.toLowerCase()+'-'+mpContact.Email__c.toLowerCase()).Id,
                                       Primary_Contact_Type__c=accContact.get(mpContact.Last_Name__c.toLowerCase()+'-'+mpContact.Email__c.toLowerCase()).Primary_Contact_Type__c,
                                       Contact_Type__c=accContact.get(mpContact.Last_Name__c.toLowerCase()+'-'+mpContact.Email__c.toLowerCase()).Contact_Type__c,
                                       LastName=accContact.get(mpContact.Last_Name__c.toLowerCase()+'-'+mpContact.Email__c.toLowerCase()).LastName,
                                       Email=accContact.get(mpContact.Last_Name__c.toLowerCase()+'-'+mpContact.Email__c.toLowerCase()).Email);                                      
                  
                    if(cont.Primary_Contact_Type__c == null || cont.Primary_Contact_Type__c.trim() == ''){
                        cont.Primary_Contact_Type__c = mpContact.Primary_Role__c;
                    } else {
                        ctxType.add(mpContact.Primary_Role__c);
                    }
                  
                    if(cont.Contact_Type__c == null || cont.Contact_Type__c.trim() == ''){
                        cont.Contact_Type__c = mpContact.Secondary_Role__c;
                    } else {                                              
                        if(mpContact.Secondary_Role__c != null && ctxType.size()>0){
                            for(String sc : ctxType){
                                if(!accContact.get(mpContact.Last_Name__c.toLowerCase()+'-'+mpContact.Email__c.toLowerCase()).Contact_Type__c.contains(sc)){
                                    cont.Contact_Type__c = cont.Contact_Type__c + ';' + sc;
                                }
                            }
                        }
                    }                  
                     
                }
              
                if(conUpdMap.containsKey(mpContact.Last_Name__c.toLowerCase()+'-'+mpContact.Email__c.toLowerCase())){

                  cont = new Contact(Id=conUpdMap.get(mpContact.Last_Name__c.toLowerCase()+'-'+mpContact.Email__c.toLowerCase()).Id,
                                       Primary_Contact_Type__c=conUpdMap.get(mpContact.Last_Name__c.toLowerCase()+'-'+mpContact.Email__c.toLowerCase()).Primary_Contact_Type__c,
                                       Contact_Type__c=conUpdMap.get(mpContact.Last_Name__c.toLowerCase()+'-'+mpContact.Email__c.toLowerCase()).Contact_Type__c,
                                       LastName=conUpdMap.get(mpContact.Last_Name__c.toLowerCase()+'-'+mpContact.Email__c.toLowerCase()).LastName,
                                       Email=conUpdMap.get(mpContact.Last_Name__c.toLowerCase()+'-'+mpContact.Email__c.toLowerCase()).Email,                                     
                                       Tag__c=conUpdMap.get(mpContact.Last_Name__c.toLowerCase()+'-'+mpContact.Email__c.toLowerCase()).Tag__c);
                                     

                    if(cont.Primary_Contact_Type__c == null || cont.Primary_Contact_Type__c.trim() == ''){
                        cont.Primary_Contact_Type__c = mpContact.Primary_Role__c;
                    } else {
                        ctxType.add(mpContact.Primary_Role__c);
                    }
                  
                    if(cont.Contact_Type__c == null || cont.Contact_Type__c.trim() == ''){
                        cont.Contact_Type__c = mpContact.Secondary_Role__c;
                    } else {
                        if(mpContact.Secondary_Role__c != null && ctxType.size()>0){
                            for(String sc : ctxType){
                                if(!conUpdMap.get(mpContact.Last_Name__c.toLowerCase()+'-'+mpContact.Email__c.toLowerCase()).Contact_Type__c.contains(sc)){
                                    cont.Contact_Type__c = cont.Contact_Type__c + ';' + sc;
                                }
                            }
                        }
                    }
                  
                }
              
                if(!accContact.containsKey(mpContact.Last_Name__c.toLowerCase()+'-'+mpContact.Email__c.toLowerCase()) &&
                   !conUpdMap.containsKey(mpContact.Last_Name__c.toLowerCase()+'-'+mpContact.Email__c.toLowerCase())) {
                    cont = new Contact();
                    cont.Primary_Contact_Type__c = mpContact.Primary_Role__c;
                    cont.Contact_Type__c = mpContact.Secondary_Role__c;
                    cont.Email=mpContact.Email__c;
                    cont.LastName = mpContact.Last_Name__c;                  
                }
              
                cont.AccountId = mpContact.Account__c;
                cont.FirstName = mpContact.First_Name__c;

                cont.First_Name_Local_Language__c = mpContact.First_Name_Local_Language__c;
                cont.Last_Name_Local_Language__c = mpContact.Last_Name_Local_Language__c;
                cont.Phone = mpContact.Phone__c;
                cont.Fax=mpContact.Fax__c;
                cont.MobilePhone=mpContact.Mobile__c;
                cont.MailingPostalCode=mpContact.Postal_Code__c;
                cont.Preferred_Language__c=mpContact.Primary_Language__c;              
                cont.Salutation=mpContact.Salutation__c;
                cont.MailingState=mpContact.State__c;
                cont.MailingCountry = mpContact.Country__c;
              

                cont.RecordTypeId=PART_CON_RTId;
              

              
                if(mpContact.Authorized_Partner_Admin__c){
                    cont.Tag__c ='SFDC Partner Admin';
                }
              
                if (mpContact.Street_Address2__c != null) {
                    cont.MailingStreet = mpContact.Street_Address1__c+' '+mpContact.Street_Address2__c;
                } else {
                    cont.MailingStreet=mpContact.Street_Address1__c;
                }
              
                cont.Technolgy_Preference__c=mpContact.Technolgy_Preference__c;
                cont.Title=mpContact.Title__c;
                cont.Vertical_Market_Preference__c=mpContact.Vertical_Market_Preference__c;
                cont.MailingCity=mpContact.City__c;
              
                conUpdMap.put(cont.LastName.toLowerCase()+'-'+cont.Email.toLowerCase(),cont);
                              
            }
        }
    }
  
    if(conUpdMap.size()>0){
        contactUpdateList = conUpdMap.values();
    }
  
    if(contactUpdateList.size()>0){
        upsert contactUpdateList;
    }
      
}
catch(Exception e)
    {
        String objectName ='MPEContact__c';
        String userName=userInfo.getName();
        datetime myDateTime = datetime.now();
        CreateErrorLog.createErrorRecord(e.getmessage(),objectName,e.getStackTraceString(),userName,myDateTime,e.getTypeName());
    }

}
Bradley DelauneBradley Delaune
Hi Vivek,
There is obviously a lot more than a normal delete going on in the trigger you have pasted in your question.  Here is a simple trigger to delete children when the parent is deleted:
trigger ContactTrigger on Contact (before delete)
{
	delete [select Id from ChildObject__c where Contact__c in :trigger.oldMap.keySet() limit 10000];
}

This could obviously use some work, but it gets the point across.  Before your contacts are deleted, you want to query for all the related children and delete them.

If the Contact-ChildObject relationship is a Master-Detail, this is not necessary as a cascading delete operation is performed if the master is deleted.

I hope this helps!