【问题标题】:Trigger updating child with parent value when a field on the parent is changed当父项上的字段更改时,触发使用父值更新子项
【发布时间】:2020-03-17 19:40:11
【问题描述】:

我尝试编写顶点触发器,但一直失败。当父帐户上的两个字段之一发生更改时,我需要更新联系人上的三个字段。一个字段需要用今天的日期(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;    }
                        }

您能为我提供的任何帮助将不胜感激。提前谢谢!

【问题讨论】:

    标签: triggers salesforce apex


    【解决方案1】:

    我注意到您的代码中有两件事:

    1- 您在 SOQL 中使用的是联系人而不是联系人。

    2- 您尚未指定失败的原因。是运行时错误还是编译错误。根据您提供的代码 sn-p,此代码将在以下两行出现编译错误:

    contacts.Ending_Balance_Date__c = account.Ending_Balance__c;            
    
    contacts.Beginning_Date__c = account.Beginning_Balance__c;
    

    account 变量不再可访问,因为它超出了它已初始化的范围(for 循环)。您需要从

    获取值
    contacts.Ending_Balance_Date__c = Trigger.newMap.get(contacts.AccountId).Ending_Balance__c;
    

    【讨论】:

    • 感谢您的帮助!我进行了建议的更改,但收到此错误“错误:编译错误:方法不存在或签名不正确:来自第 5 行第 70 列的 Map 类型的 void get(Schema.SObjectField)。”
    • 我编辑了我的问题以包含新代码 sn-p。
    • 在第 5 行中,您指的是 sObject Account 而不是 account 变量。应该是这样的:Account oldaccount = Trigger.oldMap.get(account.Id);
    猜你喜欢
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 2021-11-04
    • 2021-09-26
    • 1970-01-01
    • 2021-12-09
    相关资源
    最近更新 更多