У меня есть настройки, где у нас есть учетные записи и личные счета. Персональные учетные записи в некоторых случаях связаны с учетными записями через AccountContactRelation. Если владелец особого типа Учетных записей изменяется, мы хотим изменить владельца всех связанных Учетных записей на того же владельца, что и у нового владельца Учетной записи.
Я написал триггер APEX для этого, и, если текущие владельцы всех связанных учетных записей лиц являются одним и тем же пользователем, все работает отлично. С другой стороны, если некоторые из учетных записей пользователей имеют разных пользователей в качестве владельцев, то триггер завершается с сообщением об ошибке:
ArmAccountOwnerChange: execution of BeforeUpdate, caused by: System.DmlException: Update failed. First exception on row 0 with id 0010Q0000050J0FQAU; first error: INVALID_FIELD, All accounts must have the same current owner and new owner.: [OwnerId] Trigger.ArmAccountOwnerChange: line 23, column 1
Вот триггер. Есть идеи, почему это происходит?
trigger ArmAccountOwnerChange on Account (before update) {
List<AccountContactRelation> acr = New List<AccountContactRelation>();
List<Account> acc = New List<Account>();
RecordType rec = [Select Id From RecordType Where DeveloperName = 'ARM_Account' Limit 1];
for(Account a: Trigger.new) {
if(a.OwnerId != Trigger.oldMap.get(a.id).OwnerId && a.RecordTypeId == rec.id) {
acr = [SELECT Id, ContactId From AccountContactRelation Where AccountId = :a.id];
If(acr.size() > 0) {
for(AccountContactRelation b: acr) {
acc.addAll([Select Id, OwnerId From Account Where PersonContactId = :b.ContactId]);
}
}
If(acc.size() > 0) {
for(Account c: acc) {
c.OwnerId = a.OwnerId;
}
}
update acc;
}
}
}