Salesforce Lead Trigger CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY

时间:2014-05-12 03:14:02

标签: triggers salesforce apex-code

我想克隆Profile__c记录。领导者有一个与之相关的profile__c。转换发生时,潜在客户的Profile_c将复制到创建的帐户。我需要做的是在转换后创建的新帐户上深入克隆Profile__c。我可以复制profile_c但克隆会抛出此错误:

错误:System.DmlException:更新失败。第0行的第一个例外,ID为00QJ0000007dDmHMAU;第一个错误:CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY,profile:执行AfterUpdate导致:System.DmlException:插入失败。第0行的第一个例外;第一个错误:CANNOT_UPDATE_CONVERTED_LEAD,无法引用转换后的引导:[] Trigger.profile :,第1列:[](系统代码)

trigger profile on Lead (after update) {

Map<Id, Lead> cl = new Map<Id,Lead>();
Lead parent;
List<Contact> clist = new List<Contact>();
Set<Id> convertedids = new Set<Id>();

//list of converted leads
for (Lead t:Trigger.new){
    Lead ol = Trigger.oldMap.get(t.ID);
    if(t.IsConverted == true && ol.isConverted == false)
    {
        cl.put(t.Id, t);
        convertedids.add(t.ConvertedContactId);
    }
}
 Set<Id> leadIds = cl.keySet();  

  List<Profile__c> mp = [select Id, lock__c, RecordTypeId, reason__c, End_Date__c,startus__c , Opportunity__c, Account__c, Lead__c from Profile__c where Lead__c in :leadIds];
  List<ID>AccountIDs = new List<ID>();
  List<Profile__c>clonedList = new list<Profile__c>();
  for (Profile__c mpi:mp){
    parent = cl.get(mpi.Lead__c );
    mpi.opportunity__c = parent.ConvertedOpportunityId;
    mpi.account__c = parent.ConvertedAccountId;
    AccountIDs.add(parent.ConvertedAccountId);
    Profile__c profile = mpi.clone(false,true,false,false);
    clonedList.add(profile);
    mpi.lock__c= true;
    mpi.reason__c= 'Converted';
  }
 update mp;
 insert clonelist
}

3 个答案:

答案 0 :(得分:0)

转换导线后,我们无法对导线执行任何操作。 您尝试更新转换后的线索所做的任何操作都会给您带来错误。

答案 1 :(得分:0)

您正在执行插入操作(插入clonelist),您在其中访问字段中的Converted lead Id值。您不能在DML操作中使用转换后的LeadId字段。 以下是可行的示例代码 -

trigger ConvertedLead_Trigger on Lead (after update) {
Map<Id, Lead> cl = new Map<Id,Lead>();
Lead parent;
List<Contact> clist = new List<Contact>();
Set<Id> convertedids = new Set<Id>();

//list of converted leads
for (Lead t:Trigger.new){
    Lead ol = Trigger.oldMap.get(t.ID);
    if(t.IsConverted == true && ol.isConverted == false)
    {
        cl.put(t.Id, t);
        convertedids.add(t.ConvertedContactId);
    }
}
 Set<Id> leadIds = cl.keySet();
     List<ConvertLeadTest__c> mp =[Select Id,Name,Lead__c, Account__c,Opportunity__c from ConvertLeadTest__c where Lead__c in :leadIds];
    List<ConvertLeadTest__c> mp1=new List<ConvertLeadTest__c>();
    List<ConvertLeadTest__c> mp2=new List<ConvertLeadTest__c>();
    for(ConvertLeadTest__c cc:mp)
    {
        if(cl.containsKey(cc.Lead__c))
        {

          cc.Account__c=cl.get(cc.Lead__c).ConvertedAccountId;
          cc.Opportunity__c=cl.get(cc.Lead__c).ConvertedOpportunityId;
            mp1.add(cc);
            mp2.add(new ConvertLeadTest__c(Account__c=cl.get(cc.Lead__c).ConvertedAccountId,Opportunity__c=cl.get(cc.Lead__c).ConvertedOpportunityId));
        }
    }

    update mp;
    insert mp2;
}

但是如果你写的话 ConvertLeadTest__c(Lead__c = cc.Lead__c,Account__c = cl.get(cc.Lead__c).ConvertedAccountId,Opportunity__c = cl.get(cc.Lead__c).ConvertedOpportunityId)); 那么它会抛出错误。

希望这会对你有所帮助。

谢谢:)

答案 2 :(得分:0)

最终为我做的是转换后,我抓住了convertedAccountIds。由于我在转换后已将Profile__c复制到帐户,因此我只是在那里克隆了配置文件,并且必须将该配置文件的前导设置为null,因为它无法更新