Несколько вещей. Ваш contractList
объект, похоже, не заполнен чем-то, это просто пустой список, поэтому условие операторов 'if' здесь ContractList.AccountId == fin.get(a.TMS_lookup_Account__c)
никогда не сработает, не только потому, что егопустой список, но потому что вы пытаетесь получить доступ к accountId списка контрактов, который также не будет работать. Другое дело, что вы используете два разных поля в FinanceCapture__c в качестве поля поиска вашей учетной записи: первое FinanceCapture__lookup_Account__c
в запросе SOQL и второе TMS_lookup_Account__c
при проверке договора, связанного с идентификатором FinanceCaptures accountId. Вам необходимо уточнить, что именно вы пытаетесь сделать, что выглядит ...
- Получить список Контракт записей, где accountId содержится в списке accountId из списка trigger.new записей FinanceCapture__c.
- Для всех записей FinanceCapture__c , где был найден Контракт длядля данного идентификатора учетной записи установите в поле contract_term__c соответствующие записи контракта contractTerm поле
Вот триггер, который должен этого достичь (я использовал FinanceCapture__lookup_Account__c в качестве имени поля поиска)
trigger populate_record on FinanceCapture__c (before insert) {
Map<Id, FinanceCapture__c> accountIds = new Map<Id, FinanceCapture__c>();
for(FinanceCapture__c fin : trigger.new){
accountIds.put(fin.FinanceCapture__lookup_Account__c, fin); //Add financeCapture Record to map with its accountId as the key
}
//Create a list of contracts with Id's in the set of id keys from account -> financeCapture map
List<Contract> contractList = [SELECT id, contractTerm, accountId FROM Contract WHERE accountId IN :accountIds.keyset()];
for(Contract contract : contractList){
//Get the FinanceCapture record using the contracts accountId and
//Set the Contract term fields to be equal
accountIds.get(contract.AccountId).contract_Term__c = contract.ContractTerm;
}
}