【问题标题】:Salesforce Develpment销售人员开发
【发布时间】:2020-04-30 21:40:21
【问题描述】:

我想使用 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;
            
        }
    }
}

我还需要一个测试类

【问题讨论】:

    标签: salesforce salesforce-development


    【解决方案1】:

    您是否使用OpportunityContactRole(商机下的标准相关列表,但可能必须在设置中启用)或者您是否有 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;
        }
    }
    

    【讨论】:

      【解决方案2】:

      在机会上触发 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;
      
      }
      

      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-30
        • 2012-09-12
        • 2012-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多