Подсчет общего количества активных контактов для учетной записи

Я создал флажок для контактов, чтобы представить его статус (active__c), и еще одно настраиваемое поле для объекта учетной записи, которое представляет общее количество активных контактов (activeContact__c).

Нижеприведенный код работает нормально, но когда я обнуляю общее количество активных контактов для любой учетной записи, оно по-прежнему равно 1.

Не могли бы вы объяснить, что я делаю неправильно здесь? Спасибо.

trigger CountActiveContacts on Contact (after insert , after update) {
     switch on Trigger.operationType {
        when AFTER_INSERT, AFTER_UPDATE {
            List<Account> accountList = new List<Account>();
            Set<Id> accIds = new Set<Id>();
 
            
            for(Contact c : Trigger.new){                
                    accIds.add(c.AccountId);
            }
            
            AggregateResult[] groupedResult = [select accountid accID, count(id) totalCountOfActiveContacts from contact where active__c = true and AccountId =: accIds group by accountid ];
            
            for(AggregateResult result: groupedResult){
                accountList.add(new Account(id= (id)result.get('accID'), activeContact__c= (Integer) (result.get('totalCountOfActiveContacts'))));
            }
            update accountList;
        }        
     }
}
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
24
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда последний контакт был снят, ваш запрос начинает возвращать 0 строк

select accountid accID, count(id) totalCountOfActiveContacts 
from contact 
where active__c = true and AccountId =: accIds 
group by accountid

так что больше зацикливаться не на чем.

Попробуйте сделать учетные записи как карту и инициализировать счетчик на ноль. И вам даже не понадобится Сет

Map<Id, Account> accs = new Map<Id, Account>();
for(Contact c : trigger.new){
    accs.put(c.AccountId, new Account(Id = c.AccountId, ActiveContact__c = 0));
}

AggregateResult[] groupedResult = [select accountid accID, count(id) totalCountOfActiveContacts from contact where active__c = true and AccountId =: accs.keyset() group by accountid ];
            
for(AggregateResult result: groupedResult){
    accs.get((Id) result.get('accID')).ActiveContact__c = (Integer) result.get('totalCountOfActiveContacts');
}

Другие вопросы по теме

Похожие вопросы

Сопоставьте массив с каждым отдельным JSON, чтобы можно было создавать записи
Поиск или создание URL-адреса для нового веб-компонента Lightning/ отдела продаж
Блокировка состояний в Salesforce
Представление HTML SelectBox Данные объекта Salesforce
Необходимо обновить Роли (Пользовательское поле) Сотрудника (Пользовательские), которые отмечены
Разве нельзя использовать запрос SOQL из внешней системы, такой как мобильное приложение, для получения статей базы знаний?
Выполнение одного вызова сервера в молнии вместо нескольких вызовов
Транспонировать строки в определенные общие столбцы по порядку
Реализуйте преобразование потенциальных клиентов с помощью пользовательской кнопки
Запускать при возможности всякий раз, когда данные поля изменяются в пользовательских метаданных, а затем обновлять данные этого поля в соответствующем поле учетной записи