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
Forrest MulduneForrest Muldune 

When Record from Custom object is deleted Trigger not Firing

All,

I have a one to many relationship between Opportunities and a custom object name Loan__c (one Opportunity to many Loan__c). When I delete a loan record, my trigger below does not fire. 

Does anyone know how to update this code so that when I delete a loan record, the trigger will fire?

Trigger updateDealWithLoanInfo2 on Loan__c (after insert, after update) {
    if(Trigger.isAfter && ( Trigger.isInsert || Trigger.isUpdate )) {
        map<id,id> dealMap = new map<id,id>();
        set<id> consumerDeals = new set<id>();
        set<id> consumerDealsYellow = new set<id>();
        set<id> participatedDeals = new set<id>();
        list<Loan__c> loans = new List<Loan__c>();  
        list<Opportunity> deals = new List<Opportunity>();  
        list<Opportunity> updatedDeals = new List<Opportunity>();  

        for(Loan__c l : Trigger.new) {
            if(l.Deal__c <> NULL) {
                dealMap.put(l.Deal__c, l.Id);
            }
        }
        if(dealMap.size()>0){
            loans = [Select Deal__c, Consumer__c, Participated__c from Loan__c where Deal__c in :dealMap.keySet()];
            for (Loan__c l2 : loans){
                if(l2.Consumer__c == 'Consumer'){
                    consumerDeals.add(l2.Deal__c);
                }
                if(l2.Consumer__c == 'Ambiguous' || l2.Consumer__c == NULL || l2.Consumer__c == 'Insufficient information'|| l2.Consumer__c == 'Not reviewed'){
                    consumerDealsYellow.add(l2.Deal__c);
                }
                if(l2.Participated__c == TRUE){
                    participatedDeals.add(l2.Deal__c);
                }
            }
            deals = [Select Id, Consumer_Loan__c,Consumer_Loan_Hidden__c, Participated_Loan__c from Opportunity where Id in :dealMap.keySet()]; 
            for (Opportunity o : deals){
                if(consumerDeals.contains(o.Id)){
                    o.Consumer_Loan__c = TRUE;
                    o.Consumer_Loan_Hidden__c = FALSE;
                }else{
                    o.Consumer_Loan__c = FALSE;
                }
                if(consumerDealsYellow.contains(o.Id)){
                    o.Consumer_Loan_Hidden__c = TRUE;
                }else{
                    o.Consumer_Loan_Hidden__c = FALSE;
                }
                if(participatedDeals.contains(o.Id)){
                    o.Participated_Loan__c = TRUE;
                }else{
                    o.Participated_Loan__c = FALSE;
                }
                updatedDeals.add(o);
            }
            if(updatedDeals.size()>0){
                update updatedDeals;
            }
        }
    }
Rahul BorgaonkarRahul Borgaonkar
Hi,

I am not finding delete event in your trigger.
Trigger updateDealWithLoanInfo2 on Loan__c (after insert, after update, before/after delete)
please read link below
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_triggers_syntax.htm

Thanks

Rahul
Forrest MulduneForrest Muldune
Rahul,

I appreciate the feedback , however when I added the after delete and before delete to the trigger, the trigger still did not fire. do you have other suggestions why the trigger did not fire?

 
badibadi
Bhavana Adiga
Did you change your code to look for delete in line 2 ? Currently it is checking only for if its insert or update.
if(Trigger.isAfter && ( Trigger.isInsert || Trigger.isUpdate ||  Trigger.isDelete )) {
Rahul BorgaonkarRahul Borgaonkar
Hi,

Please change your code as
Trigger updateDealWithLoanInfo2 on Loan__c (after insert, after update, before delete)
{
/// Your original code - not repeating all lines
 
// New code for delete
    if(Trigger.isBefore && Trigger.isDelete)
    {
          system.debug('Delete trigger executes -  ' + Trigger.old);
         // Trigger.old variable as Trigger.new is not available after delete
    }
}


Let me know how it goes.

Regards,

Rahul
Forrest MulduneForrest Muldune
Rahul,

After updating the code below and I tried deleting a loan record, I receive error message below. did I copy and paste the coding correctly



User-added image
Trigger updateDealWithLoanInfo2 on Loan__c (after insert, after update, before delete) {
 /// Your original code - not repeating all lines
 
 // New code for delete   
    if(Trigger.isBefore && Trigger.isDelete){
          system.debug('Delete trigger executes -  ' + Trigger.old);
          // Trigger.old variable as Trigger.new is not available after delete

        map<id,id> dealMap = new map<id,id>();
        set<id> consumerDeals = new set<id>();
        set<id> consumerDealsYellow = new set<id>();
        set<id> participatedDeals = new set<id>();
        list<Loan__c> loans = new List<Loan__c>();  
        list<Opportunity> deals = new List<Opportunity>();  
        list<Opportunity> updatedDeals = new List<Opportunity>();  

        for(Loan__c l : Trigger.new) {
            if(l.Deal__c <> NULL) {
                dealMap.put(l.Deal__c, l.Id);
            }
        }
        if(dealMap.size()>0){
            loans = [Select Deal__c, Consumer__c, Participated__c from Loan__c where Deal__c in :dealMap.keySet()];
            for (Loan__c l2 : loans){
                if(l2.Consumer__c == 'Consumer'){
                    consumerDeals.add(l2.Deal__c);
                }
                if(l2.Consumer__c == 'Ambiguous' || l2.Consumer__c == NULL || l2.Consumer__c == 'Insufficient information'|| l2.Consumer__c == 'Not reviewed'){
                    consumerDealsYellow.add(l2.Deal__c);
                }
                if(l2.Participated__c == TRUE){
                    participatedDeals.add(l2.Deal__c);
                }
            }
            deals = [Select Id, Consumer_Loan__c,Consumer_Loan_Hidden__c, Participated_Loan__c from Opportunity where Id in :dealMap.keySet()]; 
            for (Opportunity o : deals){
                if(consumerDeals.contains(o.Id)){
                    o.Consumer_Loan__c = TRUE;
                    o.Consumer_Loan_Hidden__c = FALSE;
                }else{
                    o.Consumer_Loan__c = FALSE;
                }
                if(consumerDealsYellow.contains(o.Id)){
                    o.Consumer_Loan_Hidden__c = TRUE;
                }else{
                    o.Consumer_Loan_Hidden__c = FALSE;
                }
                if(participatedDeals.contains(o.Id)){
                    o.Participated_Loan__c = TRUE;
                }else{
                    o.Participated_Loan__c = FALSE;
                }
                updatedDeals.add(o);
            }
            if(updatedDeals.size()>0){
                update updatedDeals;
            }
        }
    }
}
Rahul BorgaonkarRahul Borgaonkar
Hi,

I have not put actual delete code. That you have to put in. I just mentioned where should you put your delete code. Let me explain again.
 
Trigger updateDealWithLoanInfo2 on Loan__c (after insert, after update, before delete)
{
	/// Your original code - not repeating all lines
	// New code for delete
        if(Trigger.isBefore && Trigger.isDelete)
        {
             /// Put your delete code here. As I am not sure if you are be doing any addtional checkings before deleting these records.
             system.debug('Delete trigger executes -  ' + Trigger.old); 
        }
}
You keep your original code and below original code add if codition which is after line
// New code for delete
And in if condtion put actual delete code. records are deleted using DML statement delete.

I hope your are clear now.

Regards,

Rahul
 
Forrest MulduneForrest Muldune
Thanks for the advice, I will give this a try.