Смена владельца контакта (PA) в Salesforce при изменении владельца учетной записи завершается неудачно, если предыдущие владельцы контактов (PA) не были тем же пользователем - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть настройки, где у нас есть учетные записи и личные счета. Персональные учетные записи в некоторых случаях связаны с учетными записями через 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;
        }
}       

}

1 Ответ

0 голосов
/ 13 апреля 2019

Вы должны настроить список учетных записей для каждого равного владельца, а затем выполнить обновление для каждого из этого списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...