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