1

我想使用 Salesforce 最佳实践编写和触发,该最佳实践将关联客户中标记为关键联系人的所有联系人链接到该客户创建时的机会。

我已经做了什么:

trigger OppCreatedKeyContactTrigger on Opportunity (after insert, after Update) {
    for(Opportunity opp : Trigger.New){

        if(Trigger.isInsert || Trigger.isUpdate){
            
            Contact con = [SELECT Id,Name,Key_Contact__c FROM Contact WHERE AccountId =:opp.AccountId];

            con.Key_Contact__c = true;
            update con;
            
        }
    }
}

我还需要一个测试班

4

2 回答 2

0

在机会上触发 OppCreatedKeyContactTrigger(插入后,更新后){

   Set<Id> accountIds = new Set<Id>();

   for(Opportunity o : trigger.new){

       accountIds.add(o.AccountId);

   }

   accountIds.remove(null);

   List<Contact> conList = [SELECT Id,Name,Key_Contact__c FROM Contact WHERE AccountId IN :accountIds];

   List<contact> updateConList = new List<contact>();

   if(Trigger.isInsert || Trigger.isUpdate){

   for(Contact cons : conList){

       updateConList.add(new contact(id=cons.id,Key_Contact__c=true));

   }

}

if(updateConList.size()>0){

     update updateConList;

}

}

于 2021-03-22T09:56:15.317 回答
0

您是使用OpportunityContactRole(机会下的标准相关列表,但可能必须在设置中启用)还是从 Opportunity 到 Contact 有 1 个或多个自定义查找?“更新后”应该发生什么?

像这样的事情应该把你推向正确的方向。如果您遇到问题,我不保证它会编译。这将只是 1 个查询,而不是循环(批量安全)。如果您真的想采用最佳实践 - 下一步将是使用一些触发器处理程序框架。

trigger OpportunityTrigger on Opportunity (after insert) {

    Set<Id> accountIds = new Set<Id>();
    for(Opportunity o : trigger.new){
        accountIds.add(o.AccountId);
    }
    accountIds.remove(null);

    if(!accountIds.isEmpty()){
        Map<Id, Account> accounts = new Map<Id, Account>([
            SELECT Id,
                (SELECT Id FROM Contacts WHERE Key_Contact__c = true)
            FROM Account 
            WHERE Id IN :accountIds
        ]);
        List<OpportunityContactRole> roles = new List<OpportunityContactRole>();

        for(Opportunity o : trigger.new){
            Account a = accounts.get(o.AccountId);
            if(a != null && !a.Contacts.isEmpty()){
                for(Contact c : a.Contacts){
                    roles.add(new OpportunityContactRole(
                        OpportunityId = o.Id,
                        ContactId = c.Id,
                        Role = 'Decision Maker'
                    ));
                }
            }
        }
        insert roles;
    }
}
于 2020-05-01T06:12:56.497 回答