You need to sign in to do that
Don't have an account?
System.DmlException: Update failed.first error: UNABLE_TO_LOCK_ROW, unable to obtain exclusive access to this record: [] Trigger.addAttachmentNameInReport: line 115, column 1
Hi Guys,
Please help me out with above error which I am facing during bulk update. Below is the code mentioned:-
trigger addAttachmentNameInReport on Attachment (after delete, after insert, after undelete, after update){
Set<ID> oppIdSet =new Set<id>();
Set<ID> jobrefIdSet =new Set<id>();
Set<ID> artworkIdSet =new Set<id>();
Map<Id,Opportunity> oppMap ;
Map<Id,Job_Reference__c> jobrefMap ;
Map<Id,artApp__Artwork__c> artworkMap ;
if(trigger.isInsert || trigger.isUpdate){
for(Attachment a: Trigger.new){
String objName = a.parentId.getSObjectType().getDescribe().getName();
if(objName == 'Opportunity'){
oppIdSet.add(a.parentid);
}
else if(objName== 'job_reference__c'){
jobrefIdSet.add(a.parentid);
}
else if(objName== 'artApp__Artwork__c'){
artworkIdSet.add(a.parentid);
}
}
}
if(trigger.isdelete){
for(Attachment a: Trigger.old){
String objName = a.parentId.getSObjectType().getDescribe().getName();
if(objName == 'Opportunity'){
oppIdSet.add(a.parentid);
}
else if(objName== 'job_reference__c'){
jobrefIdSet.add(a.parentid);
}
else if(objName== 'artApp__Artwork__c'){
artworkIdSet.add(a.parentid);
}
}
}
if(trigger.isInsert || trigger.isUpdate){
if(oppIdSet.size() > 0 ){
oppMap = new Map<Id,Opportunity>([select Id,Attachment__c from Opportunity where Id IN: oppIdSet]);
if(oppMap.size() > 0 ){
for(Attachment att : Trigger.new){
if(oppMap.get(att.parentId) != null){
if(oppMap.get(att.parentId).Attachment__c != null && oppMap.get(att.parentId).Attachment__c != ''){
if(Trigger.isInsert){
oppMap.get(att.parentId).Attachment__c += +'\n' +att.Name;
}
else if(Trigger.isUpdate){
system.debug('Updateeeee === ');
system.debug('$$$$$$'+ Trigger.oldMap.get(att.Id).Name);
system.debug('value of new name'+ att.Name);
if(Trigger.oldMap.get(att.Id).Name != att.Name && oppMap.get(att.parentId).Attachment__c.contains(Trigger.oldMap.get(att.Id).Name)){
oppMap.get(att.parentId).Attachment__c = oppMap.get(att.parentId).Attachment__c.replaceFirst(Trigger.oldMap.get(att.Id).Name,att.Name);
system.debug('Old Name=== '+Trigger.oldMap.get(att.Id).Name);
system.debug('Assingd Name === '+oppMap.get(att.parentId).Attachment__c);
}
}
}
else{
oppMap.get(att.parentId).Attachment__c = att.Name;
}
}
}
update oppMap.values();
}
}
if(jobrefIdSet.size()>0){
jobrefMap = new Map<Id,job_reference__c>([select Id,Attachment__c from job_reference__c where Id IN: jobrefIdSet]);
if(jobrefMap.size() > 0 ){
for(Attachment att : Trigger.new){
if(jobrefMap.get(att.parentId) != null){
if(jobrefMap.get(att.parentId).Attachment__c != null && jobrefMap.get(att.parentId).Attachment__c != ''){
if(Trigger.isInsert){
jobrefMap.get(att.parentId).Attachment__c += +'\n' +att.Name;
}
else if(Trigger.isUpdate){
system.debug('Updateeeee === ');
if(Trigger.oldMap.get(att.Id).Name != att.Name && jobrefMap.get(att.parentId).Attachment__c.contains(Trigger.oldMap.get(att.Id).Name)){
jobrefMap.get(att.parentId).Attachment__c = jobrefMap.get(att.parentId).Attachment__c.replaceFirst(Trigger.oldMap.get(att.Id).Name,att.Name);
system.debug('Old Name=== '+Trigger.oldMap.get(att.Id).Name);
system.debug('Assingd Name === '+jobrefMap.get(att.parentId).Attachment__c);
}
}
}
else{
jobrefMap.get(att.parentId).Attachment__c = att.Name;
}
}
}
update jobrefMap.values();
}
}
if(artworkIdSet.size()>0){
artworkMap = new Map<Id,artApp__Artwork__c>([select Id,Attachment__c from artApp__Artwork__c where Id IN: artworkIdSet]);
if(artworkMap.size() > 0 ){
for(Attachment att : Trigger.new){
if(artworkMap.get(att.parentId) != null){
if(artworkMap.get(att.parentId).Attachment__c != null && artworkMap.get(att.parentId).Attachment__c != ''){
if(Trigger.isInsert){
artworkMap.get(att.parentId).Attachment__c += +'\n' +att.Name;
}
else if(Trigger.isUpdate){
system.debug('Updateeeee === ');
if(Trigger.oldMap.get(att.Id).Name != att.Name && artworkMap.get(att.parentId).Attachment__c.contains(Trigger.oldMap.get(att.Id).Name)){
artworkMap.get(att.parentId).Attachment__c = artworkMap.get(att.parentId).Attachment__c.replaceFirst(Trigger.oldMap.get(att.Id).Name,att.Name);
system.debug('Old Name=== '+Trigger.oldMap.get(att.Id).Name);
system.debug('Assingd Name === '+artworkMap.get(att.parentId).Attachment__c);
}
}
}
else{
artworkMap.get(att.parentId).Attachment__c = att.Name;
}
}
}
update artworkMap.values();
}
}
}
else if(Trigger.isDelete){
if(oppIdSet.size() > 0 ){
system.debug('Opp Size'+oppIdSet.size());
oppMap = new Map<Id,Opportunity>([select Id,Attachment__c from Opportunity where Id IN: oppIdSet]);
if(oppMap.size() > 0 ){
for(Attachment att : Trigger.old){
if(oppMap.get(att.parentId).attachment__c != null && oppMap.get(att.parentId).attachment__c != '' && oppMap.get(att.parentId).Attachment__c.contains(Trigger.oldMap.get(att.Id).Name)){
oppMap.get(att.parentId).attachment__c = oppMap.get(att.parentId).attachment__c.replaceFirst(Trigger.oldMap.get(att.Id).Name,'');
}
}
Update oppMap.values();
}
}
if(jobrefIdSet.size()>0){
jobrefMap = new Map<Id,job_reference__c>([select Id,Attachment__c from job_reference__c where Id IN: jobrefIdSet]);
if(jobrefMap.size() > 0 ){
for(Attachment att : Trigger.old){
if(jobrefMap.get(att.parentId).attachment__c != null && jobrefMap.get(att.parentId).attachment__c != '' && jobrefMap.get(att.parentId).Attachment__c.contains(Trigger.oldMap.get(att.Id).Name)){
jobrefMap.get(att.parentId).attachment__c = jobrefMap.get(att.parentId).attachment__c.replaceFirst(Trigger.oldMap.get(att.Id).Name,'');
}
}
update jobrefMap.values();
}
}
if(artworkIdSet.size()>0){
artworkMap = new Map<Id,artApp__Artwork__c>([select Id,Attachment__c from artApp__Artwork__c where Id IN: artworkIdSet]);
if(artworkMap.size() > 0 ){
for(Attachment att : Trigger.old){
if(artworkMap.get(att.parentId).attachment__c != null && artworkMap.get(att.parentId).attachment__c != '' && artworkMap.get(att.parentId).Attachment__c.contains(Trigger.oldMap.get(att.Id).Name)){
artworkMap.get(att.parentId).attachment__c = artworkMap.get(att.parentId).attachment__c.replaceFirst(Trigger.oldMap.get(att.Id).Name,'');
}
}
update artworkMap.values();
}
}
}
}
See this,
http://salesforce.stackexchange.com/questions/20921/can-anybody-explain-the-unable-to-lock-row-error
And there is some kind of recussion goin on like
1.)Trigger is calling another trigger which is trying to update same record
2.)batch is calling another trigger which is trying to update same record
So just check all your active actions and see if any 2 of them are clashing with each other
https://developer.salesforce.com/forums/ForumsMain?id=906F000000090tZIAQ
Mark this as best answer if its helps.
Thanks.
Hi Praveen
I have checked this link and also all associated triggers in my org. As you can see I am getting error on line 115 which is update artworkMap.values(). In art work I have no other trigger for update event, its only for delete event. However we do have for update trigger opportunity object.
So I think there i some other problem. Please try to help me.
Thanks,
Jayati