You need to sign in to do that
Don't have an account?
problem with trigger
I wrote a trigger after update for child cases. If all the child cases are closed, the Inactive field of the ContactId reference of the parent case will be set to true...I am getting an exception with the following code, when I try to close the last child case. Its then trying to evaluate the innermost if condition and hitting the exception..
trigger childsClosed on Case (after update) { Case b = new Case(); if (Trigger.New[0].Status == 'Closed') { if (Trigger.New[0].ParentId != null) { list<Case> a = [Select Id from Case where Id = :Trigger.New[0].ParentId and Subject = 'Delete Network ID or Reset password' limit 1]; if(a.size() != 0) { b = a[0];} if (b.Id != null) { integer childCases = [Select count() from Case where ParentId = :b.Id]; integer closed = [Select count() from Case where ParentId = :b.id and Status = 'Closed']; if (closed == childCases) { b.Contact.Inactive__c = true; } } } } }
And I am getting the exception that says:
Apex script unhandled trigger exception by user/organization: 005700000018KNh/00D70000000JLCa
childsClosed: execution of AfterUpdate
caused by: System.SObjectException: SObject row was retrieved via SOQL without querying the requested field: Case.Contact
Trigger.childsClosed: line 12, column 6
Mallikam,
1. Replace b.Contact.Inactive__c = true; with the following,
Contact c = [SELECT Inactive__c FROM contact WHERE id = :Trigger.Old[0].ContactId];
c.Inactive__c = TRUE;
UPDATE c;
The above should take care of the error.
2. Instead of running two SOQL to check if all the child calls are closed, you may want to just check if the count of any Open Child calls == 0. Just a thought.... :o)
All Answers
Mallikam,
1. Replace b.Contact.Inactive__c = true; with the following,
Contact c = [SELECT Inactive__c FROM contact WHERE id = :Trigger.Old[0].ContactId];
c.Inactive__c = TRUE;
UPDATE c;
The above should take care of the error.
2. Instead of running two SOQL to check if all the child calls are closed, you may want to just check if the count of any Open Child calls == 0. Just a thought.... :o)
Thanks a lot!! It works! You know what, I tried almost the same thing but because I was looking for Trigger.new[0].ContactId and since I am not updating, it did not work. Also, I changed the code to below(I am a database novice, so I am unable to think any better if I am doing any database stuff!)
if (open == 0) {
Contact c = [SELECT Inactive__c FROM contact WHERE id = :Trigger.Old[0].ContactId];c.Inactive__c = true;
update c;}