In this tutorial we will see how we can stop deletion of parent record basis on condition. As we have already learn Simple Example i.e Stop deletion of parent record using configuration.
Now let's come on this, Suppose we have a scenario in which we need to stop deletion of parent record when child record exist basis on condition either on parent or child, we can handle this scenario by using trigger.
Now Let's take on example
Suppose we have Account Object and Contact object and if we want to stop deletion of parent account record if any child contact record name starts with "Test".
We can handle this scenario using trigger having before delete event
Below is sample code snippet of above scenario.
trigger AccountTrigger on Account (before delete) {
//reterieve all contacts releated account that is currently deleting
Map<Id,Account> accountWithContacts = new Map<Id,Account>([SELECT
ID,(SELECT ID,Name FROM Contacts)
FROM Account
WHERE ID IN:Trigger.old]);
//iterate over trigger.old context variable record
for(Account accRecord : Trigger.old){
//reterive contact records associate with account
for(Contact accContact :accountWithContacts.get(accRecord.ID).contacts){
//if contact start with Test then stop deletion of account record
if(accContact.Name.StartsWith('Test')){
accRecord.addError('You cannot delete this account because contact associate with this account have name test.');
}
}
}
}
Guys share this tutorial if you like it.