You need to sign in to do that
Don't have an account?

Error on Trigger Before Delete
Hi All,
The below trigger is working fine on insert and update operations but on delete it gives me the below error. can you please help me
Validation Errors While Saving Record(s)
There were custom validation error(s) encountered while saving the affected record(s). The first validation error encountered was "Apex trigger Contactcallout caused an unexpected exception, contact your administrator: Contactcallout: execution of BeforeDelete caused by: System.FinalException: Record is read-only: Trigger.Contactcallout: line 11, column 1".
Click here to return to the previous page.
The below trigger is working fine on insert and update operations but on delete it gives me the below error. can you please help me
Validation Errors While Saving Record(s)
There were custom validation error(s) encountered while saving the affected record(s). The first validation error encountered was "Apex trigger Contactcallout caused an unexpected exception, contact your administrator: Contactcallout: execution of BeforeDelete caused by: System.FinalException: Record is read-only: Trigger.Contactcallout: line 11, column 1".
Click here to return to the previous page.
trigger Contactcallout on Contact (after insert, after update, before delete) { Id RecordType1= [SELECT Id FROM RecordType WHERE SOBJECTTYPE=:'Contact' AND DeveloperName=:'Commercial'].Id; Map<Id, String> m = new Map<Id, String>(); list<Contact> validContacts = new list<Contact>(); set<ID> accIds = new set<ID>(); if(Trigger.isDelete) { for (contact c : Trigger.old) { if(c.RecordTypeId == RecordType1 && c.Reg__c == TRUE) c.Status__c='Inactive'; { validContacts.add(c); accIds.add(c.accountid); } } } else { for (contact c : Trigger.new) { if(c.RecordTypeId == RecordType1 && c.Reg__c == TRUE){ if(Trigger.isUpdate){ contact old = Trigger.oldMap.get(c.Id); if (c.Email != old.Email||c.FirstName!=old.FirstName||c.LastName!=old.LastName||c.phone!=old.phone||c.Title__c!=old.Title__c||c.status__c!=old.status__c||c.AccountID!=old.AccountID||c.Registered_on_ITV_Media__c == TRUE) { validContacts.add(c); accIds.add(c.accountid); } }else{ validContacts.add(c); accIds.add(c.accountid); } } } } map<ID, Account> accMap; if(!accIds.IsEmpty()) // guard condition for SOQL accMap = new map<ID, Account>([select name from account where id in :accIds]); for (contact c : validContacts) { Account acc = accMap.get(c.AccountID); string accName = acc == null ? null : acc.Name; WebServiceCallout.sendNotification(c.Id,c.Email,c.FirstName,c.LastName,c.phone,c.Title__c,accName,c.status__c); } }
c.Status__c='Inactive';
You're iterating in trigger.old : the list of records to be deleted and updating that record. You cannot records in trigger.old list as they are read-only records.
Read details about this here:
http://a1force.blogspot.in/2011/11/trigger-context-variable-triggernew-vs.html
Trigger.old is always a read-only list.
yes you are right i am trying to update contacts status field to inactive before they get deleted... Anyways Can we overcome this and update the fields upon delete. Is there a way we can do this ..
Please let me know you thoughts..
Many Thanks in advance
Abraham