Инициировать обновление дочернего элемента родительским значением при изменении поля родительского элемента. - PullRequest
0 голосов
/ 17 марта 2020

Я пытался написать апекс-триггер, но продолжал терпеть неудачу. Мне нужно обновить три поля в контакте, когда одно из двух полей изменено в родительской учетной записи. Одно поле должно быть обновлено с сегодняшней датой (TODAY ()), в то время как другие поля должны быть обновлены со значением родительских полей. Вот что у меня есть.

Отредактированный код:

trigger UpdateContacts on Acoount (after update){
   Set<Id> accountIds = new Set<Id>();
       List<Contact> ContactsToUpdate = new List<Contact>();
           for (Account account: Trigger.new) {
                   Account oldaccount = Trigger.oldMap.get(Account.Id);
                           if (
                                       Account.Beginning_Balance__c != oldaccount.Beginning_Balance__c ||
                                       Account.Ending_Balance__c != oldaccount.Ending_Balance__c        ) {

                                 accountIds.add(account.Id);        }    }
                                     for (Contact contact: [
                                             select Ending_Balance_Date__c,Beginning_Date__c,Today_s_Date__c, 
                                                        Account_Name__c       
                                                         from Contact      
                                                          where Account_Name__c in :accountIds    ]) {
                                                                      contact.Today_s_Date__c = Today();            
                                                                      contact.Ending_Balance_Date__c = Trigger.newMap.get(contact.Account_Name__c).Ending_Balance__c;            
                                                                      contact.Beginning_Date__c = Trigger.newMap.get(contact.Account_Name__c).Beginning_Balance__c;
            ContactsToUpdate.add(Contact);    }
                if (!ContactsToUpdate.isEmpty()) {
                        update ContactsToUpdate;    }
                        }

Буду очень признателен за любую помощь, которую вы мне можете оказать. Заранее спасибо!

1 Ответ

0 голосов
/ 18 марта 2020

Я заметил две вещи в вашем коде:

1 - вы используете контакты вместо контакта в SOQL.

2 - вы не указали, как он выходит из строя. Это ошибка времени выполнения или ошибка компиляции. Согласно предоставленному вами фрагменту кода, этот код будет иметь ошибку компиляции в следующих двух строках:

contacts.Ending_Balance_Date__c = account.Ending_Balance__c;            

contacts.Beginning_Date__c = account.Beginning_Balance__c;

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

contacts.Ending_Balance_Date__c = Trigger.newMap.get(contacts.AccountId).Ending_Balance__c;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...