触发帐户以更新联系人
Trigger on Account to update Contact
客户和联系人都有 Billing_Address__c 字段。联系人也有名为 active__c 的复选框。如果 active__c 为真且帐户 Billing_Address__c 已更新,则联系人 Billing_Address__c 已更新。这是触发器。它工作正常。但我想知道是否有任何问题或如何在内存方面优化它?
public static void updateContactBillingAddress(List<Account> lstNew, Map<Id,Account> mapOld){
Set<Id> accIds = new Set<Id>();
for(Account acc : lstNew){
if(acc.Billing_Address__c != mapOld.get(acc.Id).Billing_Address__c && acc.Billing_Address__c !=null){
accIds.add(acc.Id);
}
}
if(!accIds.isEmpty()){
List<Contact> lstContact = new List<Contact>([Select ID,active__c, Account.Billing_Address__c,Billing_Address__c FROM Contact where AccountID IN :accIds]);
List<Contact> lstUpdateCon = new List<Contact>();
for(Contact con : lstContact){
if(con.active__c == true){
if(con.Billing_Address__c != con.Account.Billing_Address__c){
con.Billing_Address__c = con.Account.Billing_Address__c;
lstUpdateCon.add(con);
}
}
else{
con.Billing_Address__c =null;
lstUpdateCon.add(con);
}
}
if(!lstUpdateCon.isEmpty()){
update lstUpdateCon;
}
}
}
不是真的,它是语义,但我 return 一个联系人,一种方法,一件事。您正在处理帐户并更新它们,我会 return List
联系人,而不是用相同的方法更新它们。如果您以后需要 update contacts
,您最终会执行不必要的 DML 语句,您也不需要仅为该循环创建 List
。
public static List<Contact> updateContactBillingAddress(List<Account> lstNew, Map<ID,Account> mapOld)
{
List<Contact> result = new List<Contact>();
Set<Id> accIds = new Set<Id>();
for(Account acc : lstNew)
{
if(acc.Billing_Address__c != null && acc.Billing_Address__c != mapOld.get(acc.Id).Billing_Address__c)
{
accIds.add(acc.Id);
}
}
if(!accIds.isEmpty())
{
for(Contact con : [Select ID,Active__c, Account.Billing_Address__c,Billing_Address__c FROM Contact where AccountID IN :accIds])
{
if(con.Active__c == true){
if(con.Billing_Address__c != con.Account.Billing_Address__c)
{
con.Billing_Address__c = con.Account.Billing_Address__c;
result.add(con);
}
}
else
{
con.Billing_Address__c = null;
result.add(con);
}
}
}
return result;
}
客户和联系人都有 Billing_Address__c 字段。联系人也有名为 active__c 的复选框。如果 active__c 为真且帐户 Billing_Address__c 已更新,则联系人 Billing_Address__c 已更新。这是触发器。它工作正常。但我想知道是否有任何问题或如何在内存方面优化它?
public static void updateContactBillingAddress(List<Account> lstNew, Map<Id,Account> mapOld){
Set<Id> accIds = new Set<Id>();
for(Account acc : lstNew){
if(acc.Billing_Address__c != mapOld.get(acc.Id).Billing_Address__c && acc.Billing_Address__c !=null){
accIds.add(acc.Id);
}
}
if(!accIds.isEmpty()){
List<Contact> lstContact = new List<Contact>([Select ID,active__c, Account.Billing_Address__c,Billing_Address__c FROM Contact where AccountID IN :accIds]);
List<Contact> lstUpdateCon = new List<Contact>();
for(Contact con : lstContact){
if(con.active__c == true){
if(con.Billing_Address__c != con.Account.Billing_Address__c){
con.Billing_Address__c = con.Account.Billing_Address__c;
lstUpdateCon.add(con);
}
}
else{
con.Billing_Address__c =null;
lstUpdateCon.add(con);
}
}
if(!lstUpdateCon.isEmpty()){
update lstUpdateCon;
}
}
}
不是真的,它是语义,但我 return 一个联系人,一种方法,一件事。您正在处理帐户并更新它们,我会 return List
联系人,而不是用相同的方法更新它们。如果您以后需要 update contacts
,您最终会执行不必要的 DML 语句,您也不需要仅为该循环创建 List
。
public static List<Contact> updateContactBillingAddress(List<Account> lstNew, Map<ID,Account> mapOld)
{
List<Contact> result = new List<Contact>();
Set<Id> accIds = new Set<Id>();
for(Account acc : lstNew)
{
if(acc.Billing_Address__c != null && acc.Billing_Address__c != mapOld.get(acc.Id).Billing_Address__c)
{
accIds.add(acc.Id);
}
}
if(!accIds.isEmpty())
{
for(Contact con : [Select ID,Active__c, Account.Billing_Address__c,Billing_Address__c FROM Contact where AccountID IN :accIds])
{
if(con.Active__c == true){
if(con.Billing_Address__c != con.Account.Billing_Address__c)
{
con.Billing_Address__c = con.Account.Billing_Address__c;
result.add(con);
}
}
else
{
con.Billing_Address__c = null;
result.add(con);
}
}
}
return result;
}