Scenario:
Error: System.Exception: SObject row does not allow errors
This Exception is thrown when your adding an error message to particular record in a list which is looping through For Loop and that list gets records from the Trigger.oldMap context variable in Trigger.You can you use the addError method for only those records that are available in Trigger Context.
Trigger Example:
trigger BeforeDeleteConatct on Contact (Before Delete)
{
Set<Id> conSet=Trigger.OldMap.keyset();
List<Contact> listCon=[select id,phone from contact where id in:conset];
for(Contact c:listCon)
{
if(c.Phone!=null)
{
System.debug('.......c......'+c);
c.addError('you cant delete this contact because it conatins Phone Number');
}
}
}
When you click on delete button of a particular contact it throws below error
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 BeforeDeleteConatct caused an unexpected exception, contact your administrator: BeforeDeleteConatct: execution of BeforeDelete caused by: System.FinalException: SObject row does not allow errors: Trigger.BeforeDeleteConatct: line 11, column 1". |
Work Around to Resolve This Error:
trigger BeforeDeleteConatct on Contact (Before Delete)
{
Set<Id> conSet=Trigger.OldMap.keyset();
List<Contact> listCon=[select id,phone from contact where id in:conset];
for(Contact c:listCon)
{
if(c.Phone!=null)
{
System.debug('.......c......'+c);
Add below line of code to resolve Error
Contact actualRecord = Trigger.oldMap.get(c.Id);
actualRecord.addError('you cant delete this contact bcz it conatins Phone Number');
}
}
}
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 "you can't delete this contact because it conatins Phone Number". |
You made my day, Thanks.
ReplyDelete