Напишите триггер в Учетной записи всякий раз, когда обновляется поле Годовой доход, проверьте общее количество контактов, связанных с этой учетной записью, разделите Годовой доход на общее количество связанных контактов и заполните значение в поле Contact_Revenue__c для этих контактов.
trigger AccountTrigger2 on Account (after update) { switch on Trigger.operationType { WHEN AFTER_UPDATE { AccountTrigger2Handler.afterUpdate(Trigger.new, Trigger.oldMap); } } } public class AccountTrigger2Handler { public static void afterUpdate(List<Account> accList, Map<Id,Account> oldAccMap) { List<Contact> conList = new List<Contact>(); Map<Id,Account> accToAccountMap = new Map<Id,Account>(); for(Account acc : accList) { if(acc.AnnualRevenue != null && acc.AnnualRevenue != oldAccMap.get(acc.Id).AnnualRevenue) { accToAccountMap.put(acc.Id, acc); } } Map<Id,AggregateResult> results = new Map<Id,AggregateResult>([SELECT AccountId Id, COUNT(Id) ContactCount FROM Contact WHERE AccountId IN : accToAccountMap.keySet() GROUP BY AccountId]); if(accToAccountMap.size() > 0) { for(Contact con : [SELECT Id, Contact_Revenue__c, AccountId FROM Contact WHERE AccountId IN : accToAccountMap.keySet()]) { if(results.containskey(con.AccountId)) { AggregateResult ar = results.get(con.AccountId); Integer i = Integer.valueOf(ar.get('ContactCount')); Decimal val = accToAccountMap.get(con.AccountId).AnnualRevenue/i; con.Contact_Revenue__c = val; conList.add(con); } } } if(conList.size() > 0) { update conList; } } }