
Your trigger will simply query all cases whose parent id is in the new one and check their status
NOTE: This code has not been tested and may contain typographical or logical errorstrigger parentCheck on Case (before update) {
Set<Id> caseIds = new Set<Id>();
for (Case c : Trigger.new) {
if (c.Status == 'Closed') {
caseIds.add(c.Id);
}
}
if (!caseIds.isEmpty()) {
Map<Id, List<Case>> caseToParentMap = new Map<Id, List<Case>>();
for (Id id : caseIds) {
caseToParentMap.put(id, new List<Case>());
}
for (Case c : [
select ParentId
from Case
where ParentId in :caseIds and
Status != 'Closed'
]) {
caseToParentMap.get(c.ParentId).add(c);
}
for (Id id : caseIds) {
if (!caseToParentMap.get(id).isEmpty()) {
Trigger.newMap.get(id).addError('Case has unclosed children');
}
}
}
}