function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Salesforce2015Salesforce2015 

Simple Trigger

Hi Experts,

I have total 3 quaries...

On Delete:
1. Query for related Recipient__c records.  If count > 0, return error (sobject.addError())
  "Please Cancel Request, or Remove Recipients before deleting"
2. Query for related Workflow_Instance__c records where Request_Status__c != 'Cancelled'.  If count > 0, return error:
  "Please Cancel Request before deleting"
On Update:
3. Query for related Workflow_Instance__c records where Request_Status__c != 'Cancelled',  If count > 0, return error:
  "You cannot edit a submitted Request"

Please modify below code.....

Trigger PreventDeletion1 on Request__c (before delete, before update)
{

 if( Trigger.isDelete ) {

   for (Request__c Pa : Trigger.Old)
   {

        list<Recipient__c> ChList1 = [select id, Request__c from Recipient__c where Request__c =: pa.id];
   
        if(ChList1.size() > 0){
            pa.adderror('Please Cancel Request, or Remove Recipients before deleting');
        }
        

        list<Workflow_Instance__c> ChList2 = [select id, Request__c from Workflow_Instance__c where Request_Status__c != 'Cancelled'];  
        
        if(ChList2.size() > 0)
        {
            pa.adderror('Please Cancel Request before deleting');
        }
   }
   
   
   elseif ( Trigger.isUpdate )       

   for (Request__c Pa : Trigger.Old)
   {

        list<Workflow_Instance__c> ChList3 = [select id, Request__c from Workflow_Instance__c where Request_Status__c != 'Cancelled'];  
        
        if(ChList3.size() > 0)
        {
            pa.adderror('You cannot edit a submitted Request');
        }       

   }
       
  }
}


Thanks,
Manu
 
Best Answer chosen by Salesforce2015
Abhishek BansalAbhishek Bansal
Hi,

There was a mistake which i have corrected now.
Please change your code with below code :
trigger PreventDeletion1 on Request__c (before delete, before update) {

	if( Trigger.isDelete ) {
	
		List<Recipient__c> ChList1 = [select id, Request__c from Recipient__c where Request__c IN : trigger.old];
		Map<Id,Recipient__c> requestIdWithRecipient = new Map<Id,Recipient__c>();
		
		for(Recipient__c reci : ChList1){
			if(!requestIdWithRecipient.containsKey(reci.Request__c)){
				requestIdWithRecipient.put(reci.Request__c,reci);
			}
		}
		
		List<Workflow_Instance__c> ChList2 = [select id, Request__c from Workflow_Instance__c where Request_Status__c != 'Cancelled' AND Request__c IN : trigger.old];
		Map<Id,Workflow_Instance__c> requestIdWithWorkflow = new Map<Id,Workflow_Instance__c>();
		
		for(Workflow_Instance__c work : ChList2){
			if(!requestIdWithWorkflow.containsKey(work.Request__c)){
				requestIdWithWorkflow.put(work.Request__c,work);
			}
		}
		
		
		for(Request__c req : trigger.old){
			if(requestIdWithRecipient.containsKey(req.id)){
				req.adderror('Please Cancel Request, or Remove Recipients before deleting');
			}
			else if(requestIdWithWorkflow.containsKey(req.id)){
				req.adderror('Please Cancel Request before deleting');
			}
		}
	
	}
	
	else if(trigger.isUpdate ){
		List<Workflow_Instance__c> ChList2 = [select id, Request__c from Workflow_Instance__c where Request_Status__c != 'Cancelled' AND Request__c IN : trigger.new];
		Map<Id,Workflow_Instance__c> requestIdWithWorkflow = new Map<Id,Workflow_Instance__c>();
		
		for(Workflow_Instance__c work : ChList2){
			if(!requestIdWithWorkflow.containsKey(work.Request__c)){
				requestIdWithWorkflow.put(work.Request__c,work);
			}
		}
		
		for(Request__c req : trigger.new){
			if(requestIdWithWorkflow.containsKey(req.id)){
				req.adderror('You cannot edit a submitted Request'');
			}
		}
	}
	
}
Let me know if you still face any isue.

Thanks,
Abhishek


 

All Answers

ManojjenaManojjena
Hi Manu,
What I understood you have 3 objects
1.Request__c Parent
2.Recipient__c child of Request
3.Workflow_Instance__c
Is there any relationship with  Workflow_Instance__c with any of the two objects .

Please confirm to give better solution.
Thanks
Manoj
Salesforce2015Salesforce2015
Please find the attachement for Objects and Relationships.

User-added image
Abhishek BansalAbhishek Bansal
Hi Manu,

Please find your required code below :
 
trigger PreventDeletion1 on Request__c (before delete, before update) {

	if( Trigger.isDelete ) {
	
		List<Recipient__c> ChList1 = [select id, Request__c from Recipient__c where Request__c IN : trigger.old];
		Map<Id,Recipient__c> requestIdWithRecipient = new Map<Id,Recipient__c>();
		
		for(Recipient__c reci : ChList1){
			if(!requestIdWithRecipient.containsKey(reci.Request__c)){
				requestIdWithRecipient.put(reci.Request__c,reci);
			}
		}
		
		List<Workflow_Instance__c> ChList2 = [select id, Request__c from Workflow_Instance__c where Request_Status__c != 'Cancelled' AND Request__c IN : trigger.old];
		Map<Id,Workflow_Instance__c> requestIdWithWorkflow = new Map<Id,Workflow_Instance__c>();
		
		for(Workflow_Instance__c work : ChList2){
			if(!requestIdWithWorkflow.containsKey(work.Request__c)){
				requestIdWithWorkflow.put(work.Request__c,reci);
			}
		}
		
		
		for(Request__c req : trigger.old){
			if(requestIdWithRecipient.containsKey(req.id)){
				req.adderror('Please Cancel Request, or Remove Recipients before deleting');
			}
			else if(requestIdWithWorkflow.containsKey(req.id)){
				req.adderror('Please Cancel Request before deleting');
			}
		}
	
	}
	
	else if(trigger.isUpdate ){
		List<Workflow_Instance__c> ChList2 = [select id, Request__c from Workflow_Instance__c where Request_Status__c != 'Cancelled' AND Request__c IN : trigger.new];
		Map<Id,Workflow_Instance__c> requestIdWithWorkflow = new Map<Id,Workflow_Instance__c>();
		
		for(Workflow_Instance__c work : ChList2){
			if(!requestIdWithWorkflow.containsKey(work.Request__c)){
				requestIdWithWorkflow.put(work.Request__c,reci);
			}
		}
		
		for(Request__c req : trigger.new){
			if(requestIdWithWorkflow.containsKey(req.id)){
				req.adderror('You cannot edit a submitted Request'');
			}
		}
	}
	
}
Let me know if you have any issue in it or if you need any help.

Thanks,
Abhishek
 
ManojjenaManojjena
Hi Manu,

Try with below trigger it will help ,However you need to check teh relationship name for both inner query .

 
Trigger PreventDeleteAndEdit on Request__c (before delete, before update){
    if(Trigger.isBefore){
        if(Trigger.isDelete){
		    Map<Id,Integer> reqIdWithRepSizeMap=new Map<Id,Integer>();
			for(Request__c req :[Select id,(SELECT id  from Recipients__r where Request__c ) FROM Request__c WHERE Id IN =: Trigger.old)]){
			   reqIdWithRepSizeMap.put(req.Id,req.Recipients__r.size());
			}
			for(Request__c reqq :Trigger.old){
			  if(reqIdWithRepSizeMap.get(reqq.id) >0){
			    reqq.adderror('Please Cancel Request, or Remove Recipients before deleting');
			  }
			}
	    }if(Trigger.isDelete){
		    Map<Id,Integer> reqIdWithWrkinsSizeMap=new Map<Id,Integer>(); 
			for(Request__c reqs :[Select id,(SELECT id  FROM Workflow_Instances__r WHERE  Request_Status__c != 'Cancelled' ) FROM Request__c WHERE Id IN =: Trigger.new)]){
			   reqIdWithRepSizeMap.put(reqs.Id,reqs.Workflow_Instances__r.size());
			}
			for(Request__c reqst :trigger.new){
				if(reqIdWithWrkinsSizeMap.get(reqst.Id)>0){
				    reqst.adderror('You cannot edit a submitted Request');
				}
			}
	    }
    }
}

Let me know if it helps !!
Thanks
Manoj
Salesforce2015Salesforce2015
Thank you for your input, i got below error.

Error: Compile Error: line breaks not allowed in string literals at line 47 column -1
 
Salesforce2015Salesforce2015
Thank you manoj for your input, i got below error.

Error:  Compile Error: unexpected token: ')' at line 7 column 90

User-added image
 
ManojjenaManojjena
Hi Manu,

Try with below code ,
 
Trigger PreventDeleteAndEdit on Request__c (before delete, before update){
    if(Trigger.isBefore){
        if(Trigger.isDelete){
		    Map<Id,Integer> reqIdWithRepSizeMap=new Map<Id,Integer>();
			for(Request__c req :[Select id,(SELECT id  from Recipients__r ) FROM Request__c WHERE Id IN =: Trigger.old)]){
			   reqIdWithRepSizeMap.put(req.Id,req.Recipients__r.size());
			}
			for(Request__c reqq :Trigger.old){
			  if(reqIdWithRepSizeMap.get(reqq.id) >0){
			    reqq.adderror('Please Cancel Request, or Remove Recipients before deleting');
			  }
			}
	    }if(Trigger.isDelete){
		    Map<Id,Integer> reqIdWithWrkinsSizeMap=new Map<Id,Integer>(); 
			for(Request__c reqs :[Select id,(SELECT id  FROM Workflow_Instances__r WHERE  Request_Status__c != 'Cancelled' ) FROM Request__c WHERE Id IN =: Trigger.new)]){
			   reqIdWithRepSizeMap.put(reqs.Id,reqs.Workflow_Instances__r.size());
			}
			for(Request__c reqst :trigger.new){
				if(reqIdWithWrkinsSizeMap.get(reqst.Id)>0){
				    reqst.adderror('You cannot edit a submitted Request');
				}
			}
	    }
    }
}
Issue may come for relationship name try to change that incase issue .

 
ManojjenaManojjena
Hi Manu,
Triggeris working or still any issue ?
Salesforce2015Salesforce2015
Hi Manoj,

I follow your code....

i got one error:

Error - Variable does not exist: reqIdWithRepSizeMap at line 16 column 16

Trigger PreventDeleteAndUpdate on Request__c (before delete, before update){
    if(Trigger.isBefore){
        if(Trigger.isDelete){
            Map<Id,Integer> reqIdWithRepSizeMap=new Map<Id,Integer>();
            for(Request__c req :[Select id,(SELECT id  from Recipients__r ) FROM Request__c WHERE Id IN : Trigger.old]){
               reqIdWithRepSizeMap.put(req.Id,req.Recipients__r.size());
            }
            for(Request__c reqq :Trigger.old){
              if(reqIdWithRepSizeMap.get(reqq.id) >0){
                reqq.adderror('Please Cancel Request, or Remove Recipients before deleting');
              }
            }
        }if(Trigger.isDelete){
            Map<Id,Integer> reqIdWithWrkinsSizeMap=new Map<Id,Integer>();
            for(Request__c reqs :[Select id,(SELECT id  FROM Workflow_Instance__r WHERE  Request_Status__c != 'Cancelled' ) FROM Request__c WHERE Id IN : Trigger.new]){
               reqIdWithRepSizeMap.put(reqs.Id,reqs.Workflow_Instance__r.size());
            }
            for(Request__c reqst :trigger.new){
                if(reqIdWithWrkinsSizeMap.get(reqst.Id)>0){
                    reqst.adderror('You cannot update a submitted Request');
                }
            }
        }
    }
}
 
Abhishek BansalAbhishek Bansal
I would suggest you to use the code provided by me.
Please give it a try.
trigger PreventDeletion1 on Request__c (before delete, before update) {

	if( Trigger.isDelete ) {
	
		List<Recipient__c> ChList1 = [select id, Request__c from Recipient__c where Request__c IN : trigger.old];
		Map<Id,Recipient__c> requestIdWithRecipient = new Map<Id,Recipient__c>();
		
		for(Recipient__c reci : ChList1){
			if(!requestIdWithRecipient.containsKey(reci.Request__c)){
				requestIdWithRecipient.put(reci.Request__c,reci);
			}
		}
		
		List<Workflow_Instance__c> ChList2 = [select id, Request__c from Workflow_Instance__c where Request_Status__c != 'Cancelled' AND Request__c IN : trigger.old];
		Map<Id,Workflow_Instance__c> requestIdWithWorkflow = new Map<Id,Workflow_Instance__c>();
		
		for(Workflow_Instance__c work : ChList2){
			if(!requestIdWithWorkflow.containsKey(work.Request__c)){
				requestIdWithWorkflow.put(work.Request__c,reci);
			}
		}
		
		
		for(Request__c req : trigger.old){
			if(requestIdWithRecipient.containsKey(req.id)){
				req.adderror('Please Cancel Request, or Remove Recipients before deleting');
			}
			else if(requestIdWithWorkflow.containsKey(req.id)){
				req.adderror('Please Cancel Request before deleting');
			}
		}
	
	}
	
	else if(trigger.isUpdate ){
		List<Workflow_Instance__c> ChList2 = [select id, Request__c from Workflow_Instance__c where Request_Status__c != 'Cancelled' AND Request__c IN : trigger.new];
		Map<Id,Workflow_Instance__c> requestIdWithWorkflow = new Map<Id,Workflow_Instance__c>();
		
		for(Workflow_Instance__c work : ChList2){
			if(!requestIdWithWorkflow.containsKey(work.Request__c)){
				requestIdWithWorkflow.put(work.Request__c,reci);
			}
		}
		
		for(Request__c req : trigger.new){
			if(requestIdWithWorkflow.containsKey(req.id)){
				req.adderror('You cannot edit a submitted Request'');
			}
		}
	}
	
}
Thanks,
Abhishek

 
Salesforce2015Salesforce2015
Hi Abhishek,

I tried your code, i got below error.

Error: Variable does not exist: reci at line 19 column 59.
 
 
Abhishek BansalAbhishek Bansal
Hi,

There was a mistake which i have corrected now.
Please change your code with below code :
trigger PreventDeletion1 on Request__c (before delete, before update) {

	if( Trigger.isDelete ) {
	
		List<Recipient__c> ChList1 = [select id, Request__c from Recipient__c where Request__c IN : trigger.old];
		Map<Id,Recipient__c> requestIdWithRecipient = new Map<Id,Recipient__c>();
		
		for(Recipient__c reci : ChList1){
			if(!requestIdWithRecipient.containsKey(reci.Request__c)){
				requestIdWithRecipient.put(reci.Request__c,reci);
			}
		}
		
		List<Workflow_Instance__c> ChList2 = [select id, Request__c from Workflow_Instance__c where Request_Status__c != 'Cancelled' AND Request__c IN : trigger.old];
		Map<Id,Workflow_Instance__c> requestIdWithWorkflow = new Map<Id,Workflow_Instance__c>();
		
		for(Workflow_Instance__c work : ChList2){
			if(!requestIdWithWorkflow.containsKey(work.Request__c)){
				requestIdWithWorkflow.put(work.Request__c,work);
			}
		}
		
		
		for(Request__c req : trigger.old){
			if(requestIdWithRecipient.containsKey(req.id)){
				req.adderror('Please Cancel Request, or Remove Recipients before deleting');
			}
			else if(requestIdWithWorkflow.containsKey(req.id)){
				req.adderror('Please Cancel Request before deleting');
			}
		}
	
	}
	
	else if(trigger.isUpdate ){
		List<Workflow_Instance__c> ChList2 = [select id, Request__c from Workflow_Instance__c where Request_Status__c != 'Cancelled' AND Request__c IN : trigger.new];
		Map<Id,Workflow_Instance__c> requestIdWithWorkflow = new Map<Id,Workflow_Instance__c>();
		
		for(Workflow_Instance__c work : ChList2){
			if(!requestIdWithWorkflow.containsKey(work.Request__c)){
				requestIdWithWorkflow.put(work.Request__c,work);
			}
		}
		
		for(Request__c req : trigger.new){
			if(requestIdWithWorkflow.containsKey(req.id)){
				req.adderror('You cannot edit a submitted Request'');
			}
		}
	}
	
}
Let me know if you still face any isue.

Thanks,
Abhishek


 
This was selected as the best answer
ManojjenaManojjena
Hi Manu,
Try with below code it wil help !!
Trigger PreventDeleteAndUpdate on Request__c (before delete, before update){
    if(Trigger.isBefore){
        if(Trigger.isDelete){
            Map<Id,Integer> reqIdWithRepSizeMap=new Map<Id,Integer>();
            for(Request__c req :[Select id,(SELECT id  from Recipients__r ) FROM Request__c WHERE Id IN : Trigger.old]){
               reqIdWithRepSizeMap.put(req.Id,req.Recipients__r.size());
            }
            for(Request__c reqq :Trigger.old){
              if(reqIdWithRepSizeMap.get(reqq.id) >0){
                reqq.adderror('Please Cancel Request, or Remove Recipients before deleting');
              }
            }
        }if(Trigger.isDelete){
            Map<Id,Integer> reqIdWithWrkinsSizeMap=new Map<Id,Integer>();
            for(Request__c reqs :[Select id,(SELECT id  FROM Workflow_Instance__r WHERE  Request_Status__c != 'Cancelled' ) FROM Request__c WHERE Id IN : Trigger.new]){
               reqIdWithWrkinsSizeMap.put(reqs.Id,reqs.Workflow_Instance__r.size());
            }
            for(Request__c reqst :trigger.new){
                if(reqIdWithWrkinsSizeMap.get(reqst.Id)>0){
                    reqst.adderror('You cannot update a submitted Request');
                }
            }
        }
    }
}
Let e know if it helps !!
Thanks
Manoj