Triggers 当父项上的字段更改时,触发使用父项值更新子项

Triggers 当父项上的字段更改时,触发使用父项值更新子项,triggers,salesforce,apex,Triggers,Salesforce,Apex,我试图编写一个apex触发器,但一直失败。当父帐户上的两个字段之一发生更改时,我需要更新联系人上的三个字段。一个字段需要用今天的日期(today())更新,而其他字段需要用父字段的值更新。这是我到目前为止所拥有的 编辑代码: trigger UpdateContacts on Acoount (after update){ Set<Id> accountIds = new Set<Id>(); List<Contact> ContactsT

我试图编写一个apex触发器,但一直失败。当父帐户上的两个字段之一发生更改时,我需要更新联系人上的三个字段。一个字段需要用今天的日期(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;    }
                        }
在计数时触发UpdateContacts(更新后){
Set accountIds=new Set();
列表联系人更新=新列表();
for(帐户:Trigger.new){
Account oldcount=Trigger.oldMap.get(Account.Id);
如果(
Account.start\u Balance\u c!=旧Account.start\u Balance\u c||
Account.Ending\u Balance\uu c!=旧Account.Ending\u Balance\uu c){
accountIds.add(account.Id);}
联系方式:[
选择结束日期、开始日期、今天日期,
账户名称
从接触
其中帐户名称(在:accountIds中){
contact.Today_s_Date__c=Today();
contact.Ending\u Balance\u Date\uuuuu c=Trigger.newMap.get(contact.Account\u Name\uuuu c)。Ending\u Balance\uu c;
contact.start\u Date\uuuu c=Trigger.newMap.get(contact.Account\u Name\uuu c)、start\u Balance\uu c;
ContactsToUpdate.add(联系人);}
如果(!ContactsToUpdate.isEmpty()){
更新联系人更新;}
}

如果您能为我提供任何帮助,我将不胜感激。提前谢谢你

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

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

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

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列的类型映射中的void get(Schema.SObjectField)。”我编辑了我的问题以包含新的代码段。在第5行中,您指的是sObject Account,而不是Account变量。它应该如下所示:Account oldcount=Trigger.oldMap.get(Account.Id);