0

我创建了一个机会触发器,可在阶段关闭时向两个单独的电子邮件地址字段发送电子邮件,具体取决于活动类型。它工作得非常好,但最近当我尝试更新 200 个机会记录的列表时,它给了我一个错误,说“代码语句太多 200001 ”。

我的代码如下:

trigger SendEmail on Opportunity (after update)
{
        Set<Id> accountSet = new Set<Id>();
        Set<Id> marketSet = new Set<Id>();

        for (Opportunity o : Trigger.new) {
        accountSet.add(o.Accountid);
        marketSet.add(o.Campaignid);
        }
        Map<Id, Account> accountMap = new Map<Id, Account>([SELECT Name, Phone, PersonMobilePhone, PersonEmail  from Account where id in :accountSet] );
        map<Id, Campaign> marketMap = new Map<Id, Campaign>([SELECT Name, Parent_Market__c from Campaign where id in :marketSet]); 
        for (Opportunity o : Trigger.new) {
           if(o.Campaign_Type__c != Null && o.StageName != Null){
           for (Integer i = 0; i < Trigger.old.size(); i++) {
           Opportunity old = Trigger.old[i];
           Opportunity nw = Trigger.new[i];
           Account theAccount = accountMap.get(o.AccountId);
           Campaign Market = marketMap.get(o.CampaignId);
           String userName = UserInfo.getUserName();

            Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();                   
            List<String> toAddresses = new List<String>();
            List<String> ccAddresses = new List<String>();
            ccAddresses.add('test@test.com');
            mail.setToAddresses(toAddresses);       
            mail.setCcAddresses(ccAddresses);
            mail.setSenderDisplayName('Campaign Information');

            mail.setSubject(+ theAccount.Name + ' is Closed Won');

            mail.setReplyTo('noreply@salesforce.com');
            //Body of the Email
            mail.setHtmlBody(
               '<font face="Times" size="3">'+
               '<table width="100%">'+
               '<tr width="0%">'+
               '<td rowspan="0">'+
              '</td>'+
               '<td>'+
               '<h2>Account is closed won notification</h2>'+
               '</td>'+
               '</tr>'+
               '</table>'+
               '<br/>'+
               '<b>Stage:</b> ' + o.StageName + '<br/>' + '<br/>' +
               '<b>Opportunity Number:</b> ' + o.Name + '<br/>' +
               '<b>Amount Paid:</b> $' + o.Amount + '<br/>' + '<br/>' +
               '<b>Account Name:</b> ' + theAccount.Name + '<br/>' +
               '<b>Phone:</b> ' + theAccount.Phone + '<br/>' +
               '<b>Mobile:</b> ' + theAccount.PersonMobilePhone + '<br/>'+
               '<b>Email:</b> ' + theAccount.PersonEmail + '<br/>'+
               );

          // Send Email if it isCampaign1 and Closed Won
          if((nw.StageName !=old.StageName) || (nw.Campaign_Type__c !=old.Campaign_Type__c)){               
            if(o.Campaign_Type__c.equals('Campaign1')){
                if(o.StageName.equals('Closed Won') ){
                toAddresses.add(o.Email__c);
                try {
                Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
                }
                catch(Exception ex) { }
                }

            }
          }
          // Send Email if it is Campaign2 and Closed Won
          if((nw.StageName !=old.StageName) || (nw.Campaign_Type__c !=old.Campaign_Type__c)){     
            if(o.Campaign_Type__c.equals('Campaign2')){
              if(o.StageName.equals('Closed Won')){
                 toAddresses.add(o.Email2__c);
                 toAddresses.add(o.Email1__c);
                try {
                Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
                }
                catch(Exception ex) { }
                }
            }
          }    
            }   
       }
       }     
}

任何帮助将不胜感激。

谢谢

4

1 回答 1

0

为什么要为每个机会 Trigger.new.size() 电子邮件进行打磨?你的代码度数是 n*n。

改变

for (Opportunity o : Trigger.new) {
           if(o.Campaign_Type__c != Null && o.StageName != Null){
           for (Integer i = 0; i < Trigger.old.size(); i++) {
           Opportunity old = Trigger.old[i];
           Opportunity nw = Trigger.new[i];

像这样的东西

 for (Opportunity o : Trigger.new) {
                   if(o.Campaign_Type__c != Null && o.StageName != Null){
                   Opportunity old = Trigger.old.get(o.Id);
                   Opportunity nw = o;
                   if(((nw.StageName !=old.StageName) || (nw.Campaign_Type__c !=old.Campaign_Type__c)) && (nw.StageName.equals('Closed Won')&&((nw.Campaign_Type__c.equals('Campaign1')||(nw.Campaign_Type__c.equals('Campaign2')){
              .......................    
于 2013-07-21T05:58:36.180 回答