このトリガーが、基準に一致しないレコードを更新することがある理由がわかりません。アカウントが「保留中」からアクティブなサービスに移行すると、キャンセルされたすべての割り当てが保留に戻されるという考え方です。何が原因なのかわかりませんが、サービスに変更のないアカウントの割り当ては、しばらくの間キャンセルされないようです。コードは次のとおりです。
trigger cancelAssignments on Account (before update) {
List<Assignment__c> masterListA = [select Id, Status__c, Practice__c from Assignment__c where Practice__c IN :Trigger.newMap.keySet() and type_of_work__c != 'a0Qa000000G1WmVEAV' AND (status__c = 'Feedback Needed' OR status__c = 'Pending Review' OR status__c = 'Accepted')];
List<Assignment__c> masterListB = [select Id, Status__c, Practice__c from Assignment__c where Practice__c IN :Trigger.newMap.keySet() and type_of_work__c != 'a0Qa000000G1WmVEAV' AND (status__c = 'Canceled')];
for (Account oAccount : trigger.new) {
if (oAccount.current_services__c == null || oAccount.current_services__c == 'Hold'){
for (Account oAcct : trigger.old){
if (oAcct.current_services__c != null && oAcct.current_services__c != 'Hold'){
List<Assignment__c> assignmentsToUpdate = new List<Assignment__c>();
for (Assignment__c rd : masterListA){
if (rd.practice__c == oAccount.id){
rd.Status__c = 'Canceled';
assignmentsToUpdate.add(rd);
}
}update assignmentsToUpdate;
}
}
}
else if (oAccount.current_services__c != 'Hold' && oAccount.current_services__c != null ){
for (Account oAcctB : trigger.old){
if (oAcctB.current_services__c == 'Hold'){
List<Assignment__c> assignmentsToUpdateB = new List<Assignment__c>();
for (Assignment__c rdB : masterListB){
if (rdB.practice__c == oAccount.id){
rdB.Status__c = 'Pending Review';
assignmentsToUpdateB.add(rdB);
}
}update assignmentsToUpdateB;
}
}
}
}
}