You need to sign in to do that
Don't have an account?
santoshk.behera1.3878016627537622E12
handling DML exception while writing a Trigger
I have created custom object.when error will generate ,it has to logged into the custom object with excsption message and record Id. kindly help me.
trigger countNoOfContact on Contact (after insert,after update,after delete,after undelete) {
HandllingError__c errObj=new HandllingError__c();
try
{
Set<ID> setAccId=new Set<ID>();
if((trigger.IsInsert)||(trigger.IsUndelete)||(trigger.IsUpdate))
{
for(Contact con1:trigger.new)
{
if(con1.AccountId!=null)
{
setAccId.add(con1.AccountId);
}
}
}
if((trigger.IsDelete)||(trigger.IsUpdate))
{
for(Contact con1:trigger.new) // error will generate here, delete operation deals with trigger.old. Problem is :erroris not logged into object.
{
if(con1.AccountId!=null)
{
setAccId.add(con1.AccountId);
}
}
}
Map<ID,Account> mapToAccount=new Map<ID,Account>([select id,No_Of_Contacts__c,(select id from Contacts) from Account where id in:setAccId ]);
for(ID accId:mapToAccount.keySet())
{
Account acc=mapToAccount.get(accId);
acc.No_Of_Contacts__c=acc.Contacts.size();
}
update mapToAccount.values();
}
catch(DMLException excp)
{
errObj.Exception_Message__c=excp.getMessage();
errObj.Line_Number__c=excp.getLineNumber();
//errObj.Name=excp.getTypeName();
insert errObj;
}
}
trigger countNoOfContact on Contact (after insert,after update,after delete,after undelete) {
HandllingError__c errObj=new HandllingError__c();
try
{
Set<ID> setAccId=new Set<ID>();
if((trigger.IsInsert)||(trigger.IsUndelete)||(trigger.IsUpdate))
{
for(Contact con1:trigger.new)
{
if(con1.AccountId!=null)
{
setAccId.add(con1.AccountId);
}
}
}
if((trigger.IsDelete)||(trigger.IsUpdate))
{
for(Contact con1:trigger.new) // error will generate here, delete operation deals with trigger.old. Problem is :erroris not logged into object.
{
if(con1.AccountId!=null)
{
setAccId.add(con1.AccountId);
}
}
}
Map<ID,Account> mapToAccount=new Map<ID,Account>([select id,No_Of_Contacts__c,(select id from Contacts) from Account where id in:setAccId ]);
for(ID accId:mapToAccount.keySet())
{
Account acc=mapToAccount.get(accId);
acc.No_Of_Contacts__c=acc.Contacts.size();
}
update mapToAccount.values();
}
catch(DMLException excp)
{
errObj.Exception_Message__c=excp.getMessage();
errObj.Line_Number__c=excp.getLineNumber();
//errObj.Name=excp.getTypeName();
insert errObj;
}
}
Trigger.new is only available for the insert and update triggers, and the records can only be modified in before triggers.
For the Trigger.IsDelete use Trigger.old
Piyush
catch(Exception excp)
Lets us know if that worked.
Thanks,
Venkat